月別アーカイブ: 2014年6月

portsの共有ライブラリ

FreeBSDのportsを使用して共有ライブラリをインストールした場合、それらが更新されるときにファイル名が変わり利用している実行バイナリが軒並みリンク切れで実行できなくなることがあります。

例えば xml を扱うライブラリである libxml2 が libxml2.so.5 から libxml2.so.2.9.1 に変わった場合、libxml2.so.5が削除されると libxml2.so.5 をリンクしているバイナリが起動できなくなります。

portmaster では -w オプションをつけることで、古いライブラリを /usr/local/lib/compat/pkg に移動して保存してくれます。通常、このディレクトリにあるライブラリもダイナミックリンカの検索対象となりますので、起動できないという事態を避けることができます。

-w を毎回設定するのが面倒な場合は portmaster.rc に “SAVE_SHARED=wopt” と書いておくと良いでしょう。

このようにして古いライブラリを使用しているportsを探すにはpkg_libchkコマンドが便利です。ports/sysutils/bsdadminscripts でインストールできます。-a オプションを渡すと全てのインストールされているportsを検索し、ライブラリのリンク切れ、またはcompat/pkgを使用しているportsの一覧を表示してくれます。

後はそれらを再コンパイルすると良いでしょう。