ttt

getttyent

(FreeBSD) portsでwireshark-0.99.6がmakeできない ~ `libwi

2007-07-27 23:38:46 | デジタル・インターネット

しばらく前から、portupgradeでwiresharkをアップデートしようとしても、途中でエラーが出てアップデートできてなかったんですが、いづれportsが直るだろうと放置してました。だけど、wiresharkの0.99.5にはセキュリティアドバイザリが出てるぞと、portauditが毎日報告してくるので、やっぱりアップデートしなくちゃいけないかな、っと。

で、ふと気がつけば、いくつかあるFreeBSDマシンの中で、portupgradeで、0.99.6へアップデートできたマシンと、できなかったマシンがある。

・・・どうも、FreeBSD 5-STABLEのマシンだけ、makeの途中でエラーになっているっぽい感じがします。こんなエラーがでてます。

    then mv -f ".deps/libwireshark_la-xmlstub.Tpo" ".deps/libwireshark_la-xmlstub.Plo"; else rm -f ".deps/libwireshark_la-xmlstub.Tpo"; exit 1; fi
cc -DHAVE_CONFIG_H -I. -I. -I.. -I./.. -I./../tools/lemon -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/lib/include -DINET6 -O -pipe -Dfreebsd5 -DAPPLLIB_EXP=/usr/local/lib/perl5/5.8.8/BSDPAN -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -I/usr/local/lib/perl5/5.8.8/mach/CORE -I. -I/usr/local/include -I/usr/include -DINET6 "-D_U_=__attribute__((unused))" -O -pipe -funit-at-a-time -Wall -W -Wdeclaration-after-statement -Wendif-labels -Wpointer-arith -I/usr/local/include -D_THREAD_SAFE -D_REENTRANT -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/local/include/atk-1.0 -I/usr/local/include/cairo -I/usr/local/include/pango-1.0 -I/usr/local/include -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include/freetype2 -I/usr/local/lib/include -DINET6 -O -pipe -Dfreebsd5 -DAPPLLIB_EXP=/usr/local/lib/perl5/5.8.8/BSDPAN -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -I/usr/local/lib/perl5/5.8.8/mach/CORE -I. -I/usr/local/include -I/usr/include -MT libwireshark_la-xmlstub.lo -MD -MP -MF .deps/libwireshark_la-xmlstub.Tpo -c xmlstub.c  -fPIC -DPIC -o .libs/libwireshark_la-xmlstub.o
gmake[3]: *** `libwireshark.la' に必要なターゲット `inet_pton.lo' を make するルールがありません.  中止.


portupgrade wiresharkが始まった最初のころ、configure実行時のメッセージにヒントが?!

--->  Upgrading 'wireshark-0.99.5_3' to 'wireshark-0.99.6' (net/wireshark)
--->  Building '/usr/ports/net/wireshark'
===>  Cleaning for wireshark-0.99.6
===>  Found saved configuration for wireshark-0.99.4
===>  Extracting for wireshark-0.99.6
=> MD5 Checksum OK for wireshark-0.99.6.tar.bz2.
=> SHA256 Checksum OK for wireshark-0.99.6.tar.bz2.

  途中省略

checking for inet_aton... yes
checking for library containing inet_pton... none required
checking for broken inet_pton... broken

  以下省略


inet_ptonがbrokenだそうです。configureでやってるテスト内容をのぞいてみると、IPv6関係かな?と思ったのですが、よくわかんないから、まあいいことにします。
brokenなら、wiresharkが自前で用意しているinet_ptonがコンパイル、リンクされるっぽいです。

なお、FreeBSD 6-STABLEや、7-CURRENTの場合は、

checking for broken inet_pton... ok

となるみたいで、そのせいかビルドも成功しているみたい。

というわけで、OSが用意してくれているinet_ptonがbrokenらしいので、自前のinet_ptonを使うみたいなんですが、

gmake[3]: *** `libwireshark.la' に必要なターゲット `inet_pton.lo' を make するルールがありません.  中止.

となるように、なんかうまくいってないみたいです。

Makefileを見ても、すぐにはよくわかんなかったのですが、なんとなく思いつきで、portsで実際にコンパイル作業を行うディレクトリへ移動し、手でgmakeコマンドをたたいてみると、うまくできちゃいました。

# cd ...SOMEWHERE.../ports/net/wireshark/work/wireshark-0.99.6/
# gmake inet_pton.o
# gmake inet_pton.lo

これでうまくいくかと思えば、やっぱりだめ。
よーくログメッセージを見てみると

gmake[3]: *** `libwireshark.la' に必要なターゲット `inet_pton.lo' を make するルールがありません.  中止.
gmake[3]: ディレクトリ `...SOMEWHERE.../ports/net/wireshark/work/wireshark-0.99.6/epan' から出ます

ああ、ディレクトリが違う。epanという1レベル違うところでエラーがでてました。

というわけで、こんな具合にシンボリックリンクをはってやったところ、正常にビルドできました。

# cd epan
# ln -s ../inet_pton.lo
# ln -s ../inet_pton.o
# cd .libs/
# ln -s ../../.libs/inet_pton.o .

なぜこういう状況になってしまうのか、時間がなくて調べられなかったんですが、まあ、うまくいってしまった、ってことで。