Unduh multifiles v0.5
Lisensi: GPLv2, GPLv3.
File yang akan didistribusikan, secara siklus dikirimkan ke jaringan dalam sebuah aliran multikast UDP ke alamat multikast yang ditentukan (dengan alamat default-nya 224.2.2.4 port 2222). Untuk menerima firmware (perangkat perusahaan), klien perlu bergabung dengan grup multikast dengan mengirimkan permintaan IGMP dan mulai mengunduh file. Segera setelah pengunduhan selesai, klien memutuskan koneksinya dari grup dan melakukan verifikasi integritas file. Jika verifikasi tersebut berhasil, file dibuka paketnya (formatnya .tar.gz) dan skrip customup.sh dimulai dengan terkandung dalam arsip yang baru saja diunduh. Skrip tersebut memperbarui file yang diperlukan dan melakukan hal lainnya yang dibutuhkan untuk pembaruan tersebut.
Penggunaan multikast memungkinkan pembaruan nomor kotak atas set IP mana pun yang sedang digunakan, dengan hanya menggunakan satu aliran.
Klien tidak melakukan pembaruan jika versi firmware yang ada sama dengan atau lebih baru dari yang didistribusikan dalam aliran. Namun jika pilihan "force update" (pembaruan paksa) dipilih pada server, pembaruan selalu dilakukan tanpa melihat versi dari perangkat lunak tersebut.
Gb. 1. Skema jaringan dengan multifiles
Aliran terdiri dari paket UDP dengan header dalam format berikut ini:
struct mulfiles_header{
uint32_t message_type;
uint32_t flags;
uint32_t data_size;
uint32_t sequence_no;
uint32_t file_offset;
};
message_type bisa mempunyai satu dari dua nilai:
#define MF_MTYPE_INFO 0x04030201 #define MF_MTYPE_DATA 0x04030202
Paket tipe MF_MTYPE_INFO merupakan paket yang bersifat informasi dan mengandung informasi tentang file yang didistribusi, termasuk data berikut ini:
struct mulfiles_message_info{
uint32_t file_size;
uint32_t fw_version;
unsigned char md5sum[16];
char filename[1024];
};
ukuran file, versi firmware, nama file dan jumlah MD5 untuk pengecekan intergritas. paket yang bersifat informasi dikirim setiap 2 detik pada setingan defaultnya.
Paket tipe MF_MTYPE_DATA mengandung isi dari file yang didistribusi. Header berisikan tentang informasi offset data yang terkandung dalam paket yang berkenaan dengan permulaan file: Klien dapat mulai mengunduh file kapan pun, tanpa menunggu siklus berikutnya untuk memulai. Logika ini memungkinkan untuk mengunduh file tanpa tambahan keterlambatan akibat pencarian permulaan ataupun akhir file.
Kecepatan transmisi data melalui jaringan dapat disesuaikan dengan pillihan baris perintah pada aplikasi server. Kecepatan defaultnya adalah 100 KByte per detik
Pilihan baris perintah dari 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
Contoh ketika server mulai:
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
Sebagaimana terlihat pada contoh, file netup.tgz sedang dikirimkan ke grup multikast 224.5.6.7:1111 dengan kecepatan 100 Kbyte/detik. Versi firmwarenya 1104.
Pilihan baris perintah dari klien:
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
Contoh ketika klien mulai:
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.
Sebagaimana terlihat pada contoh, file netup.tgz sedang diterima dari grup multikast 224.5.6.7:1111. Versi file saat itu adalah 1100, tetapi versi yang disediakan oleh server adalah 1104.
Isi direktori skrip:
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
Skrip createfw.sh digunakan untuk pembuatan firmware. Sebagai contoh, skripnya adalah:
multifiles # cat scripts/createfw.sh FWPATH="firmware" FWNAME="mf_fw.tgz" (cd $FWPATH; tar cvfz ../$FWNAME ./*) echo "Firmware created. File: $FWNAME"
Sebagaimana bisa dilihat, skrip mengarsipkan isi dari folder firmware ke dalam file mf_fw.tgz. File ini akan disediakan melalui multikast sebagaimana digambarkan di atas.
Directory scripts/firmware/ berisi file yang dibutuhkan untuk pembaruan dan skrip customup.sh yang melakukan hal-hal yang dibutuhkan pada klien setelah pengunduhan. Contoh sederhana dari skrip seperti itu diperlihatkan di bawah ini:
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 ... "
Sebagaimana bisa dilihat, skrip menyalin file baru dan, jika diperlukan, memperbarui file konfigurasi.
Contoh skrip yang mengatur penerimaan dan pemrosesan firmware pada perangkat klien (contoh yang diperlihatkan adalah untuk 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
Sebagaimana bisa dilihat pada kode di atas, skrip melakukan langkah-langkah berikut ini:
Arsip mengandung bentuk biner yang siap untuk platform berikut ini:
Disarankan untuk memasukkan aplikasi klien (mfcln) ke dalam suplai IP STB dasar. Setiap kali IP STB melakukan start up, perlu menjalankan aplikasi untuk memeriksa keberadaan aliran multikast dengan firmware. Pengecekan memerlukan waktu tidak lebih dari 2 detik, dan jika tidak ada aliran multikast firmware yang ditemukan atau firmware versi lama yang tersedia, akan melakukan start-up biasa tanpa terjadi perubahan apapun. Jika versi firmware baru telah didapat, kemudian dipasang dan start-up berikutnya kemungkinan mengikuti skema yang berbeda dengan yang disediakan oleh firmware terpasang. Hal ini memungkinkan untuk IPB STB yang baru saja terpasang, dibawa secara otomatis ke dalam operasi, dengan mendapatkan firmware yang khusus untuk jaringan saat ini.