- 2010年1月13日(協定世界時)のEd Schouten氏のコミット(r202188)からはじまる一連の作業によって、FreeBSDの従来のアカウントデータベースインターフェースutmp(5)が廃止され、代わりにPOSIX標準のutmpxインターフェース(getutxent(3))への置き換えが実施されました。/usr/include/utmp.hは残っていますが中身は残っていません。代わりに/usr/include/utmpx.hを使う必要があります。
utmpとutmpxには基本的に互換性がないため、対応するライブラリであるlibutil.soのバージョンが「libutil.so.8」から「libutil.so.9」へアップグレードされています。システムとカーネルについてはアップデート作業でまとめてアップグレードが可能です。Ports Collectionからインストールしたアプリケーションは個別にアップグレードを実施する必要があります。
まず、Ports Collectionからインストールしたどのアプリケーションやツール、ライブラリが「libutil.so.8」に依存しているかを調べます。たとえば次のようなスクリプトldck(1)を作成し、このスクリプトを「ldck libutil.so.8」のように実行します。
依存しているアプリケーションやツールをportupgrade(8)を使ってリビルドします。しかしリスト2を見るとわかるように、ruby自身が「libutil.so.8」に依存しているため、このままではportupgrade(8)が使えません。まず次のようにしてrubyをリビルドします。rubyのリビルドにperlが必要になりますが、perlも「libutil.so.8」に依存しているため、順番としてはperl→rubyの順になります。
次に「portupgrade -f ここにアップグレードするアプリケーションのリスト」のようにして順次アップグレードを実施します。「portupgrade -f `ldck libutil.so.8`」のように依存しているものを自動的にリビルドしてもいいでしょう。
ただし、いくつかのアプリケーションはリビルドに失敗します。これはutmpとutmpxに互換性がないためで、アプリケーションによっては手動で書き換えてビルドを通す必要があります。#include部分をutmp.hからutmpx.hに変更する程度でリビルドできるものもあれば、ソースコードの方に若干の変更を加える必要があるもの(ut_nameとut_user程度の済むものもある)から、いくらか書き換えが必要になるものもあります。
このあたりの対応はアプリケーションごとに個別に実施する必要があるため、自分で修正を加えるか、よくわからない場合はメンテナに対応するようにメールを出して促すといいでしょう。
システムを最新版にアップグレードしたいものの、こういった作業は避けたいという場合は、make installworldを実施したあとの「make delete-old」や「make delete-old-libs」を実行せずに「libutil.so.8」関連のファイルを残したままにしておいてください。いずれはアップグレードした方がいいのですが、当面はそのまま使えます。