- PR -

opensshのconfigureでのエラーについて。

投稿者投稿内容
noelsnow
会議室デビュー日: 2005/09/09
投稿数: 7
投稿日時: 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の指定も変えてみましたが同じ結果でした。

もしこの様な経験をされ解決された方がおられましたらご教授の程宜しくお願い
します。
try
常連さん
会議室デビュー日: 2004/10/22
投稿数: 38
お住まい・勤務地: 神奈川/東京
投稿日時: 2005-10-18 12:48
表示的には、OpenSSLのライブラリ(正確にはヘッダファイル)が見つからないといった感じですかね。
「--with-ssl-dir=」で指定してあるパスが違うようです。
opensslは何処にインストールしてあるのでしょうか?

あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2005-10-18 13:00
configure スクリプトを実行したときに生成する config.log は確認されましたか?
config.log ファイルにはバージョンチェックに利用したプログラムとその実行結果が表示されていると思いますが。
NeXT
大ベテラン
会議室デビュー日: 2004/04/06
投稿数: 215
お住まい・勤務地: 江戸
投稿日時: 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 が出ているようです。
noelsnow
会議室デビュー日: 2005/09/09
投稿数: 7
投稿日時: 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.

です。
皆様宜しくお願いいたします。

あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2005-10-18 16:40
引用:

configure:8874: ./conftest
ld.so.1: ./conftest: fatal: libgcc_s.so.1: open failed: No such file or directory



これがエラーの原因ですね。

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 ファイルの役割を分かっていないようであればあまりお勧めできません。

引用:

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



ただ、-R/usr/local/lib があるので、gcc が /usr/local にインストールされていればこのようなエラーは発生しないように思うのですが・・・。

gcc のバージョンやイントール先はどのようになっていますか?


[ メッセージ編集済み 編集者: あんとれ 編集日時 2005-10-18 16:49 ]
noelsnow
会議室デビュー日: 2005/09/09
投稿数: 7
投稿日時: 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
となっています。

これが元々悪いのでしょうか?
NeXT
大ベテラン
会議室デビュー日: 2004/04/06
投稿数: 215
お住まい・勤務地: 江戸
投稿日時: 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 を指定する必要があるかもしれません。
上記以外のパラメタはそちらの環境に合わせてください。

スキルアップ/キャリアアップ(JOB@IT)