web-dev-qa-db-ja.com

Apacheの再コンパイルで新しいOpenSSLが見つかりません

ApacheとOpenSSLの両方を同時にアップグレードしようとしています。必要なすべてのモジュールを使用してApacheをコンパイルしました。ポップアップして実行されますが、古いバージョンのOpenSSLが表示されます。

これが私の設定コマンドです:

./configure --prefix=/usr/local/Apache2.2.24/ --with-ssl=/usr/local/openssl-1.0.1e/ --enable-mods-shared="all [sic] ssl rewrite"

そのディレクトリのOpenSSLは正しいです:

$ /usr/local/openssl-1.0.1e/bin/openssl version
OpenSSL 1.0.1e 11 Feb 2013

それでも、サーバーにクエリを実行すると、ヘッダーに古いバージョンのOpenSSLが表示されます。

$ curl -I http://www.mydomain.com/
HTTP/1.1 200 OK
Date: Thu, 09 May 2013 14:51:59 GMT
Server: Apache/2.2.24 (Unix) DAV/2 mod_ssl/2.2.24 OpenSSL/1.0.0g

過去数日間に数百回再コンパイルしましたが、何が欠けているのかわかりません。各ディレクトリは削除され、最初から作成されています(コンパイルしているソースディレクトリを含む)。

このシステムは古いバージョンのFreeBSDであり、portsのインストールが壊れているため、コンパイルにポートを使用できません。

1
Jack M.

まず、ポートを修正します-rm -rf /usr/portsそれが必要な場合。これは、インストールされているソフトウェアに害を及ぼすことはありません。 portsnapを使用すると、portsツリーの新しいコピーを簡単に取得できます。上級ユーザーはsvnを使用できます。

次に、ダウンロードしたソースからApacheをコンパイルしないでください。あなたはトラブルを懇願しています、そしてあなたがそれを見つけたことに驚くべきではありません。ポートツリーを使用します。 Portsツリーとは異なるバージョンのソフトウェアを使用する場合でも、必要なバージョンに合わせてローカルツリーを変更する方法を学びます。

ダウンロードしたソースをコンパイルしているため、mod_ssl.soファイルに対してlddを実行します。インストールの方向はおそらく非標準です(つまり、システムの将来の管理者はディレクトリを簡単に見つけることができなくなります)。

使用しているlibssl.soと、ロード元を確認してください。その場所に最新のOpenSSLライブラリがあることを確認してください。

ポートからApacheをビルドする場合は、常にポートがインストールされているバージョンのOpenSSL(libssl.so in /usr/local/lib)。そうではないので、それが何をロードしているかについては誰もが推測します。

5
Chris S

回避策の1つは、Apacheを構成するときにrpathを使用することです。

$ LDFLAGS=-Wl,-rpath=/opt/openssl/lib ./configure ...

Apacheのインストール後に確認します。

$ ldd /opt/Apache-httpd/modules/mod_ssl.so
...
    libssl.so.1.0.0 => /opt/openssl/lib/libssl.so.1.0.0 (0x00007fdd56278000)
    libcrypto.so.1.0.0 => /opt/openssl/lib/libcrypto.so.1.0.0 (0x00007fdd55e9c000)
...
1
tanen01

代わりに、portsコレクションの修正を検討することをお勧めします。サポートされていないバージョンを実行している場合は、必要なポートの最新バージョンを取得できない可能性があります。それ以外の場合は、ハンドブックの指示に従って、portsnapを使用して最新のportsコレクションを入手することができます。

1
Kevin Zheng