MultiFiles

UDPマルチキャスト上ファイル(ファームウェア)配信用システム

ダウンロード multifiles v0.5

ライセンス: GPLv2, GPLv3.

MultiFiles動作原理

ファイルは定期的に指定のマルチキャストアドレス(初期設定時 224.2.2.4 port 2222)のUDPマルチキャストストリームによってネットワークに配信されます。ファームウェアを受信するにはクライアントがIGMPリクエストの送信を行ってマルチキャストグループに参加し、ファイルのダウンロードを開始する必要があります。ダウンロードが完了してすぐにクライアントはグループからの接続を解除しファイルの統合性を確認します。統合性が検証された場合、ファイルはアンパックされ(形式は.tar.gz )、ダウンロードされたアーカイブ内に含まれるcustomup.sh スクリプトが開始されます。 このスクリプトは必要なファイルの更新を行い、アップデートに必要なその他のアクションを実行します。

マルチキャストを使用すると、1つのストリームだけでIPセットトップボックスの更新を何台でも同時に行うことが可能です。

使用中のファームウェアのバージョンがストリーム上で配信されているものよりも新しいか、または同じであった場合、クライアントは更新を行いません。ただし「強制更新」オプションが指定されている場合、ソフトウェアのバージョンに関係なく常に更新が行われます。

Multifilesのしくみ
図. 1. Multifilesを使ったネットワークのしくみ

ストリームの仕様

ストリームは下記の形式のヘッダーを使用したUDPパケットで構成されています。:

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

message_typeは2つのうちどちらかを使用します。:

#define MF_MTYPE_INFO 0x04030201
#define MF_MTYPE_DATA 0x04030202

MF_MTYPE_INFOタイプのパケットは配信ファイルに関する情報を含んでいます。

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

ファイルサイズ、ファームウェアバージョン、ファイル名、統合チェック用MD5sumなどのデータが含まれます。 初期設定では情報パケットは2秒毎に送信されます。

MF_MTYPE_DATAタイプのパケットは配信ファイルのコンテンツを含みます。ヘッダーにはファイルのパケット内に含まれているデータのオフセットに関する情報やファイルの始めに関する情報が含まれているので、クライアントは次の配信周期を待たずにダウンロードを開始することができます。このロジックによってファイルの始めと終わりを探すことで遅れが生じることもなく、ファイルのダウンロードを行うことが可能です。

ネットワーク上のデータ伝送速度はサーバーアプリケーションのコマンドラインオプションによって調整可能です。初期設定では毎秒100 KBytesです。

サーバーアプリケーションの仕様

サーバーのコマンドラインオプション:

multifiles # ./mfsrv -h
NetUPのマルチキャスト・ファイルアップロード・ユーティリティ(サーバー)  Copyright (c) 2001-2008 NetUP Inc.
www.netup.tv. 編集日時: Nov  3 2008 13:22:49
このユーティリティは自己責任において使用してください。
使用法:
オプション
 [-i IP]          使用マルチキャストIPアドレス、 初期設定: 224.2.2.4
 [-p port]        仕様UDPポート、初期設定: 2222
 [-d]             デバッグメッセージの有効化、初期設定: 無効
 [-f file]        送信ファイル名、初期設定: testfile.bin
 [-s speed]       アップロード速度(Kbytes/秒)、初期設定: 100 Kbytes/秒
 [-t delay]       info メッセージの遅れの防止、 初期設定: 2秒
 [-u]             強制更新フラグの設定、初期設定: 強制更新フラグ設定なし
 [-a version]     ファームウェアバージョン、初期設定: 0
 [-h]             ヘルプ

サーバー開始の例:

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

例で分かるようにnetup.tgz fileは、マルチキャストグループ224.5.6.7:1111に100 Kbytes/秒の速度で送信されています。ファームウェアバージョンは1104です。

クライアントアプリケーションの仕様

クライアントのコマンドラインオプション:

multifiles # ./mfcln -h
NetUPのマルチキャスト・ファイルアップロード・ユーティリティ(クライアント)  Copyright (c) 2001-2008 NetUP Inc.
www.netup.tv. 編集日時: Nov  3 2008 13:22:48
このユーティリティは自己責任において使用してください。
使用法:
オプション
 [-i IP]          使用マルチキャストIPアドレス、 初期設定: 224.2.2.4
 [-p port]        仕様UDPポート、初期設定: 2222
 [-t socket wait timeout]       UDPソケットタイムアウト、 初期設定: 10 秒
 [-d]             デバッグメッセージの有効化、初期設定: 無効
 [-f file]        保存ファイル名、初期設定ではサーバーからの受信時のファイル名を使用
 [-s stat_file]   stats保存時のファイル名、 初期設定: /tmp/mfstat.log
 [-a fw_version]  現在のファームウェアバージョン。 受信したバージョンが現在使用中のバージョンよりも新しかった場合のみダウンロードを開始。初期設定: 0
 [-h]             ヘルプ

クライアント開始の例:

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.

例で分かるようにnetup.tgz fileは、224.5.6.7:1111のマルチキャストグループから受信しています。現在のファイルバージョンは1100で、サーバー上で配信されているバージョンは1104です。

ファームウェアの作成

スクリプトディレクトリのコンテンツ:

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スクリプトはファームウェアの作成に使用されます。スクリプトの例は以下の通りです :

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

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

例で分かるように、スクリプトはファームウェアフォルダーのコンテンツをmf_fw.tgz ファイルにアーカイブしています。このファイルは上述のとおりマルチキャスト上で提供されます。

scripts/firmware/ディレクトリ は更新に必要なファイルを含み、customup.shスクリプトはダウンロード後にクライアントデバイス上で必要なアクションを実行します。下記はスクリプトの簡単な例です:

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

例で分かるように、スクリプトは新しいファイルをコピーし、必要に応じて設定ファイルの更新を行います。

クライアント上ファームウェアとの動作

例のスクリプトはクライアントデバイス上でファームウェアの受信と処理を行います。(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

上のコードで分かるように、スクリプトは下記のステップを実行しています:

  • 現在のファームウェアバージョンをフェッチします。バージョン情報は/netup/version内に記録されています。
  • マルチキャストグループからファームウェアのダウンロードを開始します。
  • ファイルのダウンロードが成功した場合、アンパックしてアーカイブ内にあるcustomup.shスクリプトを実行します。(コピー、設定更新など)
  • 最新バージョンは /netup/versionファイルに保存されます。 次回の更新は新しいバージョンのファームウェアを受信した場合、またはサーバー上で「強制更新」オプションを設定した場合に実行されます。

バイナリ構築

アーカイブは次のプラットフォーム用のバイナリ構築を含んでいます:

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

IP STB製品用

IP STB製品内にクライアントアプリケーション(mfcln)を含めることを推奨します。ファームウェアの含まれるマルチキャストの有無を確認するために、各IP STB上でアプリケーションを実行する必要があります。確認には2秒もかかりません。ファームウェアを含んだマルチキャストストリームが見つからない場合や古いバージョンのファームウェアが配信されている場合は、変更は行われずに標準のスタートアップが行われます。新しいバージョンのファームウェアがあった場合はそのファームウェアをインストールして、インストール済みのファームウェアによって提供されるスキームに従って次のスタートアップが行われることもあります。これにより、現在のネットワーク特定のファームウェアを入手してインストールされたIP STBだけを自動的に稼働することが可能です。




Get Adobe Flash player