Linux環境でファイルのバイナリ差分を作成・適用する(bsdiff) †バイナリ差分の作成や適用できるbsdiffを紹介します。 関連記事 †バイナリ差分とは †Linuxではファイルの差分というのは、 差分ファイルのよくある利用方法としては、 テキスト以外のファイル、つまり実行プログラムファイルや画像・音声・動画ファイル、 これは元々UNIX(Linux)の世界では、ソフトウェアはソースコードを手元の環境で しかし、巨大なバイナリファイルで変更の差分が少々であることが判っているならば、 Linuxにはバイナリ差分を取るコマンドとして、bsdiffがあります。 bsdiffのインストール †以下にUbuntuとCentOSにbsdiffコマンドをインストールする手順を記します。 ubuntu †ubuntuでは以下のようにapt-getでインストールすることができます。 # apt-get install bsdiff パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下のパッケージが新たにインストールされます: bsdiff アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 5 個。 12.6 kB のアーカイブを取得する必要があります。 この操作後に追加で 86.0 kB のディスク容量が消費されます。 取得:1 http://jp.archive.ubuntu.com/ubuntu/ precise/universe bsdiff i386 4.3-10ubuntu1 [12.6 kB] 12.6 kB を 0秒 で取得しました (29.0 kB/s) 以前に未選択のパッケージ bsdiff を選択しています。 (データベースを読み込んでいます ... 現在 136445 個のファイルとディレクトリがインストールされています。) (.../bsdiff_4.3-10ubuntu1_i386.deb から) bsdiff を展開しています... man-db のトリガを処理しています ... bsdiff (4.3-10ubuntu1) を設定しています ... # CentOS †CentOS5やCentOS6では、EPELにパッケージが存在しています。 # yum install bsdiff Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * epel: buaya.klas.or.id * extras: ftp.iij.ad.jp * updates: centos.ustc.edu.cn Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package bsdiff.x86_64 0:4.3-7.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved =================================================================================================================================================== Package Arch Version Repository Size =================================================================================================================================================== Installing: bsdiff x86_64 4.3-7.el6 epel 13 k Transaction Summary =================================================================================================================================================== Install 1 Package(s) Total download size: 13 k Installed size: 21 k Is this ok [y/N]: y Downloading Packages: bsdiff-4.3-7.el6.x86_64.rpm | 13 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : bsdiff-4.3-7.el6.x86_64 1/1 Verifying : bsdiff-4.3-7.el6.x86_64 1/1 Installed: bsdiff.x86_64 0:4.3-7.el6 Complete! # bsdiffの使用方法 †以下にbsdiffの使用方法を記します。 バイナリ差分を作成する。 †バイナリ差分を作成するには、以下のようにファイルを引数として指定して、bsdiffを実行します。 % bsdiff 元のファイル 変更したファイル 差分ファイル 実行すると「元のファイル」から「変更したファイル」への差分を、 実際に実行してみます。 # ls -l total 14792 -rw-r--r-- 1 root root 6923904 May 14 11:00 wd32_10_20_2631_en.exe -rw-r--r-- 1 root root 8219728 May 14 10:58 wd32_11_00_2749_en.exe # md5sum * 8b036e95fbdaebb19c1af5683216934d wd32_10_20_2631_en.exe bbbeadaa5ed085b48e79ad83c2156255 wd32_11_00_2749_en.exe # bsdiff wd32_10_20_2631_en.exe wd32_11_00_2749_en.exe wb10-11.bsdiff # ls -l total 20404 -rw-r--r-- 1 root root 5743167 Sep 5 17:37 wb10-11.bsdiff -rw-r--r-- 1 root root 6923904 May 14 11:00 wd32_10_20_2631_en.exe -rw-r--r-- 1 root root 8219728 May 14 10:58 wd32_11_00_2749_en.exe # wb10-11.bsdiffが作成されたバイナリ差分です。 今回の差分ファイルのサイズは「元ファイル」や「変更したファイル」より、 また、差分作成はメモリを多く使用する重い処理です。 バイナリ差分を適用する †バイナリ差分を適用するには、bspatchコマンドを使用します。 bspatchの使い方は以下の通りです。 % bsdiff 元のファイル 新しいファイル 差分ファイル 実行すると「元のファイル」に「差分ファイル」を適用した内容を、 実際に実行してみます。 # bspatch wd32_10_20_2631_en.exe hoge.exe wb10-11.bsdiff # ls -l total 28432 -rw-r--r-- 1 root root 8219728 Sep 5 17:43 hoge.exe -rw-r--r-- 1 root root 5743167 Sep 5 17:37 wb10-11.bsdiff -rw-r--r-- 1 root root 6923904 May 14 11:00 wd32_10_20_2631_en.exe -rw-r--r-- 1 root root 8219728 May 14 10:58 wd32_11_00_2749_en.exe # md5sum * bbbeadaa5ed085b48e79ad83c2156255 hoge.exe c6cd07e6ca8864b8cf940bf5276c48b3 wb10-11.bsdiff 8b036e95fbdaebb19c1af5683216934d wd32_10_20_2631_en.exe bbbeadaa5ed085b48e79ad83c2156255 wd32_11_00_2749_en.exe # hoge.exeが、「元のファイル」にバイナリ差分が適用された「新しいファイル」です。 バイナリ差分は利用するシチュエーションは限られますが、 以上、Linuxでファイルのバイナリ差分を取得・適用する方法についてでした。 |