真面目に環境作ろうとすると、ちょっとつまずいたので。
どうせなら、OpenSSLも最新にしてやろうという考えだったんですが。
sunfreeware.comからダウンロードしたgcc3.4.6はどうも32ビット版のようで、OpenSSLのインストールが失敗する。
OpenSSL0.9.8k
$ ./configこれは標準でインストールされているgcc(3.4.3)では、32ビット版と64ビット版のバイナリがどちらも生成できるようになっているので、不要なgccをアンインストールして対処。
$ gmake
gcc -I. -I.. -I../include -DOPENSSL_THREADS ¥
-D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H ¥
-m64 -O3 -Wall -DL_ENDIAN ¥
-DMD32_REG_T=int -DOPENSSL_BN_ASM_MONT ¥
-DSHA1_ASM -DSHA256_ASM ¥
-DSHA512_ASM -DMD5_ASM -DAES_ASM ¥
-c -o cryptlib.o cryptlib.c
cryptlib.c:1: sorry, unimplemented: 64-bit mode not compiled in
gmake[1]: *** [cryptlib.o] Error 1
gmake[1]: Leaving directory `/usr/local/src/openssl-0.9.8k/crypto'
gmake: *** [build_crypto] Error 1
$ sudo pkgrm SMCgccOpenSSL0.9.8k
$ ./configで、OpenSSLのインストール完了。
$ gmake
$ sudo gmake install
この64ビット版と32ビット版の違いというヤツがbindでハマルもとになるのですが。
BIND 9.6.0-P1
$ ./configure --prefix=/usr/local/bindでOpenSSLのライブラリが見つからないと言っているので、
checking for OpenSSL library... using OpenSSL from
/usr/local/ssl/lib and /usr/local/ssl/include
checking whether linking with OpenSSL works... no
configure: error: Could not run test program using OpenSSL from
/usr/local/ssl/lib and /usr/local/ssl/include.
Please check the argument to --with-openssl and your
shared library configuration (e.g., LD_LIBRARY_PATH).
crle(Linuxで言うldconfigのようなコマンド)でOpenSSLのライブラリを追加した。(まずここが間違っている・・・crleで設定するのはデフォルトでは32ビットのライブラリ検索パス)
$ crleそして再び実行。
構成ファイル [バージョン 4]: /var/ld/ld.config
デフォルトライブラリパス (ELF): /lib:/usr/lib:/usr/local/ssl/lib
トラステッドディレクトリ (ELF): /lib/secure:/usr/lib/secure (システムデフォルト)
コマンド行:
crle -c /var/ld/ld.config -l /lib:/usr/lib:/usr/local/ssl/lib
BIND 9.6.0-P1
$ ./configure --prefix=/usr/local/bind当たり前ですが、結果同じ。
checking for OpenSSL library... using OpenSSL from /usr/local/ssl/lib and /usr/local/ssl/include
checking whether linking with OpenSSL works... no
configure: error: Could not run test program using OpenSSL from
/usr/local/ssl/lib and /usr/local/ssl/include.
Please check the argument to --with-openssl and your
shared library configuration (e.g., LD_LIBRARY_PATH).
crleじゃなくて、エラーメッセージ通りにLD_LIBRARY_PATHを設定しても
BIND 9.6.0-P1
$ export LD_LIBRARY_PATH=/usr/local/ssl/lib:/usr/local/lib:/usr/lib:/lib:やっぱり結果同じ。
$ ./configure --prefix=/usr/local/bind
checking for OpenSSL library... using OpenSSL from /usr/local/ssl/lib and /usr/local/ssl/include
checking whether linking with OpenSSL works... no
configure: error: Could not run test program using OpenSSL from
/usr/local/ssl/lib and /usr/local/ssl/include.
Please check the argument to --with-openssl and your
shared library configuration (e.g., LD_LIBRARY_PATH).
このままだらだら調べても時間の無駄なので、config.logを眺めてみる事に。めんどくさいですが。
| #include <openssl/err.h>やはりsslのライブラリが無いと言っている・・・。(当然 /usr/local/ssl/libを見るとライブラリはある)
| int main() {
| ERR_clear_error();
| return (0);
| }
|
configure:6152: result: no
configure:6157: error: Could not run test program using OpenSSL from
/usr/local/ssl/lib and /usr/local/ssl/include.
Please check the argument to --with-openssl and your
shared library configuration (e.g., LD_LIBRARY_PATH).
ここまで来て、やっとBINDが32ビットでコンパイルされている事に気がついたのですが。
ライブラリの検索パスから、全部設定するのかぁ。。。
crleも-64を指定することで64ビットライブラリの検索パスが指定できるので。
$ crle -64当然未設定なので、設定して。
デフォルト構成ファイル(/var/ld/64/ld.config) が見つかりません
デフォルトライブラリパス (ELF): /lib/64:/usr/lib/64 (システムデフォルト)
トラステッドディレクトリ (ELF): /lib/secure/64:/usr/lib/secure/64 (システムデフォルト)
$ sudo crle -64 -c /var/ld/64/ld.config -l /lib/64:/usr/lib/64:/usr/local/ssl/libgccに64ビットのオプション(-m64)を追加してコンパイル。
BIND 9.6.0-P1
$ CFLAGS="-m64" ./configure --prefix=/usr/local/bind --enable-ipv6=no結局、環境構築の問題だった訳ですが。
$ gmake
$ sudo gmake install
OpenSSLが64ビットでコンパイルされたって事は、他も全部そうしなきゃいけないって事で。実は大問題だったり・・・。
ちなみにSPARC機の場合はOpenSSLはデフォルトでは32ビットでコンパイルされるので、気を遣わなくて良いです。
64ビットでコンパイルする場合は逆に
$ ./Configure solaris64-sparcv9-gccと明示指定する必要があります。
コメント