multifiles v0.5 indir
Lisans: GPLv2, GPLv3.
Dağıtılacak olan dosya belirtilen çoklu gönderi adresindeki (varsayılan: 224.2.2.4 port 2222) bir UDP çoklu gönderi akışı ağına dönerli olarak gönderilir. Bellenimi almak için istemcinin IGMP talebi göndererek çoklu gönderi grubuna katılması ve dosyayı indirmesi gereklidir. İndirme işlemi tamamlanır tamamlanmaz istemcinin grup ile olan bağlantısı kesilir ve dosya bütünlüğü doğrulanır. Eğer doğrulama başarılı olursa, dosya paketi açılır (biçimi: .tar.gz) ve yeni indirilen arşivde bulunan customup.sh komutu başlar. Komut dosyası gerekli dosyaları günceller ve güncelleme için gerekli olan diğer işlemleri yerine getirir.
Çoklu gönderiyi kullanmanız sadece tek bir akışı kullanarak herhangi bir sayıdaki IP setüstü kutusunu yayında iken günceller.
Eğer mevcut bellenim sürümü akışta yayınlanana benzer ya da daha yeni ise istemci güncellemeyi yapmaz. Ancak sunucuda "güncelleme yap" seçeneği belirtilmişse, güncelleme işlemi yazılım sürümünden bağımsız olarak gerçekleştirilir.
Şek. 1. Çoklu dosya bulunan ağ şeması
Akış aşağıdaki biçimde başlık bulunan UDP paketlerinden oluşur:
struct mulfiles_header{
uint32_t message_type;
uint32_t flags;
uint32_t data_size;
uint32_t sequence_no;
uint32_t file_offset;
};
message_type aşağıdaki iki değerden birini alabilir:
#define MF_MTYPE_INFO 0x04030201 #define MF_MTYPE_DATA 0x04030202
MF_MTYPE_INFO türündeki paketler bilgi paketleridir ve aşağıdaki veriler de dahil olmak üzere dağıtılan dosya hakkında bilgi içerir:
struct mulfiles_message_info{
uint32_t file_size;
uint32_t fw_version;
unsigned char md5sum[16];
char filename[1024];
};
dosya boyutu, bellenim sürümü, dosya adı ve bütünlük kontrolü için MD5 toplamı. Bilgi paketleri varsayılan olarak her 2 saniyede bir gönderilir.
MF_MTYPE_DATA türü paketlerde dağıtılan dosya içeriği bulunur. Başlıkta dosyanın başlangıcı ile ilgili olarak pakette bulunan verilerin ofset bilgileri bulunmaktadır. İstemci dosyayı herhangi bir anda bir sonraki döngünün başlamasını beklemeden indirmeye başlayabilir. Bu mantık, dosyanın başını veya sonunu aramanın sebep olduğu herhangi bir ekstra gecikme olmadan dosyaları indirmeye olanak sağlar.
Ağ üzerindeki veri aktarım hızı sunucu uygulamasının komut satır seçenekleri ile ayarlanabilir. Hız varsayılan olarak 100 KByte/saniye'dir.
Sunucunun komut satırı seçenekleri:
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
Sunucu örneği başlangıcı:
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
Örnekte de görüleceği üzere netup.tgz dosyası 100 Kbyte/s hızında 224.5.6.7:1111 atçoklu gönderi grubuna gönderilir. Bellenim sürümü 1104.
İstemcinin komut satırı seçenekleri:
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
İstemci örneği başlangıcı:
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.
Örnekten görüleceği üzere, netup.tgz dosyası 224.5.6.7:1111 çoğa gönderim grubundan alınmıştır. Mevcut dosya sürümü 1100'dür, fakat sunucu tarafından sağlanan sürüm 1104'dür.
Komut dizininin içeriği:
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
createfw.sh komutu bellenim oluşturmak için kullanılır. Örnek komut:
multifiles # cat scripts/createfw.sh FWPATH="firmware" FWNAME="mf_fw.tgz" (cd $FWPATH; tar cvfz ../$FWNAME ./*) echo "Firmware created. File: $FWNAME"
Görüleceği üzere komut bellenim içeriğini mf_fw.tgz dosyasına arşivler. Bu dosya yukarıda açıklandığı üzere çoğa gönderim üzerinden sağlanacaktır.
scripts/firmware/ dizininde güncellemek için gerekli olan dosyalar ile indirdikten sonra istemci cihazında gerekli işlemleri yapan customup.sh komutu bulunmaktadır. Böyle bir komutun basit bir örneği aşağıdaki gibidir:
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 ... "
Görüleceği üzere komut yeni dosyaları kopyalar ve gerekirse yapılandırma dosyalarını günceller.
Bellenimi istemci cihazında almayı ve işlemeyi düzenleyen komut örneği (örnek IP STB için sağlanmaktadır):
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
Yukarıdaki kodda da görüleceği üzere, komut aşağıdaki adımları yerine getirir:
Arşivde aşağıdaki platformlar için hazır ikili oluşumlar vardır:
Temel IP STB beslemesine istemci uygulamasının (mfcln) dahil edilmesi önerilir. Bellenim ile birlikte çoğa gönderim akışının olup olmadığını kontrol etmek için her IP STB başlangıcında uygulamanın çalıştırılması gereklidir. Kontrol 2 dakikadan uzun sürmeyecektir ve eğer bellenim çoğa gönderim akışı bulunamazsa ya da eski bir bellenim sağlanmışsa, herhangi bir değişiklik olmadan sıradan bir başlangıç yapılır. Eğer yeni bir bellenim sürümü elde edilmişse, bu kurulur ve sonraki başlangıçlar kurulan bellenim tarafından sağlanan farklı bir şemayı izleyebilir. Bu, mevcut ağa özel bellenimi alarak kurulan IP STB'nin otomatik olarak çalıştırılmasına olanak sağlar.