2015年9月24日木曜日

Open-WRT ipkファイルの編集方法

ここでは例として、chaos calmerのzlibパッケージを見てみる。
対象としたファイルは下記のもの。
zlib_1.2.8-1_ramips_1004kc.ipk
適当なフォルダで、wgetにてファイルを取得。
wget http://downloads.openwrt.org/chaos_calmer/15.05-rc3/ramips/mt7621/packages/base/zlib_1.2.8-1_ramips_1004kc.ipk
fileコマンドで素性を確認すると、ipkファイルはgzipファイルだと言われる。
file zlib_1.2.8-1_ramips_1004kc.ipk 
zlib_1.2.8-1_ramips_1004kc.ipk: gzip compressed data, from Unix, last modified: Fri Jul  3 14:42:35 2015
とはいうものの実はこのファイルは、tar.gzとして固められているので、テンポラリディレクトリを作ったのち、tarで解凍。
root@open-wrt-build:~/open-wrt# mkdir zlibwork
root@open-wrt-build:~/open-wrt# tar xf zlib_1.2.8-1_ramips_1004kc.ipk -C ./zlibwork/
テンポラリディレクトリに移って、解凍されたファイルを確認してみると、下記のような感じ。
root@open-wrt-build:~/open-wrt/zlibwork# ls -la
total 56
drwxr-xr-x 2 root  root  4096 Sep 23 11:24 .
drwxr-xr-x 4 root  root  4096 Sep 23 11:23 ..
-rw-r--r-- 1 rtkit ssh    472 Jul  3 14:42 control.tar.gz
-rw-r--r-- 1 rtkit ssh  39882 Jul  3 14:42 data.tar.gz
-rw-r--r-- 1 rtkit ssh      4 Jul  3 14:42 debian-binary
基本的には、opkgだったり、dpkgに倣ったファイル構成。
なので、編集をしたい場合は、コンテンツはdata.tar.gzに含まれている。
root@open-wrt-build:~/open-wrt/zlibwork# mkdir root
root@open-wrt-build:~/open-wrt/zlibwork# tar xf data.tar.gz -C ./root/
root@open-wrt-build:~/open-wrt/zlibwork# cd root/
root@open-wrt-build:~/open-wrt/zlibwork/root# ls -la
total 12
drwxr-xr-x 3 root root 4096 Jul  3 14:42 .
drwxr-xr-x 3 root root 4096 Sep 23 11:25 ..
drwxr-xr-x 3 root root 4096 Jul  3 14:42 usr
例えばここで、oeriginal_version.txtなるテキストファイルをパッケージに追加したいとするストーリーを考え、適当にファイルを作る。
root@open-wrt-build:~/open-wrt/zlibwork/root# ls -la
total 16
drwxr-xr-x 3 root root 4096 Sep 23 11:27 .
drwxr-xr-x 3 root root 4096 Sep 23 11:25 ..
-rw-r--r-- 1 root root   18 Sep 23 11:27 original_version.txt
drwxr-xr-x 3 root root 4096 Jul  3 14:42 usr
ファイルを追加後、tarで再度data.tar.gzに固めてやる。
root@open-wrt-build:~/open-wrt/zlibwork/root# tar -zcvf ../data.tar.gz ./
./
./original_version.txt
./usr/
./usr/lib/
./usr/lib/libz.so.1.2.8
./usr/lib/libz.so
./usr/lib/libz.so.1
作業用のrootフォルダは不要なので削除。
root@open-wrt-build:~/open-wrt/zlibwork/root# cd ..
root@open-wrt-build:~/open-wrt/zlibwork# rm -rf root/
次は、data.tar.gzに変更を加えたので、controlファイルを編集してやる。
root@open-wrt-build:~/open-wrt/zlibwork# mkdir control
root@open-wrt-build:~/open-wrt/zlibwork# tar -xf control.tar.gz -C ./control/
root@open-wrt-build:~/open-wrt/zlibwork# cd control/
root@open-wrt-build:~/open-wrt/zlibwork/control# ls -la
total 20
drwxr-xr-x 2 root root 4096 Jul  3 14:42 .
drwxr-xr-x 3 root root 4096 Sep 23 11:30 ..
-rw-r--r-- 1 root root  236 Jul  3 14:42 control
-rwxr-xr-x 1 root root  109 Jul  3 14:42 postinst
-rwxr-xr-x 1 root root   66 Jul  3 14:42 prerm
こちらは、originalのcontrolファイル
Package: zlib
Version: 1.2.8-1
Depends: libc
Source: package/libs/zlib
License: Zlib
LicenseFiles: README
Section: libs
Architecture: ramips_1004kc
Installed-Size: 39882
Description:  Library implementing the deflate compression method
編集後のdata.tar.gzのサイズを確認。
root@open-wrt-build:~/open-wrt/zlibwork/control# ls -la ../data.tar.gz 
-rw-r--r-- 1 rtkit ssh 39927 Sep 23 11:28 ../data.tar.gz
39927バイトとのことなので、下記のように書き換える。
Package: zlib
Version: 1.2.8-1
Depends: libc
Source: package/libs/zlib
License: Zlib
LicenseFiles: README
Section: libs
Architecture: ramips_1004kc
Installed-Size: 39927
Description:  Library implementing the deflate compression method
書き換え完了後、tarで再度固めてやる。
root@open-wrt-build:~/open-wrt/zlibwork/control# tar -zcvf ../control.tar.gz ./
./
./prerm
./postinst
./control
controlフォルダは不要となったので削除。
root@open-wrt-build:~/open-wrt/zlibwork/control# cd ..
root@open-wrt-build:~/open-wrt/zlibwork# rm -rf ./control
tarでパッケージ自体を固めて完了!
root@open-wrt-build:~/open-wrt/zlibwork# tar zcvf ../zlib_1.2.8-1_ramips_1004kc.ipk ./
./
./control.tar.gz
./debian-binary
./data.tar.gz

後はこのファイルをWSR-600DDに持っていき、下記コマンドにてインストール
root@dd-wrt-nxt:~# opkg install zlib_1.2.8-1_ramips_1004kc.ipk
Installing zlib (1.2.8-1) to root...
Configuring zlib.
root@dd-wrt-nxt:~# ls /
bin                   original_version.txt  sys
dev                   overlay               tmp
etc                   proc                  usr
init                  rom                   var
lib                   root                  www
mnt                   sbin
このように、パッケージが変更され、新しく加えたファイルが追加されていることが確認できた。

※open-wrtのリポジトリを追加後に、インストールしようとすると、リポジトリから取得したshusumとハッシュ値を比較した結果、ハッシュが合わないということでインストールができなかったので、この点注意。


Spike, To be continued.

0 件のコメント:

コメントを投稿