Scarica multifiles v0.5
Licenza: GPLv2, GPLv3.
Il file per la distribuzione viene inviato ciclicamente alla rete in un flusso multicast UDP (User Datagram Protocol) verso un determinato indirizzo multicast (per impostazione predefinita l'indirizzo è 224.2.2.4, porta 2222). Per ricevere il firmware, l'applicazione client deve unirsi al gruppo del multicast inviando una richesta IGMP e avviare il download del file. Una volta completato il download, l'applicazione client si disconnette dal gruppo e verifica l'integrità del file. Se la verifica è completata correttamente, il file viene decompresso (il formato è .tar.gz) e viene avviato lo script customup.sh contenuto nell'archivio appena scaricato. Lo script esegue l'aggiornamento dei file e tutte le altre attività necessarie allo stesso aggiornamento.
L'utilizzo del multicast consente di aggiornare in diretta qualsiasi numero di decodificatori IP utilizzando un solo flusso.
Se la versione corrente del firmware è simile o più recente di quella distribuita nel flusso, l'applicazione client non esegue l'aggiornamento. Tuttavia, se nel server viene selezionata l'opzione "force update" (Forza aggiornamento), l'aggiornamento viene eseguito a prescindere dalla versione del software.
Fig. 1. Uno schema della rete con Multifiles
Il flusso è costituito da pacchetti UDP insieme al titolo del seguente formato:
struct mulfiles_header{
uint32_t message_type;
uint32_t flags;
uint32_t data_size;
uint32_t sequence_no;
uint32_t file_offset;
};
message_type può avere uno dei seguenti due valori:
#define MF_MTYPE_INFO 0x04030201 #define MF_MTYPE_DATA 0x04030202
I pacchetti di tipo MF_MTYPE_INFO sono pacchetti informativi che contengono informazioni relative al file distribuito, inclusi i seguenti dati:
struct mulfiles_message_info{
uint32_t file_size;
uint32_t fw_version;
unsigned char md5sum[16];
char filename[1024];
};
dimensioni del file, versione del firmware, nome del file e somma MD5 per il controllo dell'integrità. Per impostazione predefinita, i pacchetti informativi vengono inviati ogni 2 secondi.
Nei pacchetti di tipo MF_MTYPE_DATA risiede il contenuto del file distribuito. Nel titolo sono incluse le informazioni sull'offset dei dati contenuti nel pacchetto relativamente alla parte iniziale del file. L'applicazione client può inziare l'esecuzione del download senza attendere l'avvio del ciclo successivo. Questa logica consente il download dei file senza causare ulteriori ritardi dovuti alla ricerca della parte iniziale o finale del file.
La velocità della trasmissione dei dati nella rete può essere regolata mediante le opzioni della riga di comando dell'applicazione server. Per impostazione predefinita, la velocità è 100 Kbyte al secondo.
Opzioni della riga di comando del server:
multifiles # ./mfsrv -h NetUP's multicast file upload utility (server). Copyright (c) 2001-2008 NetUP Inc. www.netup.tv. Compile date: Nov 3 2008 13:22:49 Use this utility at your own risk. usage: options [-i IP] Multicast IP address to use. Default: 224.2.2.4 [-p port] UDP port to use. Default: 2222 [-d] Enable debug messages. Default: disabled [-f file] Name of the file to send. Default: testfile.bin [-s speed] Upload speed Kbytes/sec. Default: 100 Kbytes/sec [-t delay] Prophylactic info messages delay, sec. Default: 2 sec [-u] Setting force update flag. Default: force update flag not set [-a version] Firmware version. Default: 0 [-h] This help
Esempio di avvio del server:
multifiles # ./mfsrv -i 224.5.6.7 -p 1111 -f ./netup.tgz -s 100 -a 1104 -t 6 Using file:./netup.tgz file name:netup.tgz prophylactic_delay:6 Speed:102400 bytes/sec psleep: 13513 + Sending file:netup.tgz sequence:1 o Prophylactic info: 1068 bytes from 1068 send to socket:3 o Prophylactic info: 1068 bytes from 1068 send to socket:3 o Prophylactic info: 1068 bytes from 1068 send to socket:3 o Prophylactic info: 1068 bytes from 1068 send to socket:3 o Prophylactic info: 1068 bytes from 1068 send to socket:3 o Prophylactic info: 1068 bytes from 1068 send to socket:3 o Prophylactic info: 1068 bytes from 1068 send to socket:3 o Prophylactic info: 1068 bytes from 1068 send to socket:3 o File:netup.tgz successfully sent + Sending file:netup.tgz sequence:2
Come illustrato dall'esempio, il file netup.tgz viene inviato al gruppo multicast 224.5.6.7:1111 a una velocità di 100 Kbyte/s. La versione del firmware è la 1104.
Opzioni della riga di comando dell'applicazione client:
multifiles # ./mfcln -h
NetUP's multicast file upload utility (client). Copyright (c) 2001-2008 NetUP Inc.
www.netup.tv. Compile date: Nov 3 2008 13:22:48
Use this utility at your own risk.
usage:
options
[-i IP] Multicast IP address to use. Default: 224.2.2.4
[-p port] UDP port to use. Default: 2222
[-t socket wait timeout] UDP socket timeout, sec. Default: 10 sec.
[-d] Enable debug messages. Default: disabled
[-f file] Name of the file to save. Default using filename coming from server
[-s stat_file] Name of the file to save stats in. Default: /tmp/mfstat.log
[-a fw_version] Current fw version. Download is started only if
the received version is newer than current. Default: 0
[-h] This help
Esempio di avvio dell'applicazione client:
multifiles # ./mfcln -i 224.5.6.7 -p 1111 -a 1100 Waiting for incoming data ... Info message received. sequence:9240 filename:netup.tgz outfilename:netup.tgz.9240 size:5741931 bytes Receiving data ... Filling file to required 5741931 bytes, blocks size is:1048576 File filled. Size is:5741931 requested size is:5741931. Starting write into First offset:1379 Prophylactic info message received. filename:netup.tgz offset:208380 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:615480 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:1022580 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:1431060 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:1838160 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:2245260 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:2653740 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:3060840 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:3467940 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:3875040 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:4283520 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:4690620 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:5097720 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:5506200 size:5741931 bytes force update:0 fw_version:1104 Prophylactic info message received. filename:netup.tgz offset:69000 size:5741931 bytes force update:0 fw_version:1104 File 'netup.tgz.9240' received. Checking ... e7a646426d66b5df3318ba09f1ae33d2 - our file md5. size:5741931 e7a646426d66b5df3318ba09f1ae33d2 - received md5 MD5 check success File 'netup.tgz.9240' checked. Success.
Come illustrato dall'esempio, il file netup.tgz viene ricevuto dal gruppo multicast 224.5.6.7:1111. La versione corrente del file è la 1100, ma la versione fornita dal server è la 1104.
Contenuto della directory degli script:
multifiles # ls -al scripts/ total 16 drwxr-xr-x 4 root root 84 Oct 27 13:51 . drwxr-xr-x 5 root root 4096 Oct 27 15:36 .. -rwxr-xr-x 1 root root 115 Oct 27 13:51 createfw.sh -rwxr-xr-x 1 root root 187 Oct 27 13:42 customup.sh drwxr-xr-x 3 root root 35 Oct 27 13:51 firmware -rwxr-xr-x 1 root root 889 Oct 27 13:39 update.sh
Lo script createfw.sh viene utilizzato per la creazione del firmware. Ad esempio, lo script è:
multifiles # cat scripts/createfw.sh FWPATH="firmware" FWNAME="mf_fw.tgz" (cd $FWPATH; tar cvfz ../$FWNAME ./*) echo "Firmware created. File: $FWNAME"
Come illustrato, lo script archivia il contenuto della cartella del firmware all'interno di un file mf_fw.tgz. Come descritto precedentemente, questo file viene fornito al multicast.
Nella directory scripts/firmware/ sono contenuti i file necessari per l'aggiornamento insieme allo script customup.sh che, una volta eseguito il download, elabora le azioni necessarie al dispositivo client. Di seguito, viene illustrato un esempio semplice dello script appena descritto:
multifiles # cat scripts/firmware/customup.sh echo "Running custom upgrade shell script ... Please, wait" echo "Copying new files ... " cp stb_client/bin/stb_client /netup/stb_client/bin/stb_client echo "Updating config files ... "
Come viene illustrato, lo script esegue la copia dei nuovi file e, dove richiesto, aggiorna i file di configurazione.
A seguire, viene illustrato un esempio dello script che organizza la ricezione e l'elaborazione nel dispositivo client (l'esempio viene fornito da un decodificatore IP):
multifiles # cat scripts/update.sh
MFPATH="/mfupdater"
NEPATH="/netup"
DSTPATH=$MFPATH/dst
STATFILE="/tmp/mfstat.log"
# Show update splash screen
cat $MFPATH/updatesp.bmp > /dev/fb0 2>/dev/null
# get current ver
if [ -f $NEPATH/version ]; then
export CURVER=`cat $NEPATH/version`
else
export CURVER=0
fi
$MFPATH/mfcln -s $STATFILE -t 3 -i 224.5.6.7 -p 1111 -f $MFPATH/download.bin -a $CURVER
if [ $? -eq 0 ]; then
echo "Updating software ... "
# Create dst path
mkdir $DSTPATH 2>/dev/null
# unbzip received file into /netup
cd $DSTPATH
cat $MFPATH/download.bin | tar -xz
# run custom script in received file
cd $DSTPATH
sh customup.sh
# save new version
if [ -f $STATFILE ]; then
cat $STATFILE > $NEPATH/version
fi
# cleanup dst dir if required. You can do this in customup.sh
echo "Update done. New fw version:"
cat $NEPATH/version
fi
Come illustrato dal codice precedente, lo script elabora le seguenti fasi:
Nell'archivio sono incluse le creazioni binarie pronte per le seguenti piattaforme:
Nelle forniture di decodificatori IP di base, è consigliato includere l'applicazione client (mfcln). Al momento dell'avvio di ciascun decodificatore IP è necessario eseguire l'applicazione allo scopo di verificare la presenza del flusso multicast con il firmware. L'esecuzione della verifica non impiega più di due secondi e nell'eventualità che non venga trovato alcun flusso multicast firmware o sia stato fornito un firmware anteriore, verrà eseguito un avvio ordinario privo di modifiche. Se è stata ottenuta una nuova versione del firmware, questa viene installata e durante gli avvii successivi può seguire uno schema diverso fornito dal firmware installato. Ciò consente ai decodificatori IP appena installati di essere automaticamente messi in funzione grazie all'ottenimento del firmware specifico della rete corrente.