ipkgを作るには

ipkgとは

ipkgは、the Familiar Project が開発したパッケージングシステムです。Debianのdpkgを参考にしていますが、 組み込み向けに仕様をシェイプアップされています。

Zaurusでも、このipkgが採用されています。

構造

ipkgの構造は割と単純です。拡張子.ipkというファイルの実態はtar + gzipされた ファイルそのものであり、その中には制御ファイルを含むcontrol.tar.gz、 実際のデータ等を含むdata.tar.gz、そして識別ファイルdebian-binaryが含まれています。

作成方法

.ipkファイルを作成する手順は以下の通りです。

  1. インストールするべきファイルを配置する
  2. 制御ファイルを用意する
  3. ipkg-buildコマンドで作成する

ファイルの配置

配置したいデータファイルを、作業ディレクトリ上に用意します。 例えば、/home/root/README.test というファイルを含むipkgを作成したい場合は、 作業ディレクトリ上に home/root/README.test というファイルを用意します。

SDカードなど本体メモリ以外にもインストール可能にするためには、 /opt/QtPalmtop/ 以下にファイルを配置する必要があります。 iPAQ Pocket PC 用の Linux ディストリビューションである Familiar には、/home/QtPalmtop が存在しませんので、 /opt/QtPalmtop/ 以下に配置することで、 Zaurus、iPAQ 両用の ipkg にできる可能性があります。

制御ファイルの用意

作業ディレクトリ上に CONTROL というディレクトリを作成し、その中に 制御ファイルを用意します。

制御ファイルには以下のものがあります。

control
パッケージの管理情報を記述したファイルです。
preinst
インストール時における前処理スクリプト(通常は Bourne Shell)です。 data.tar.gz が展開される前に実行されます。
postinst
インストール時における後処理スクリプトです。
prerm
パッケージを削除するときに、削除前に実行されるスクリプトです。
postrm
パッケージを削除するときに、削除後に実行されるスクリプトです。
conffiles
バージョンアップ時に上書きしたくない設定ファイルを指定します。

controlは必ず用意しなければなりません。それ以外は必要な場合のみ 用意します。

prerm と postrm はインストール時に /usr/lib/ipkg/info/ ディレクトリに パッケージ名と共に格納され、当該パッケージが削除される日を待ち続けます。 preinst, postinst, prerm, postrm の各スクリプトは root 権限で実行されますので十分にテストしておいてください。

conffiles には、バージョンアップ等で上書きしたくない設定ファイルがあれば、 絶対パスで 1 行に 1 つづつ記述します。 GUI 版インストーラ「ソフトウェアの追加/削除」は無条件で上書きしません。 ターミナル版インストーラ ipkg は上書きするかどうか問い合わせてきます。

controlファイルの書式

controlファイルの書式を、例を挙げて説明します。以下はimkit-anthy パッケージのcontrolファイルです。

Package: imkit-anthy
Priority: optional
Section: misc
Version: 0.3.3-1
Architecture: arm
Maintainer: Takatsugu Nokubi 
Depends: anthy
Description: Anthy inputmethod plugins
  The package is Japanese inputmethod plugins for Qtopia
  using Anthy.

各行毎に、「フィールド名:」「値」が記述されています。各フィールドの意味は 以下の通りです。

Package
パッケージの名称です。英小文字、数字、ハイフンなど一部の記号が 利用できます。英大文字やアンダーバー「_」は利用できないので 気をつけて下さい。
Priority
パッケージの優先度です。ipkgではあまり意味をもっていないようですので、 optionalで良いでしょう。
Section
そのパッケージの種類を記述します。指定できる値は admin, base, comm, editors, extras, games, graphics, kernel, libs, misc, net, text, web, x11 のいずれかです。ipkg ではあまり有効に利用されていない ようなので、これも適当に決めれば良いでしょう。
Version
ソフトウェアのバージョンを記述します。一般的に、 "[ソフトウェア自身のバージョン]-[パッケージのバージョン]"という規則で 記述します。上記の例では imkit-anthy 自身のバージョンが 0.3.3、 パッケージのバージョンが 1 となっています。
Architecture
ソフトウェアが動作するアーキテクチャを指定します。iPAQ や Zaurus では arm を指定します。
Maintainer
パッケージ作成者の名前とメールアドレスを記述します。
Depends
依存しているパッケージの名称を記述します。複数ある場合はカンマで 区切ります。
Description
パッケージの説明を記述します。 Description: の後には一行で簡潔な解説を記述し、 その次の行以降に、より詳細な解説を先頭に空白を置いて記述します。

ipkg-build

必要なファイルを一通り用意した上で、ipkg-build コマンドを使用して パッケージを作成します。

ipkg-build は ftp://lorien.handhelds.org/pub/linux/feeds/demo/ にある ipkg-tools.tgz に含まれています。

作業ディレクトリ上にファイルを配置し、"ipkg-build ディレクトリ" を実行することでパッケージが作成されます。

以下は実行例です。

$ find imkit-anthy
imkit-anthy
imkit-anthy/opt
imkit-anthy/opt/QtPalmtop
imkit-anthy/opt/QtPalmtop/plugins
imkit-anthy/opt/QtPalmtop/plugins/inputmethods
imkit-anthy/opt/QtPalmtop/plugins/inputmethods/libimkit-anthy.so.0.3.3
imkit-anthy/opt/QtPalmtop/plugins/inputmethods/libimkit-anthy.so
imkit-anthy/opt/QtPalmtop/plugins/inputmethods/libimkit-anthy.so.0
imkit-anthy/opt/QtPalmtop/plugins/inputmethods/libimkit-anthy.so.0.3
imkit-anthy/opt/QtPalmtop/i18n
imkit-anthy/opt/QtPalmtop/i18n/ja
imkit-anthy/opt/QtPalmtop/i18n/ja/libimkit-anthy.qm
imkit-anthy/CONTROL
imkit-anthy/CONTROL/control
$ fakeroot ./ipkg-build imkit-anthy
fakeroot ./ipkg-build imkit-anthy
Packaged contents of imkit-anthy into ./imkit-anthy_0.3.3-1_arm.ipk

上記のように fakeroot コマンドを用いて、 パッケージに含める各ファイルの所有者を root にしておいた方がよいでしょう。 fakeroot は Debian パッケージにあります (リンク集参照)。 fakeroot がない場合は以下のように root になって chown します。

# chown -R root:root imkit-anthy
# ipkg-build imkit-anthy
Packaged contents of imkit-anthy into ./imkit-anthy_0.3.3-1_arm.ipk

リンク集


knok at daionet.gr.jp

(kimux) kimu at st.rim.or.jp