heads-up
- utmpx introduced instead of utmp
- 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」 のように実行します。 リスト1 ldck(1) - 指定したライブラリに依存しているアプリケーションやツールをリストアップするスクリプト #!/bin/
sh obsoletelibrary=${1} find -f /usr/ local/ lib/ -f /usr/ local/ bin/ | while read target do check=$(ldd ${target} 2> /dev/ null | grep ${obsoletelibrary}) if [ -n "${check}" ] then port=$(grep -E "^${target#/usr/ local/}\$" /var/ db/ pkg/*/+CONTENTS | head -1) port=${port#/var/ db/ pkg/} port=${port%%/+CONTENTS*} echo "$port" fi done | sort | uniq リスト2 libutil. so. 8に依存しているアプリの例 bug-buddy-2.
28. 0 compiz-0. 8.4 dasher-4. 10. 1_ 1,2 ekiga-2. 0.11_ 6 emacs-23. 0.95_ 1 eog-2. 28. 2 evolution-2. 28. 2 evolution-exchange-2. 28. 2 evolution-mapi-0. 28. 2 farsight2-0. 0.17 gnome-control-center-2. 28. 1_ 1 gnome-nettool-2. 28. 0,1 gnome-panel-2. 28. 0_ 1 gnome-power-manager-2. 24. 4_ 7 gnome-spell-1. 0.8_ 3 gnome-system-monitor-2. 28. 0 gnome-terminal-2. 28. 2 gnome-utils-2. 28. 1,1 gnome-vfs-2. 24. 2 gnupg-2. 0.14 grip-3. 2.0_ 22 gstreamer-plugins-gnomevfs-0. 10. 25,3 gvfs-1. 4.3 ja-ibus-anthy-1. 2.0. 20091127 ja-tomoe-0. 6.0_ 3 libbonoboui-2. 24. 2 libgail-gnome-1. 20. 1_ 1 libgnome-2. 28. 0 libgnomeui-2. 24. 2 libgtop-2. 28. 0_ 2 libpurple-2. 6.4 metacity-2. 28. 0 mousetweaks-2. 28. 2 perl-5. 8.9_ 3 pidgin-2. 6.4 py26-gnome-2. 28. 0 py26-gnome-desktop-2. 28. 0 py26-gstreamer-0. 10. 16 py26-libxml2-2. 7.6 python26-2. 6.4 ruby-1. 8.7. 248,1 samba4-devel-4. 0.0. a8_ 2 seahorse-plugins-2. 28. 1 sudo-1. 7.2. 2 tdb-1. 1.5 telepathy-farsight-0. 0.13 totem-2. 28. 5 virtualbox-ose-3. 1.2 vlc-1. 0.4_ 1,3 xscreensaver-gnome-hacks-5. 10 xterm-253 依存しているアプリケーションやツールをportupgrade(8)を使ってリビルドします。しかしリスト2を見るとわかるように、
ruby自身が 「libutil. so. 8」 に依存しているため、 このままではportupgrade(8)が使えません。まず次のようにしてrubyをリビルドします。rubyのリビルドにperlが必要になりますが、 perlも 「libutil. so. 8」 に依存しているため、 順番としてはperl→rubyの順になります。 プロンプト1 まず最初にRubyを再構築 # setenv BATCH YES # setenv FORCE_
PKG_ REGISTER YES # cd /usr/ ports/ lang/ perl5. 8/ # make install clean # cd /usr/ ports/ lang/ ruby18/ # make install clean 次に
「portupgrade -f ここにアップグレードするアプリケーションのリスト」 のようにして順次アップグレードを実施します。 「portupgrade -f `ldck libutil. so. 8`」 のように依存しているものを自動的にリビルドしてもいいでしょう。 ただし、
いくつかのアプリケーションはリビルドに失敗します。これはutmpとutmpxに互換性がないためで、 アプリケーションによっては手動で書き換えてビルドを通す必要があります。#include部分をutmp. hからutmpx. hに変更する程度でリビルドできるものもあれば、 ソースコードの方に若干の変更を加える必要があるもの (ut_ nameとut_ user程度の済むものもある) から、 いくらか書き換えが必要になるものもあります。 リスト3 リビルドに失敗するアプリケーションの例 emacs-23.
0.95_ 1 finch-2. 6.4 gnome-libs-1. 4.2_ 13 gnupg-2. 0.14 jfbterm-0. 6.0 libpurple-2. 6.4 pidgin-2. 6.4 screen-4. 0.3_ 6 このあたりの対応はアプリケーションごとに個別に実施する必要があるため、
自分で修正を加えるか、 よくわからない場合はメンテナに対応するようにメールを出して促すといいでしょう。 システムを最新版にアップグレードしたいものの、
こういった作業は避けたいという場合は、 make installworldを実施したあとの 「make delete-old」 や 「make delete-old-libs」 を実行せずに 「libutil. so. 8」 関連のファイルを残したままにしておいてください。いずれはアップグレードした方がいいのですが、 当面はそのまま使えます。