Apache をコンパイルできません: 「エラー、SSL/TLS ライブラリが見つからないか使用できません」

Apache をコンパイルできません: 「エラー、SSL/TLS ライブラリが見つからないか使用できません」
  • Arch Linux 2011.08.19 (Linux 3.4.2 i686)
  • Apache 2.2.22 → 2.2.22 (再コンパイルと再インストール)
  • オープンSSL 1.0.1.c-1

これらの詳細はおそらく無関係ですが、アップグレードが利用可能になるたびに、yaourt と customizepkg を使用して Apache をソースからビルドしているので、PKGBUILD を手動で編集しなくても、suexec docroot を必要なものに変更できます。

これまでは問題なく動作していましたが、現在は何らかの理由で Apache がコンパイルされないようです。システム全体をアップグレードしたばかりなので、それが原因かもしれません。

変更された PKGBUILD の configure 行は次のとおりです。

../configure --enable-layout=Arch \
    --enable-modules=all \
    --enable-mods-shared=all \
    --enable-so \
    --enable-suexec \
    --with-suexec-caller=http \
    --with-suexec-docroot=/srv/www \
    --with-suexec-logfile=/var/log/httpd/suexec.log \
    --with-suexec-bin=/usr/sbin/suexec \
    --with-suexec-uidmin=99 --with-suexec-gidmin=99 \
    --enable-ldap --enable-authnz-ldap \
    --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache \
    --enable-ssl --with-ssl \
    --enable-deflate --enable-cgid \
    --enable-proxy --enable-proxy-connect \
    --enable-proxy-http --enable-proxy-ftp \
    --enable-dbd \
    --with-apr=/usr/bin/apr-1-config \
    --with-apr-util=/usr/bin/apu-1-config \
    --with-pcre=/usr \
    --with-mpm=${mpm}

ただし、ビルドしようとすると、OpenSSL に到達するまでは正常に実行されるようです。

mkdir modules/ssl
checking whether to enable mod_ssl... checking dependencies
checking for SSL/TLS toolkit base... none
checking for OpenSSL version... checking openssl/opensslv.h usability... yes
checking openssl/opensslv.h presence... yes
checking for openssl/opensslv.h... yes
checking openssl/ssl.h usability... yes
checking openssl/ssl.h presence... yes
checking for openssl/ssl.h... yes
OK
  forcing SSL_LIBS to "-lssl -lcrypto  "
  adding "-lssl" to LIBS
  adding "-lcrypto" to LIBS
checking openssl/engine.h usability... yes
checking openssl/engine.h presence... yes
checking for openssl/engine.h... yes
checking for SSLeay_version... no
checking for SSL_CTX_new... no
checking for ENGINE_init... no
checking for ENGINE_load_builtin_engines... no
checking for SSL_set_cert_store... no
configure: error: ... Error, SSL/TLS libraries were missing or unusable
==> ERROR: A failure occurred in build().
    Aborting...
==> ERROR: Makepkg was unable to build apache.
==> Restart building apache ? [y/N]
==> -------------------------------
==> 

Google で検索すると、多くの人が解決策として を報告していますexport LDFLAGS=-ldlが、ビルド スクリプトで設定しても、bash プロファイルで設定しても、私の場合は効果がありませんでした。

答え1

openssl を 0.9.8zb から 1.0.1i にアップグレードするときにも同じ問題が発生しました。

$/tmp/src/openssl-1.0.1i/ ./config --prefix=/usr/local/openssl -fPIC
$/tmp/src/openssl-1.0.1i/ make test
$/tmp/src/openssl-1.0.1i/ sudo make install

$/tmp/src/httpd-2.2.27/ ./config --enable-so --enable-ssl=shared --with-ssl=/usr/local/openssl
...
$configure: error: ... Error, SSL/TLS libraries were missing or unusable

環境設定によるどの解決策でも、表示されたエラー メッセージは修正されませんでした。

私の解決策は次のとおりです:

$/tmp/src/openssl-1.0.1i/ ./config --prefix=/usr/local/openssl-1.0.1 -shared -fPIC
$/tmp/src/openssl-1.0.1i/ make clean
$/tmp/src/openssl-1.0.1i/ make
$/tmp/src/openssl-1.0.1i/ make test
$/tmp/src/openssl-1.0.1i/ sudo make install

$sudo /sbin/ldconfig -v /usr/local/openssl-1.0.1/lib

$/tmp/src/httpd-2.2.27/ make clean && make distclean
$/tmp/src/httpd-2.2.27/ ./configure --enable-so --enable-ssl=shared --with-ssl=/usr/local/openssl-1.0.1
$/tmp/src/httpd-2.2.27/ make
$/tmp/src/httpd-2.2.27/ sudo make install

この問題は、openssl 構成の -shared 値によって解決されました。現在、sslv2 メソッドにアクセスできないという別の問題に直面しています。しかし、これはこの問題とは関係がなく、まだ答えが見つかりません。

私は引き続き sslv2 の問題に関する回答を探し、解決したら関連する StackExchange トピックに投稿します。

答え2

他の Google 検索では、次のような環境変数を設定する必要があるかもしれません。

$ env LDFLAGS=-ldl

または

$ export LIBS=-ldl

最初の方法は失敗し、同じエラーが発生しましたが、2 番目の方法は機能しました。

最初の方法がうまくいかない場合は、コマンドを 1 行で実行する必要があります。LDFLAGS 変数が実行時に取得されるため、保存されません。

例: env LDFLAGS="-ldl" \ ./configure --prefix=/some/path ...

答え3

httpd 構成に間違ったバージョンの OpenSSL が含まれているようです。

checking for openssl/engine.h... yes
checking for SSLeay_version... no
checking for SSL_CTX_new... no

これは、OpenSSL が複数インストールされている場合に発生する可能性があります。--with-ssl最新の OpenSSL インストールのプレフィックスと一致するようにオプションを設定してみてください。

--enable-ssl \
--with-ssl=/usr/local \

答え4

これは、openssl の pkg-config ファイルが libdl への依存関係を指定しなくなったために発生します。openssl.pc の新しいバージョンを見ると、-ldl が含まれていないことがわかります。

これが設定が機能する理由ですLIBS=-ldl(共有オブジェクトの使用に影響する他のアプローチも機能する可能性があります)。

CHANGES ログによると、0.9.6h から 0.9.7 への移行時に、openssl が常に動的共有オブジェクトのロードを必要としないように変更が加えられました。openssl.pc ファイルへの変更が同時に行われたとは思いません。その変更がいつ行われたかはわかりません。

したがって、これは技術的には、Apache がビルドに必要なライブラリを決定するために pkg-config を使用する際のバグであると考えられます。Apache 2.2.31 をビルドしようとしたときに同じ問題に遭遇したばかりなので、この問題はかなり前から存在していました。

関連情報