MultiFiles

Ein System zur Datei (Firmware) Verteilung über UDP-Multicast

Download multifiles v0.5

Lizenz: GPLv2, GPLv3.

MultiFiles-Funktionsprinzipien

Die zu verteilende Datei wird in einem UDP Multicast-Stream zyklisch zum Netzwerk zu einer angegebenen Multicast-Adresse (standardmäßig 224.2.2.4 Port 2222) gesendet. Um die Firmware zu erhalten, muss der Client der Multicast-Gruppe beitreten, indem er einen IGMP-Request sendet und damit beginnt, die Datei herunterzuladen. Sobald das Download abgeschlossen ist, wird der Client von der Gruppe getrennt und die Integrität der Datei verifiziert. Wenn die Verifizierung erfolgreich ist, wird die Datei entpackt (das Format ist.tar.gz) und das Skript customup.sh wird gestartet, welches in dem gerade heruntergeladenen Archiv enthalten ist. Das Skript aktualisiert die erforderlichen Dateien und führt andere für das Update erforderliche Aktionen aus.

Die Nutzung von Multicast ermöglicht es, ohne Vorbereitung eine beliebige Anzahl von IP Set-Top-Boxen zu aktualisieren, indem nur ein Stream genutzt wird.

Der Client führt das Update nicht durch, wenn die momentane Firmwareversion diejenigen gleicht, die im Stream verteilt wird oder neuer ist. Wenn jedoch auf dem Server die Option "force update" angegeben ist, wird das Update immer, ungeachtet der Version der Software, ausgeführt.

Multifiles-Schema
Abb. 1. Ein Netzwerkschema mit Multifiles

Stream-Spezifikation

Der Stream besteht aus UDP-Paketen mit einem Kennsatz in folgendem Format:

struct mulfiles_header{
    uint32_t message_type;
    uint32_t flags;
    uint32_t data_size;
    uint32_t sequence_no;
    uint32_t file_offset;
};

message_type kann einen dieser beiden Werte haben:

#define MF_MTYPE_INFO 0x04030201
#define MF_MTYPE_DATA 0x04030202

Pakete vom Typ MF_MTYPE_INFO sind Informationspakete und enthalten Information über die verteilte Datei, einschließlich folgender Daten:

struct mulfiles_message_info{
    uint32_t file_size;
    uint32_t fw_version;
    unsigned char md5sum[16];
    char filename[1024];
};

Dateigröße, Firmwareversion, Dateiname und MD5-Summe für die Integritätsprüfung. Informationspakete werden standardmäßig alle 2 Sekunden gesendet.

Pakete vom Typ MF_MTYPE_DATA enthalten den Inhalt der verteilten Datei. Der Kennsatz umfasst Information über den Versatz der im Paket enthaltenen Daten in Bezug auf den Dateianfang. Der Client kann jederzeit mit dem Download der Datei beginnen, ohne mit dem Start bis zum nächsten Zyklus zu warten. Diese Logik ermöglicht es, Dateien ohne weitere Verzögerungen, die durch die Suche nach dem Dateianfang oder dem Dateiende der verursacht werden, herunterzuladen.

Die Geschwindigkeit der Datenübertragung über das Netzwerk kann durch die Kommandozeilenoptionen der Server-Anwendung reguliert werden. Standardmäßig beträgt die Geschwindigkeit 100 KB pro Sekunde.

Spezifikationen der Server-Anwendung

Kommandozeilenoptionen des Servers:

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.
Gebrauch:
Optionen
 [-i IP]    	Zu verwendende Multicast-IP-Adresse. Standardeinstellung: 224.2.2.4
 [-p port]  	Zu verwendender UDP-Bord. Standardeinstellung: 2222
 [-d]  			Debug-Meldungen aktivieren. Standardeinstellung: deaktiviert
 [-f file]  	Name der zu sendenden Datei. Standardeinstellung: testfile.bin
 [-s speed] 	Upload-Geschwindigkeit KB/s. Standardeinstellung: 100 KB/s
 [-t delay] 	Prophylaktische Verzögerung von Info-Meldungen, Sekunden. Standardeinstellung: 2 Sek
 [-u]  			"force update" Flag setzen. Standardeinstellung: "force update" Flag nicht gesetzt
 [-a version]	Firmwareversion. Standardeinstellung: 0
 [-h]       	Diese Hilfe

Ein Beispiel für den Serverstart:

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

Wie im Beispiel zu sehen, wird die Datei netup.tgz mit einer Geschwindigkeit von 100 KB/s zur Multicast-Gruppe 224.5.6.7:1111 gesendet. Firmwareversion ist 1104.

Spezifikationen der Client-Anwendung

Kommandozeilenoptionen des Clients:

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.
Gebrauch:
Optionen
[-i IP] 		Zu verwendende Multicast-IP-Adresse. Standardeinstellung: 224.2.2.4
[-p port] 		Zu verwendender UDP-Bord. Standardeinstellung: 2222
[-t socket wait timeout]       Timeout für UDP-Socket, Sek. Standardeinstellung: 10 Sek.
[-d] 			Debug-Meldungen aktivieren. Standardeinstellung: deaktiviert
[-f file]  		Name der zu speichernden Datei. Standardeinstellung: Vom Server bereitgestellter Dateiname
[-s stat_file]  Name der Datei, zur Speicherung von Statistiken. Standardeinstellung: /tmp/mfstat.log
[-a fw_version] Momentane Firmwareversion. Ein Download wird nur gestartet, wenn die zu empfangende Version neuer als die momentane Version 		ist. Standardeinstellung: 0
[-h] Diese Hilfe

Ein Beispiel für den Clientstart:

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.

Wie im Beispiel zu sehen ist, wird die Datei netup.tgz von der Multicast-Gruppe 224.5.6.7:1111 empfangen. Die momentane Dateiversion ist 1100, aber die vom Server bereitgestellte Version ist 1104.

Erstellung der Firmware

Inhalt des Skript-Verzeichnisses:

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

Das Skript createfw.sh wird zur Erstellung der Firmware verwendet. Ein Beispiel für dieses Skript ist:

multifiles # cat scripts/createfw.sh
FWPATH="firmware"
FWNAME="mf_fw.tgz"

(cd $FWPATH; tar cvfz ../$FWNAME ./*)
echo "Firmware created. File: $FWNAME"

Wie zu sehen ist, archiviert das Skript den Inhalt des Firmware-Verzeichnisses in der Datei mf_fw.tgz . Diese Datei wird, wie oben beschrieben, über Multicast zur Verfügung gestellt.

Das Verzeichnis scripts/firmware/enthält die für das Update erforderlichen Dateien und das Skript customup.sh, das nach dem Download die erforderlichen Aktionen auf dem Clientgerät ausführt. Ein einfaches Beispiel für solch ein Skript ist unten angeführt:

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 ... "

Wie zu sehen ist, kopiert das Skript die neuen Dateien und aktualisiert, falls erforderlich, die Konfigurationsdateien.

Arbeit mit der Firmware auf dem Client

Ein Beispiel eines Skripts, das den Empfang und die Verarbeitung der Firmware auf dem Clientgerät organisiert (das Beispiel bezieht sich auf eine IP STB):

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

Wie im Code oben zu sehen ist, führt das Skript folgende Schritte aus:

  • Abrufen der momentanen Firmwareversion. Die Versionsinformation ist in/netup/version gespeichert
  • Start des Herunterladens der Firmware von der Multicast-Gruppe
  • Wenn die Datei erfolgreich heruntergeladen wurde, wird sie entpackt und das im Archiv enthaltene Skript customup.sh wird ausgeführt. Das Skript führt die erforderlichen Aktionen aus (Kopieren, Update der Konfiguration usw.)
  • Die neuen Versionsdaten werden in der Datei /netup/version gespeichert. Das nächste Update wird durchgeführt, wenn eine neuere Firmwareversion vom Server kommt oder wenn die Option "force update" auf dem Server gesetzt ist.

Binary Builds

Das Archiv umfasst fertige Binary Builds für folgende Plattformen:

  • SH-4
  • Mipsel uclibc
  • ARM9
  • PPC
  • x86

Für IP STB Hersteller

Es wird empfohlen, die Client-Anwendung (mfcln) in die IP STB Grundausstattung einzubeziehen. Es ist bei jedem Start der IP STB erforderlich diese Anwendung auszuführen, um mit der Firmware das Vorhandensein des Multicast-Streams zu überprüfen. Die Überprüfung dauert nicht länger als 2 Sekunden und wenn kein Firmware-Multicast-Stream oder eine ältere Firmware gefunden werden, wird ein gewöhnlicher Start ausgeführt, ohne irgendwelche Veränderungen vorzunehmen. Wenn eine neue Firmwareversion bezogen wurde, wird diese installiert und die folgenden Starts können nach einem veränderten, durch die installierte Firmware bereitgestelltem Schema erfolgen. Dies ermöglicht die automatische Inbetriebnahme gerade installierter IP STBs, da die Firmware speziell für das momentane Netzwerk erhalten wird.


Get Adobe Flash player