ダウンロード multifiles v0.5
ライセンス: GPLv2, GPLv3.
ファイルは定期的に指定のマルチキャストアドレス(初期設定時 224.2.2.4 port 2222)のUDPマルチキャストストリームによってネットワークに配信されます。ファームウェアを受信するにはクライアントがIGMPリクエストの送信を行ってマルチキャストグループに参加し、ファイルのダウンロードを開始する必要があります。ダウンロードが完了してすぐにクライアントはグループからの接続を解除しファイルの統合性を確認します。統合性が検証された場合、ファイルはアンパックされ(形式は.tar.gz )、ダウンロードされたアーカイブ内に含まれるcustomup.sh スクリプトが開始されます。 このスクリプトは必要なファイルの更新を行い、アップデートに必要なその他のアクションを実行します。
マルチキャストを使用すると、1つのストリームだけでIPセットトップボックスの更新を何台でも同時に行うことが可能です。
使用中のファームウェアのバージョンがストリーム上で配信されているものよりも新しいか、または同じであった場合、クライアントは更新を行いません。ただし「強制更新」オプションが指定されている場合、ソフトウェアのバージョンに関係なく常に更新が行われます。
図. 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
上のコードで分かるように、スクリプトは下記のステップを実行しています:
アーカイブは次のプラットフォーム用のバイナリ構築を含んでいます:
IP STB製品内にクライアントアプリケーション(mfcln)を含めることを推奨します。ファームウェアの含まれるマルチキャストの有無を確認するために、各IP STB上でアプリケーションを実行する必要があります。確認には2秒もかかりません。ファームウェアを含んだマルチキャストストリームが見つからない場合や古いバージョンのファームウェアが配信されている場合は、変更は行われずに標準のスタートアップが行われます。新しいバージョンのファームウェアがあった場合はそのファームウェアをインストールして、インストール済みのファームウェアによって提供されるスキームに従って次のスタートアップが行われることもあります。これにより、現在のネットワーク特定のファームウェアを入手してインストールされたIP STBだけを自動的に稼働することが可能です。