Télécharger multifiles v0.5
Licence: GPLv2, GPLv3.
Le fichier à distribuer est envoyé de manière cyclique vers le réseau dans un flux UDP multicast vers une adresse multicast spécifiée (par défaut 224.2.2.4 port 2222). Pour recevoir le firmware Le client a besoin de joindre le groupe multicast en envoyant une requête IGMP et pour commencer à télécharger le fichier. Dès que le téléchargement est terminé, le client se déconnecte du groupe et vérifie l’intégrité du fichier. Si la vérification est réussie, le fichier est décompressé (le format est .tar.gz) et le script customup.sh est démarré qui est contenu dans l’archive qui vient d’être téléchargée. Le script met à jour les fichiers nécessaires et réalise d’autres actions nécessaires pour la mise à jour.
En utilisant le multicast cela permet de mettre à jour n’importe quel nombre de décodeur IP à la volée en utilisant un seul flux.
Le client ne fait pas de mise à jour si la version actuelle du firmaware est identique ou plus récente que celle distribuée dans le flux. Cependant, si l’option "forcer la mise à jour" est spécifiée sur le serveur, la mise à jour est toujours faite peu importe la version du logiciel.
Fig. 1. Un schéma du réseau avec multifiles
Le flux est constitué de paquets UDP avec l’entête au format suivant:
struct mulfiles_header{
uint32_t message_type;
uint32_t flags;
uint32_t data_size;
uint32_t sequence_no;
uint32_t file_offset;
};
message_type peut avoir une ou deux valeurs:
#define MF_MTYPE_INFO 0x04030201 #define MF_MTYPE_DATA 0x04030202
Les paquets dans le type MF_MTYPE_INFO sont des paquets informationnels et contiennent des informations sur le fichier distribué, incluant les données suivantes:
struct mulfiles_message_info{
uint32_t file_size;
uint32_t fw_version;
unsigned char md5sum[16];
char filename[1024];
};
la taille du fichier, la version du firmware, le nom du fichier et la somme MD5 pour la vérification d’intégrité. Les paquets sont envoyés toutes les 2 secondes par défaut.
Les paquets du type MF_MTYPE_DATA contiennent le contenu du fichier distribué. L’entête inclut les informations d’offset des données contenues dans le paquet en respectant le début du fichier. Le client peut commencer le téléchargement du fichier à tout moment sans attendre le prochain cycle de démarrage. Cette logique permet le téléchargement de fichiers sans délais supplémentaires pour le début ou la fin du fichier.
La vitesse de transmission de données sur le réseau peut être réglée par les options de la ligne de commande de l’application serveur. Par défaut la vitesse est de 100 KOctets par seconde.
Options de ligne de commande du serveur:
multifiles # ./mfsrv -h Utilitaire de téléchargement du fichier multicast de NetUP (serveur). Copyright (c) 2001-2008 NetUP Inc. www.netup.tv. Date de compilation: 3 Nov 2008 13:22:49 Utilisez cet utilitaire à vos propres risques. 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
Un exemple de demarrage du serveur:
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
Comme on peut le voir dans l’exemple, le fichier netup.tgz est envoyé vers multicast group 224.5.6.7:1111 à une vitesse de 100 Koctets/s. La version du firmware est 1104.
Options de ligne de commande du client:
multifiles # ./mfcln -h
Utilitaire de téléchargement du fichier multicast de NetUP (client). Copyright (c) 2001-2008 NetUP Inc.
www.netup.tv. Date de compilation: 3 Nov 2008 13:22:48
Utilisez cet utilitaire à vos propres risques.
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
Un exemple du demarrage du 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.
Comme on peut le voir dans l’exemple, le fichier netup.tgz est reçu à partir de multicast group 224.5.6.7:1111. La version actuelle du fichier est 1100, mais la version fournie par le serveur est 1104.
Contenu du répertoire de scripts:
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
Le script createfw.sh est utilisé pour la création du firmware. Par exemple, le script est:
multifiles # cat scripts/createfw.sh FWPATH="firmware" FWNAME="mf_fw.tgz" (cd $FWPATH; tar cvfz ../$FWNAME ./*) echo "Firmware created. File: $FWNAME"
Comme on peut le voir, le script archive le contenu du dossier du firmware dans le fichier mf_fw.tgz. Ce fichier sera fourni via multicast comme décrit ci-dessus.
Directory scripts/firmware/ contient les fichiers necessaries pour la mise à jour et le script customup.sh qui realise les actions necessaries sur l’appareil client après téléchargement. Un simple exemple de tel script est donné ci-dessous:
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 ... "
Comme on peut le voir, le script copie les nouveaux fichiers et, si nécessaire, met à jour les fichiers de configuration.
Exemple du script qui organise la réception et le traitement du firmaware sur l’appareil client (l’exemple est fourni pour un STB 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
Comme on peut le voir à partir du code ci-dessus, le script réalise les étapes suivantes:
L’archive inclut des exécutables prêts pour les plateformes suivantes:
Il est suggéré d'inclure l'application client (mfcln) dans le STB IP. À chaque démarrage de STB IP il est nécessaire de lancer l’application dans le but de vérifier la présence de flux multicast avec le firmware. La vérification ne prendra pas plus de 2 secondes, et si aucun flux multicast de firmware n’est trouvé ou si un firmware plus ancien est fourni, un démarrage ordinaire sans aucun changement se lance. Si une version nouvelle de firmware est obtenue, elle est installée et les prochains démarrages peuvent suivre un schéma différent fourni par le firmware installé. Cela permet que les STB IP juste installés soient automatiquement mis en fonctionnement en obtenant le firmware spécifique pour le réseau actuel.