FreeBSD Daily Topics

2012年2月16日 正規表現ライブラリPCRE(devel/pcre)アップデート注意

この記事を読むのに必要な時間:およそ 1 分

ports

How to upgrade devel/pcre regular expression library

正規表現ライブラリPCRE(deve/pcre)のportがアップデートされました。インストールされるライブラリlibpcre.soのメジャーバージョンが0から1へ変更されているため,多くのアプリケーションやライブラリが影響を受けます。PCREを採用しているライブラリやアプリケーションが多いためです。/usr/ports/UPDATINGには次のような説明が記載されています。

20120214:
  AFFECTS: users of devel/pcre
  AUTHOR: dougb@FreeBSD.org

  Until all dependent ports have been updated you should update pcre in
  a manner that will preserve its old shared library. For example:

  # portmaster -w devel/pcre
  or
  # portupgrade devel/pcre

portupgrade(8)を使っている場合,この方法でアップグレードが可能です。portupgrade(8)を使った場合には「libpcre.so.0」「/usr/local/lib/compat/pkg/」へコピーされ,すでにインストールされているアプリケーションやライブラリでlibpcre.so.0を使用しているものは「/usr/local/lib/compat/pkg/libpcre.so.0」を参照するようになります。⁠/usr/local/lib/compat/pkg/」は起動時にldconfig(8)に追加されるデフォルトのパスです。/etc/defaults/rc.confファイルの「ldconfig_paths」の項目に記載されています。

portmaster(8)を使っている場合には注意が必要です。UPDATINGに記載されている方法ではライブラリの退避が実施されません。portmaster(8)を使っている場合には次のように実行してみてください。⁠-w」は既存のライブラリで新しいバージョンで削除されるものを「/usr/local/lib/compat/pkg/」に退避させる設定ですが,環境変数LOCALBASEが設定されていないと機能しません。

env LOCALBASE=/usr/local portmaster -w -D -G --no-confirm pcre

UPDATINGの説明通りにportmaster(8)を実行した場合,libpcre.so.0が削除され,libpcre.so.1がインストールされた状態になっている可能性があります。この場合,既存のアプリケーションやツールの多くが動作しなくなります。関連するプログラムをすべて再構築しようとしても,ツールそのものがlibpcre.so.0に依存しているものがあり,アップデート作業はうまくいきません。一旦以前のバージョンのportを取得するなどして「libpcre.so.0」を入れなおし,作業をやり直す方が簡単です。

コメント

  • そうですか?

    > portmaster(8)を使っている場合には注意が必要です。UPDATINGに記載されている方法ではライブラリの退避が実施されません

    一度 UPDATING を読まずに、pcre を make deinstall reinstall してしまって、emacs も動かなくなり、少し悩みましたが古い pcre に戻して、portmaster -w pcre したのち portmaster -r pcre したら一部エラーがでたものの無事アップデート出来ました。
    エラーがでたものは該当 ports ディレクトリに移動して make deinstall reinstall しました。

    最初から portmaster -w pcre すると違う動作をすろのですかね?

    Commented : #1  ISHII (2012/02/16, 23:31)

コメントの記入