- - PR -
opensshのconfigureでのエラーについて。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-10-18 12:31
はじめて投稿させて頂きます。
もしかすると場違いかもしれませんがご教授の程宜しくお願い致します。 Solaris9にopensshをインストールを行っております。 勿論インストール時に入ってましたパッケージはアンインストールしております。 opensslは0.9.7dをインストール完了し # openssl version OpenSSL 0.9.7d 17 Mar 2004 と表示されております。 opensshは3.7.1p2をダウンロードし解凍後configureの作業を行いました。 ./configure --with-tcp-wrappers --with-ssl-dir=/usr/local/ssl --sysconfdir=/etc --localstatedir=/var としましたが checking whether getpgrp takes no argument... yes checking OpenSSL header version... not found configure: error: OpenSSL version header not found. と表示されてしまいました。 自分なりに色々と調べconfigureの指定も変えてみましたが同じ結果でした。 もしこの様な経験をされ解決された方がおられましたらご教授の程宜しくお願い します。 | ||||||||
|
投稿日時: 2005-10-18 12:48
表示的には、OpenSSLのライブラリ(正確にはヘッダファイル)が見つからないといった感じですかね。
「--with-ssl-dir=」で指定してあるパスが違うようです。 opensslは何処にインストールしてあるのでしょうか? | ||||||||
|
投稿日時: 2005-10-18 13:00
configure スクリプトを実行したときに生成する config.log は確認されましたか?
config.log ファイルにはバージョンチェックに利用したプログラムとその実行結果が表示されていると思いますが。 | ||||||||
|
投稿日時: 2005-10-18 14:05
openssh の configure 時に CFLAGS および LDFLAGS を設定してみては如何でしょうか。
Solaris9 ということなので LDFLAGS="-L/usr/local/ssl/lib -R/usr/local/ssl/lib" ¥ ./configure --prefix=.... といった感じで LD_LIBRARY_PATH と LD_RUN_PATH を指定する必要があるかもしれません。 PATH はそちらの環境に合わせてください。 あとは make package でパッケージを作成し pkgadd でインストールできるのではないか と思います。 ちなみに openssl-0.9.7i, openssh-4.2p1 が出ているようです。 | ||||||||
|
投稿日時: 2005-10-18 15:49
皆様色々とありがとうございます。
まず、tryさんのご指摘ですが確かにパス指定が違っておりました。 それで再configureを行いましたが結果は同じでした。 opensslは # which openssl /usr/local/bin/openssl でした。 あんとれさんからご指摘頂きましたconfig.logですが見方がまだ把握出来ていないのですが、とりあえずopensslのエラーが出ている箇所を抜粋しました。 configure:8838: checking OpenSSL header version configure:8869: gcc -o conftest -g -O2 -Wall -Wpointer-arith -Wno-uninitialized -I/usr/local/bin -I /usr/local/include -L/usr/local/bin -R/usr/local/bin -L/usr/local/lib -R/usr/local/lib conftest.c - lpam -ldl -lrt -lz -lsocket -lnsl -lcrypto >&5 configure: In function `main': configure:8858: warning: implicit declaration of function `exit' configure:8860: warning: unsigned int format, long int arg (arg 3) configure:8872: $? = 0 configure:8874: ./conftest ld.so.1: ./conftest: fatal: libgcc_s.so.1: open failed: No such file or directory Killed configure:8877: $? = 137 configure: program exited with status 137 configure: failed program was: #line 8846 "configure" #include "confdefs.h" #include <stdio.h> #include <string.h> #include <openssl/opensslv.h> #define DATA "conftest.sslincver" int main(void) { FILE *fd; int rc; fd = fopen(DATA,"w"); if(fd == NULL) exit(1); if ((rc = fprintf(fd ,"%x (%s)\n", OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT)) <0) exit(1); exit(0); } configure:8889: result: not found configure:8891: error: OpenSSL version header not found. です。 皆様宜しくお願いいたします。 | ||||||||
|
投稿日時: 2005-10-18 16:40
これがエラーの原因ですね。 OpenSSL をどのようにインストールされたでしょうか? 共有ライブラリとしてインストールされていませんか? もし、OpenSSL の config 時に -shared オプションを使用されたなら共有ライブラリがインストールされています。 Solaris の場合、gcc のデフォルト設定では、共有ライブラリを作成する際に gcc に付属する libgcc_s.so.1 というライブラリとリンクされるようになっています。 もし、OpenSSL が共有ライブラリとしてインストールされているのであれば、 $ ldd /usr/local/lib/libcrypto.so とすることで分かるかと思います (libcrypto.so が /usr/local/lib にインストールされている場合)。libgcc_s.so.1 に対してシンボルの解決ができていないため、「ファイルが見つかりません」と表示されるかと思います。 これを解決するにはいろいろな方法がありますが、概ね以下の3つに分けられます。 1. 常に環境変数 LD_LIBRARY_PATH=(path to libgcc_s.so.1) を設定した状態で使用する 2. configure 前に環境変数 LDFLAGS="-R (path to libgcc_s.so.1)" とする 3. gcc の specs ファイルを改造してから OpenSSL をインストールし直す 1, 2 を選択された場合は libgcc_s.so.1 が gcc に付属するライブラリである以上、gcc を移動したり削除したりすると OpenSSL や OpenSSH は動かなくなってしまいます。 従って、3 の方法が最も優れている方法なのですが、gcc の動作部分を変更するので、間違えると gcc そのものが動かなくなってしまいますので、specs ファイルの役割を分かっていないようであればあまりお勧めできません。
ただ、-R/usr/local/lib があるので、gcc が /usr/local にインストールされていればこのようなエラーは発生しないように思うのですが・・・。 gcc のバージョンやイントール先はどのようになっていますか? [ メッセージ編集済み 編集者: あんとれ 編集日時 2005-10-18 16:49 ] | ||||||||
|
投稿日時: 2005-10-18 17:44
あんとれさん。ご詳細ご連絡頂きありがとうございます。
まずOpenSSLですが確か ./config --prefix=/usr/local --openssldir=/usr/local/openssl を指定したと思います。その後 cd /usr/local/ssl/lib/ cp libcrypto.a /usr/local/lib/ cp libcrypto.so.0.9.7 /usr/local/lib/ cp libssl.a /usr/local/lib/ cd /usr/local/lib ln -s libcrypto.so.0.9.7 libcrypto.so.0 ln -s libcrypto.so.0 libcrypto.so ln -s libssl.so.0.9.7 libssl.so.0 ln -s libssl.so.0 libssl.so cd /usr/local/ssl/lib/ cp libcrypto.a /usr/lib/ cp libcrypto.so.0.9.7 /usr/lib/ cp libssl.a /usr/lib/ cd /usr/lib ln -s libcrypto.so.0.9.7 libcrypto.so.0 ln -s libcrypto.so.0 libcrypto.so ln -s libssl.so.0.9.7 libssl.so.0 ln -s libssl.so.0 libssl.so と致しました。 お教え頂きましたコマンドの結果 # ldd /usr/local/lib/libcrypto.so libsocket.so.1 => /usr/lib/libsocket.so.1 libnsl.so.1 => /usr/lib/libnsl.so.1 libdl.so.1 => /usr/lib/libdl.so.1 libc.so.1 => /usr/lib/libc.so.1 libgcc_s.so.1 => (file not found) libmp.so.2 => /usr/lib/libmp.so.2 /usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1 でご指摘の通りlibgcc_s.so.1 に対してシンボルの解決が出来ていません。 gccはgcc-3.3.2-sol9-sparc-localをpkgaddにてインストール致しました。 # which gcc /usr/local/bin/gcc となっています。 これが元々悪いのでしょうか? | ||||||||
|
投稿日時: 2005-10-18 18:00
openssl をコンパイルする際にも,例えば
./Configure --prefix=/usr/local --openssldir=/usr/local/openssl ¥ shared solaris-sparcv9-gcc ¥ "-L/usr/local/lib -R/usr/local/lib" といった感じで LD_LIBRARY_PATH と LD_RUN_PATH を指定する必要があるかもしれません。 上記以外のパラメタはそちらの環境に合わせてください。 |