FreeSBIE を FreeBSD 10.0 RELEASE で動かす。

以前、FreeSBIE を FreeBSD 9.0 RELEASE で動かすやり方を、こちらで紹介しました。
そのやり方で、10.0RELEASE でも動くには動いたのですが、パッケージシステムが pkg_* から pkgng に移行してしまったので、今までのままではパッケージがインストールできず、
ただのベースシステムだけが入っているという環境しか作れなくなってしまいました。それはそれで、そこからブートして、ネットワーク設定して、bsdinstall(8)をネットワーク越しに動作させて管理などすることはできたのですが、魅力半減でした。

そこで今回は、pkg-*のために書かれた pkginstall.sh と pkgselect.sh を pkgng に対応させて、パッケージもインストールできるように変更します。

FreeSBIE のスクリプトは、かなりきれいな構造で、普通に読んでいけば何をしているのかわかるように出来ていて、shスクリプトのサンプルとしてとても読みやすい形になっています。
今回は、現行のスクリプトで pkg_*でやっている部分を、すべて pkgng で同じように動作するように書き換えるにとどめました。ただし、いくつかは新しいやり方で対応しないとできない
ことがありましたので、その点だけちょこっと変えています。

scripts/pkgselect.sh に関しては、pkg_info を pkg query "%n-%v" に置き換えるだけで済みました。pkg_info が pkg info ではうまくいかないということに気が付いて、
pkg query を使うということに気が付くまでちょっと時間がかかりましたが、まあわかってしまえばとくに問題なくいけました。

scripts/pkginstall.sh に関しては、結構修正個所が多くなりました。pkg_info を pkg query で置き換えるのは同様ですが、そのほか、依存環境を考えつつ、関連するパッケージも
作成しなければいけない点と、パッケージの削除で、なにも考えずに pkg delete -a すると、pkg も削除されてしまう点が厄介でした。結局1つ1つのパッケージを pkg を除いて削除するという手法で対応したのですが、もっとなにかいい方法があるかもしれません。
また、freesbie-fs 以下の環境で、一番最初のみ、 pkg bootstrap を実行しないといけないのですが、この際にインストールするかどうか聞いてくるのを問答無用でインストールするオプションが見当たらず、最初の一回のみ、途中でスクリプトが入力待ちになってしまう点がどうにもできませんでした。二回目以降は発生しないので、最初の一回だけはがまんしてもらうしかありません。

その他、freesbie をいろいろ修正してみて気が付いたこと。

  1. conf/freesbie.conf について
    いろいろ変更するところはありますが、freesbie-fs とfreesbie-clone は別のデバイスになるようにすると速くなります。
    二回目以降は NO_BUILDWORLD=yes と  NO_BUILDKERNEL=yes を定義しておいたほうが速くなります。
  2. pkg について
    バイナリインストールしていると、依存関係でうまくインストールされないパッケージがでてきます。その際はあきらめてすべてを make すれば解決します。
  3. 設定について 
    直接 freesbie-fs をいじって修正するより、 customroot を定義して、 extra/customroot/ 以下にファイルを置いて修正するのが正当なやり方です。

ということで、今回の pkgng 対応で、今後もしばらく FreeSBIE で楽しめそうです。
おまけに付けたパッチは /usr/ports/sysutils/freesbie/files 以下の置いてから /usr/ports/sysutils/freesbie/ で make install すると、pkgng に
対応した freesbie 環境が作成されます。おためしあれ。

[追記:2014-03-16]patch はsend-prが通ったため、もう不要になりました。