Under-Construction

▲Zaurus Top | ↑Up(設定・システム) | ←Prev(ntpdate で時刻合わせ) | →Next(opie-sh と qcop と簡単ツール)


ipkg の構造と無理インストール

(2003/07/03)

ipkg の構造

ipkg の情報は、 zaurus-ja.sourceforgr.jpに詳しいが、 短く言うと、次のようになる。

hogehoge_x.y-z_arm.ipk
    + debian-binary
    + control.tar.gz
      + control
     (+preinst.sh,postinst.sh,postrm.sh)
    + data.tar.gz
      + ./opt/
      + ./opt/QtPalmtop/
      + ./opt/QtPalmtop/apps/
      + ./opt/QtPalmtop/apps/Applications/
      + ./opt/QtPalmtop/apps/Applications/hogehoge.desktop {Qtopia ランチャー用の .desktop ファイル}
      + ./opt/QtPalmtop/bin/
      + ./opt/QtPalmtop/bin/hogehoge                       {通常アプリの場合、本体の実行ファイルはココにある。}
      + ./opt/QtPalmtop/help/
      + ./opt/QtPalmtop/help/ja/
      + ./opt/QtPalmtop/help/ja/html/                      {マニュアル(あれば)はここに。}
      + ./opt/QtPalmtop/i18n/
      + ./opt/QtPalmtop/i18n/ja/
      + ./opt/QtPalmtop/pics/
      + ./opt/QtPalmtop/pics/hogehoge.png                  {ランチャー用のアイコン}

インストールプロセス

GUI を使って本体メモリにインストールするときは、だいたい次のような感じらしい(推測)。

  1. ランチャの「設定」→「ソフトウエアの追加と削除」→「ソフトウエアをインストール」と進むと、ディスクに存在する ipkg の一覧が表示される。/mnt/card/Documents/ 以下と、/home/zaurus/Documents/ 以下を全て探し出してきているらしい。
  2. /usr/lib/ipkg/info/ に *.listがあればインストール済み、そうでなければ、未インストールってことになってるらしい。
  3. 本体にインストールを選ぶと、data.tar.gz の中身を / からぶちまけ、ファイルリストを /usr/lib/ipkg/info/パッケージ名.list に保存する。
  4. 必要に応じて、preinst, postinst を実行する。prerm, postrm がある場合は、案インストールの時に備えて、info/ に保存しておく。
  5. アンインストールの時は、prerm, postrm の処理をして、.list にあるファイルを削除する。

本体にしかインストールできないソフトとは?

では、SD カードにインストールしようとするときはどんな感じでしょう?

  1. ひとまず /home/tmp/ipkg/inst/ に data.tar.gz の中身をぶちまける。
  2. /mnt/card/QtPalmtop/ 以下にファイルを移動。
  3. /home/QtPalmtop/ 以下から 相似になるように symlink を張る。
  4. /usr/lib/ipkg/info/*.list には、削除にそなえて、symlink と本体の両方が記録されている。

もう一歩すすんで、本体メモリにしかインストールできないのはどういう場合でしょう。Unix 系のコマンドは、

  1. ファイルのパーミッションを設定したり、
  2. シンボリックリンクを使ったりします。
  3. それ以外に、ファイル名の大文字と小文字を区別したり、
  4. /usr/bin/ の下やなんかを使ったりします。
  5. さらに、ファイルが /usr/lib/hogehoge/ の下にあることを期待したり、、

という特徴を持っている。

こういったコマンドをインストールするとき、postinst というシェルスクリプトが、パーミッションを再設定したり、シンボリックリンクを張ったりする。SD カードが vfat でフォーマットされていると、postinst で、パーミッションやシンボリックリンクが失敗して、「このソフトは本体メモリにしか、、」とエラーが出るのです。インストール開始後、ファイルを展開して、しばらくしてからエラーが出るのはそういうわけだ。

全部大文字のファイル名、全部小文字で8.3のファイル名やなんかは、vfat ではファイル名を見失うことがあるので要注意。

通常、パスが通っているのは/home/QtPalmtop/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/binまでで、/home/QtPalmtop/usr/bin などには通っていない。

パス固定は論外。環境変数でなんとかなる場合もあるけど。

こういうコマンドが、「本体にしかインストールできません」と怒られるだ。

しかし、Unix のファイルシステムとパスを理解していれば、適切なパスに適切なファイルがあれば、SDカードであろうが、本体メモリであろうが、実行可能なはずである。

人間 ipkg と化して、手動で ipk と data.tar.gz を展開して、シンボリックリンクを張りまくり、後々のために、*.list や prerm を作成しておけば良い。そのための手順は上に述べたとおり。

余計な苦労をしたくない人は、とりあえず、SD カードを ext2 でフォーマットしておくと、ちょっとは SD に入るソフトが増えるだろう。ipk の内部には、本体メモリだとか SD だとかいうインストール先情報は含まれていない。失敗するかしないかだけだ。


▲Zaurus Top | ↑Up(設定・システム) | ←Prev(ntpdate で時刻合わせ) | →Next(opie-sh と qcop と簡単ツール)


近藤靖浩