ipk ファイルは実はただの tar & gzip で圧縮されたファイルなので、アーカイブに格納する手順さえ知っていれば、データファイル1つであっても ipk に出来る。
ここでは「X1 エミュレータを動かす」でインストールした X1 の BIOS とフォント ROM を ipk 形式のパッケージにして、以後インストールしやすくしてみる。
ちなみに恐らく SL ザウルス全てに同じ手順で大丈夫かと思いますが、ターミナル(embeddedkonsole 等)がなければ作業できませんので、ご注意。
まずはターミナルを起動する。次に ipk 内の各ファイルは所有者が root:root なので、su した状態で作業する。パスワードを聞かれたら、設定している暗証番号をパスワードとして入力する。
su
これはただのテキストファイルで、「2.0」とだけ書かれた行があれば大丈夫のようだ。debian のバージョンとか表しているのかも知れないが、よく判ってない(笑)(無くても動くっぽい。Thanks! TAKETYON)
echo 2.0>debian-binary
これでええと思う。
これもただのテキストファイル。インストール時に表示される情報などを記述する。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 に入れておくと便利な、インストール/アンインストールの時に実行されるシェルスクリプト等もあるらしい。以下、その一覧。
上記スクリプトのうち、アンインストール時に使われるものはインストール後、/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
これら準備したファイルを tar と gzip で圧縮して ipk ファイルを作成する。
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 ファイルとして名前を変える。
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 ファイルを覗いて適当に書いたものです。従って、この手順に従って何らかのトラブルが発生しても一切関知できないので、ちゃんとシャープの公式なページも見ましょう(苦笑)
いちいち、ディレクトリを作ったりせずに圧縮するやり方の例です。先ほどと同様に /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
以上、参考までに。