pkgng の予習とバイナリインストールに関する問題点2014年07月05日 14時37分09秒

pkgng は FreeBSD で導入された新しいパッケージシステム。FreeBSD 10.0 RELEASE から組み込まれている。FreeBSD 8.4 からブートストラップが入っている。9 系は調べていない。

ports は自由に好きなものだけを更新でき、オプションも変えたり出来るのが利点。全てをコンパイルするので時間が掛かるが欠点。昔々は特定の物だけをあれこれ弄って上げていたが、手間が掛かり過ぎた。ここ数年は、リリース向けの ports に合わせて、全て更新していた。

ports でプログラムが起動しなくなる原因は、共有ライブラリの不整合に起因する。依存関係上、階層の低い位置のライブラリが入れ換えられる。この時に、メジャーバージョンが正しく上がっておらずに、既に入っているライブラリを置き換えてしまう。この時、バイナリ非互換のライブラリが入ると、それに依存する物が動かなくなってしまう。

一つや二つだったら、何とかなるのだが、X 関連だとライブラリの多重依存が多い。非互換のライブラリが一つでも入っていると、壊れてしまう。ライブラリが早いスピードで更新されていくのが原因ではあるが。

PC-BSD の PBI はその動的ライブラリを各々に取り込むことによって解決したそうだ。ある意味、静的リンクへの回帰だ。ただ、その後の更新で、重複を避けよう変更されたらしい。こちらの方が、動的ライブラリをいかす方法だが実装が難しい。

他のパッケージの実装だと、ライブラリが更新されたら依存する物を全て作りなおす方法が多い。pkgng も多分に漏れずこの形式。ライブラリを作りなおしたら、依存するものを全て作りなおしていたら、動的ライブラリの意味が半減してしまう。