私はオンラインで検索するのに時間を費やしましたが、私が見つけたものの何も役に立たないようです。
CentOS 6 64ビットを実行していて、mod_sslを使用してApacheをコンパイルし、それを私のOpenSSLバージョン(OSが提供するものよりも新しいバージョン)に接続しようとしています。
OpenSSL 1.1.0iは次のように構成されています。
./config --prefix=/opt/openssl-1.1.0 --openssldir=/opt/openssl-1.1.0 shared
Apache 2.4は次のように構成されています。
./configure --enable-layout=mycustomlayout \
--prefix=/opt/httpd-2.4.34 \
--exec-prefix=/opt/httpd-2.4.34 \
--with-mpm=prefork \
--enable-so \
--enable-ssl \
--with-ssl=/opt/openssl-1.1.0 \
--enable-cgi \
--enable-http2 \
--enable-proxy-http2 \
--with-included-apr
うまくコンパイルされているようですが、mod_sslはOpenSSL 1.1.0がインストールされている場所を知りません。
[root@host .libs]# ldd ./mod_ssl.so | grep -iP 'ssl|crypto'
libssl.so.1.1 => not found
libcrypto.so.1.1 => not found
したがって、これはどこを見るかを明示的に知らせる場合にのみ機能します。
[root@host .libs]# export LD_LIBRARY_PATH=/opt/openssl-1.1.0/lib:$LD_LIBRARY_PATH
[root@host .libs]# ldd ./mod_ssl.so | grep -iP 'ssl|crypto'
libssl.so.1.1 => /opt/openssl-1.1.0/lib/libssl.so.1.1 (0x00007f069149a000)
libcrypto.so.1.1 => /opt/openssl-1.1.0/lib/libcrypto.so.1.1 (0x00007f069100a000)
httpdバイナリにmod_sslを静的に構築することさえ--enable-mods-static=ssl
役に立ちません。
--enable-ssl
、、、--enable-ssl --enable-ssl-staticlib-deps
試してみましたが、--enable-ssl --enable-ssl-staticlib-deps --enable-mods-static=ssl
まだ同じ結果が出ました。
libssl.so.1.1 => not found
libcrypto.so.1.1 => not found
また、運のない次の変数を設定してみました./configure
。
export PKG_CONFIG_PATH=/opt/openssl-1.1.0/lib/pkgconfig:$PKG_CONFIG_PATH \
LD_LIBRARY_PATH=/opt/openssl-1.1.0/lib:$LD_LIBRARY_PATH \
LDFLAGS="-L/opt/openssl-1.1.0/lib"
/etc/ld.so.conf.d
新しいOpenSSLライブラリを自動ロードする機能を追加したり、Apacheのinitスクリプトを調整してそれを追加できることはわかっていますが、PHPビルドのように機能し、プログラムにLD_LIBRARY_PATH
/libssl.so
を見つけることをお勧めします。libcrypto.so
[root@host php]# export PKG_CONFIG_PATH=/opt/openssl-1.1.0/lib/pkgconfig:$PKG_CONFIG_PATH \
LD_LIBRARY_PATH=/opt/openssl-1.1.0/lib:$LD_LIBRARY_PATH \
LDFLAGS="-L/opt/openssl-1.1.0/lib" \
PHP_PREFIX=/opt/php-7.2.9 \
EXTENSION_DIR=$PHP_PREFIX/usr/lib64/php/modules
[root@host php]# ./configure […] \
--with-imap=shared \
--with-imap-ssl \
--with-openssl=shared \
--with-openssl-dir=/opt/openssl-1.1.0/bin
[root@host php]# make
[root@host php]# unset PKG_CONFIG_PATH LD_LIBRARY_PATH LDFLAGS
[root@host modules]# ldd ./openssl.so | grep -iP 'ssl|crypto'
libssl.so.1.1 => /opt/openssl-1.1.0/lib/libssl.so.1.1 (0x00007fc2220a6000)
libcrypto.so.1.1 => /opt/openssl-1.1.0/lib/libcrypto.so.1.1 (0x00007fc221c17000)
私は何が間違っていましたか?これはバグでしょうか?
答え1
LDFLAGS環境変数に以下を追加してみてください。
-Bstatic -lssl -lcrypto
.so
また、openssl libdirにファイルがなく、静的.a
ファイルのみがあることを確認してください。理想的には、no-shared
openssl設定にパラメータを渡すことによって行われます。
./configure
明示的に静的バージョンを要求しても、リンカーが共有バージョンを好む理由はまだわかりません。ただし、これはhttpdのスクリプトがライブラリの依存関係を処理する方法に関連している可能性があります。
設定スクリプトのパッチはよりきれいになるかもしれません.so
が、ファイルがないだけでリンカが静的バージョンを選択するのに十分なようです。