Назад | Перейти на главную страницу

Перекомпиляция 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 install, поэтому я не могу использовать порты для компиляции.

Во-первых, ИСПРАВИТЬ СВОИ ПОРТЫ - rm -rf /usr/ports если это то, что нужно. Это не повредит установленному программному обеспечению. Использовать portsnap для простого получения новой копии дерева портов. Опытные пользователи могут использовать svn.

Во-вторых, НЕ компилируйте Apache из загруженного источника. Вы просите о неприятностях, и НЕ стоит удивляться тому, что вы их нашли. Используйте дерево портов. Даже если вы хотите использовать другую версию программного обеспечения из дерева портов, узнайте, как изменить локальное дерево для нужной вам версии.

Бегать ldd против файла mod_ssl.so, поскольку вы компилируете загруженный исходный код, направление установки, вероятно, нестандартное (это означает, что будущие администраторы вашей системы не смогут легко найти каталог).

Посмотрите, какой libssl.so он использует и откуда он будет загружен. Убедитесь, что в этом месте установлены самые свежие библиотеки OpenSSL.

Когда вы собираете Apache из портов, он всегда должен строиться против установленной на портах версии OpenSSL (libssl.so в /usr/local/lib). Поскольку это не так, никто не знает, что он загружает.

Один из обходных путей - использовать rpath при настройке apache, то есть:

$ 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)
...

Вместо этого вы можете подумать об исправлении вашей коллекции портов. Если вы используете неподдерживаемую версию, возможно, вы не сможете получить последние версии нужных портов. В противном случае вы можете следовать инструкциям в Руководстве по использованию portsnap чтобы получить последнюю коллекцию портов.