Çoklu Dosyalar

UDP Çoğa Gönderimi üzerinden Dosya (Bellenim) Dağıtım Sistemi

multifiles v0.5 indir

Lisans: GPLv2, GPLv3.

Çoklu Dosya Çalışma İlkeleri

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.

Çoklu dosya şeması
Şek. 1. Çoklu dosya bulunan ağ şeması

Akış Özelliği

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.

Sunucu Uygulaması Özellikleri

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.

İstemci Uygulama Özellikleri

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

Bellenim Oluşturulması

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.

İstemcide Bellenim ile çalışma

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:

  • Mevcut bellenim sürümünü alır. Sürüm bilgisi /netup/version'da saklanır
  • Bellenimi çoğa gönderim grubundan indirmeye başlar
  • Eğer dosya başarılı bir şekilde indirilirse, paketinden çıkarır ve arşivde bulunan customup.sh komutunu çalıştırır. Komut gerekli işlemleri yerine getirir (kopyalama, yapılandırma güncellemesi vb.)
  • Yeni sürüm verisi /netup/version dosyasına kaydedilir. Eğer sunucudan yeni bir bellenim sürümü gelirse ya da sunucuda "güncelleme yap" seçeneği ayarlanmışsa sonraki güncelleme yapılacaktır.

İkili Oluşumlar

Arşivde aşağıdaki platformlar için hazır ikili oluşumlar vardır:

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

IP STB Üreticileri için

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.


Get Adobe Flash player