たぶん、このエラーメッセージを見る人はあまりいないんじゃないかと思うのですが、libtoolを実行したときに
/usr/local/bin/libtool: /usr/local/bin/sed: not found
というエラーが、状況によっては、確実に出ます。
not foundというように、/usr/local/bin/sedは存在しないのですが、なぜかlibtoolは、/usr/local/bin/sedを実行しようとします。
この現象は、以下のような状況が成立したときに、発生しています。
- あるホストAで、ports/devel/libtool15 にて、make packageして、バイナリパッケージを作成する。
- ホストAには、たまたま/usr/local/bin/sedが存在する。このsedは、ports/japanese/sedからインストールされたもの。
- すると、バイナリパッケージに入ってるlibtool(シェルスクリプトです)は、/usr/local/bin/sedを実行するようになっている。
- 別のホストBにて、バイナリパッケージでlibtoolをインストールする。
- ホストBでは、japanese/sedがたまたまインストールされていないとすると、/usr/local/bin/sedは存在しない。
- その結果、ホストBでlibtoolを実行すると、/usr/local/bin/libtool: /usr/local/bin/sed: not found となる。
libtoolのパッケージには、依存するパッケージとして、ja-sedが含まれていないんですよね。
# pkg_info -r /usr/ports/packages/All/libtool-1.5.24.tbz
Information for /usr/ports/packages/All/libtool-1.5.24.tbz:Depends on:
もしもlibtoolが/usr/local/bin/sedを使うようにビルドされたのなら、依存するパッケージとして、ja-sedも入れば問題は起きないのですが、ちょっとportsの作り方がめんどくさくなっちゃいますね。
ホストBでも、ja-sedをインストールしてしまえば、とりあえずOKですかと。
ちなみに、なぜこんな状況がおきるかというと、
- 複数のFreeBSDマシンがある環境にて、1台でのみportsからバイナリパッケージをビルドして、
- そのほかのFreeBSDマシンでは、バイナリパッケージを使っている
からです。あまり知られていないかもれしないですけど、portupgrade -Pで、バイナリパッケージを利用してバージョンアップができるんです。でも・・・しばしばトラブルがおきるんですけど(笑)・・・
まれに、依存関係がうまく管理できていないらしくて、足りないものが出たりするんです。まさに、今回のlibtoolがその実例か?!
☆
ふと手元にあるFreeBSDマシンで、libtoolを調べてみたら
# grep sed /usr/local/bin/libtool | head -3
# A sed program that does not truncate output.
SED="/usr/local/bin/gsed"
Xsed="/usr/local/bin/gsed -e 1s/^X//"
/usr/local/bin/sedではなくて、/usr/local/bin/gsedを呼んでました。
なんだこれ?と思ったら、
# pkg_which /usr/local/bin/gsed
gsed-4.1.5_1
という、ports/textproc/gsed/にあるもので、依存関係により自動的にインストールされてたみたいです。
たとえば、rpm4とかでインストールされてしまうみたいです。
# grep gsed archivers/rpm4/Makefile
BUILD_DEPENDS= ${LOCALBASE}/bin/gsed:${PORTSDIR}/textproc/gsed
0 件のコメント:
コメントを投稿