ipk 形式パッケージファイルの作り方

ipk ファイルは実はただの tar & gzip で圧縮されたファイルなので、アーカイブに格納する手順さえ知っていれば、データファイル1つであっても ipk に出来る。

ここでは「X1 エミュレータを動かす」でインストールした X1 の BIOS とフォント ROM を ipk 形式のパッケージにして、以後インストールしやすくしてみる。

ちなみに恐らく SL ザウルス全てに同じ手順で大丈夫かと思いますが、ターミナル(embeddedkonsole 等)がなければ作業できませんので、ご注意。

ターミナルを起動する

まずはターミナルを起動する。次に ipk 内の各ファイルは所有者が root:root なので、su した状態で作業する。パスワードを聞かれたら、設定している暗証番号をパスワードとして入力する。

su

debian-binary ファイルを用意する

これはただのテキストファイルで、「2.0」とだけ書かれた行があれば大丈夫のようだ。debian のバージョンとか表しているのかも知れないが、よく判ってない(笑)(無くても動くっぽい。Thanks! TAKETYON)

echo 2.0>debian-binary

これでええと思う。

control ファイルを用意する

これもただのテキストファイル。インストール時に表示される情報などを記述する。vi エディタ(ZEditor 等でも可)で以下のように作成する。

vi control

今回の X1 エミュレータ用 ROM の場合として、以下のような内容で入力する。入力は i キーを押した後に行い、終わったら Cancel キーを押してから Z キーを 2 回押す。

Package: x1rom
Priority: optional
Section: extras
Maintaier: SHARP
Architecture: arm
Version: 1.0
Depends: zx1
Description: X1 ipl rom & font rom

見ての通り、行頭に何の項目で表すかを書き、コロンとスペース(または TAB(2006/04/03 追記))で区切って、その内容を書くようにする。

Qtopia 開発チュートリアルによれば、必須なのは Package、Maintaier、Architecture、Version、Description で、各項目の内容には「_」(アンダースコア)は使用できないとある。これはパッケージのファイル名が「パッケージの名前」と「バージョン」と「対象となるアーキテクチャ」を「_」で区切って記述するためだと思われる。バージョン等に「_」を含むとインストール後もパッケージ名の横がインストール完了マークに変わらない問題が発生するので注意。(2006/04/03 追記)

他にも「Installed-Size: 1844Kb」のようにインストールサイズを記述することや、「InternalOnly: yes」のように本体メモリーにしかインストールできないものであることを意図的に指定すること、「NeedRestart: linux」のようにインストール後、再起動が必要なことを明示的に指示することもできるらしい。(2005/05/12 追記)

「NeedRestart: qtopia」ってのも指定できる。これはシステム全体ではなく、Qtopia のみの再起動を行える為、待ち時間が少なくて済む。尚、再起動時は灰色の背景に大きな砂時計が表示され、1 分程度すると通常の再起動と同様のシステム時計設定画面になる。(2006/04/03 追記)

その他のファイル群

実は control ファイルと一緒に control.tar.gz に入れておくと便利な、インストール/アンインストールの時に実行されるシェルスクリプト等もあるらしい。以下、その一覧。

conffiles 以外のファイルはシェルスクリプトで、root 権限で実行される。

上記スクリプトのうち、アンインストール時に使われるものはインストール後、/usr/lib/ipkg/info ディレクトリに「パッケージ名.スクリプト名」で保存されている(例:terminal.postrm 等)。prerm、postrm などのスクリプトに問題があって、アンインストールできないパッケージはこれらのディレクトリに保存されているスクリプトを修正することでアンインストールできるようになる。(2005/08/25 追記)

パッケージにしたいファイルを用意する

インストールするファイル群を何らか作業ディレクトリ(今回は work)直下をルート(/)と見なして、ディレクトリツリーごと用意しておく。(例えば、/home/zaurus/ipl_x1.bin を圧縮する場合は work/home/zaurus/ipl_x1.bin で用意する。)

この時、/opt/QtPalmtop から始まるディレクトリツリーでなければ、SD カードや、CF カードへのインストールは出来ない。また、何もインストールせずに postinst や prerm でシェルスクリプトを実行したい場合は、/opt だけ、もしくは /opt/QtPlamtop だけの空のディレクトリを圧縮すればいい。(2006/04/03 追記)

これらのディレクトリツリーやファイルも基本的には root:root の所有者で作成し、必要なパーミッションを設定しておく。(例えばデータファイルであれば 644、実行ファイルであれば 755 など。)

X1 エミュレータ用の ROM が /home/zaurus にあるとして以下の作業でファイルを用意する。

mkdir work
mkdir work/home
mkdir work/home/zaurus
cp /home/zaurus/ipl_x1.bin work/home/zaurus
cp /home/zaurus/font8x8.bin work/home/zaurus
chmod 644 work/home/zaurus/*.bin

各ファイルを圧縮して ipk ファイルを作成する

これら準備したファイルを tar と gzip で圧縮して ipk ファイルを作成する。

control ファイルを圧縮する

control ファイルを圧縮する際は、それだけが存在するディレクトリを自ディレクトリを指定して圧縮する必要があるので、一時的に作業用ディレクトリにさらに適当なディレクトリを作成して、 control ファイルのみをコピーし、圧縮した後、そのディレクトリを削除する。

mkdir work/work
cp control work/work
cd work/work
tar cvf ../control.tar .
cd ..
gzip control.tar
rm -r work
cd ..

パッケージにするファイル群を圧縮する

こちらは自分のディレクトリ内のディレクトリ名を指定する形で圧縮する。ちなみに preinst などでスクリプトだけを実行するパッケージを作るならば、空のディレクトリだけ(/opt だけ等)でも良いようだ。(2005/05/12 追記)

cd work
tar cvf data.tar ./home
gzip data.tar
rm -r home
cd ..

ディレクトリが複数ある場合は、tar cvf data.tar ./etc ./usr などのように書く。

ipk ファイルを作成する

作業ディレクトリをまるごと圧縮し、ipk ファイルとして名前を変える。

cd work
tar cvf ../x1rom_1.0.tar ./*
cd ..
gzip x1rom_1.0.tar
mv x1rom_1.0.tar.gz x1rom_1.0.ipk

これを本体メモリー(/home/zaurus/Documents)やCF、SDカードに入れてやれば、ソフトウェアの追加/削除からパッケージの追加や削除が出来るようになります。

尚、この内容は公式な資料も見ずに、そこらへんの ipk ファイルを覗いて適当に書いたものです。従って、この手順に従って何らかのトラブルが発生しても一切関知できないので、ちゃんとシャープの公式なページも見ましょう(苦笑)

もっと安易に ipk ファイルを作成する(2006/04/03 追記)

いちいち、ディレクトリを作ったりせずに圧縮するやり方の例です。先ほどと同様に /home/zaurus 直下にある ipl_x1.bin と font8x8.bin を x1rom_1.0.0-1_arm.ipk って名前のパッケージファイルにしてみます。su してない状態を想定してますんで、su している場合は ~ の部分を ~zaurus に読み替えてください。

cd /
tar cvf ~/data.tar ./home/zaurus/font8x8.bin ./home/zaurus/ipl_x1.bin
cd ~
gzip data.tar
echo "Package: x1rom" > control
echo "Maintaier: Nyanonon <nyano@areanine.gr.jp>" >> control
echo "Architecture: arm" >> control
echo "Version: 1.0.0-1" >> control
echo "Description: X1 ipl rom & font rom" >> control
tar cvf ./control.tar ./control
gzip control.tar
echo "2.0" > debian-binary
tar cvf ipk.tar ./control.tar.gz ./data.tar.gz ./debian-binary
gzip ipk.tar
mv ipk.tar.gz ./Documents/x1rom_1.0.0-1_arm.ipk
rm control
rm data.tar.gz
rm control.tar.gz
rm debian-binary

以上、参考までに。

参考になるリンク


戻る