#apache #autoconf #suse #php-openssl #mod-ssl
#apache #автоконференция #suse #php-openssl #mod-ssl
Вопрос:
Меня просят перекомпилировать mo_ssl
с openssl 1.0.2 в SuseSE11SP3. Тем не менее, я новичок в Suse, но немного разбираюсь в Linux.
- ОС: Suse SE11SP3
- Openssl: 0.9.8j <- который поставляется с оригинальным Suse linux
- Веб-сервер: Apache httpd 2.2.9
Вот ограничение, которое у меня есть. Я не могу использовать zypper
or rpm
, потому что политика безопасности компании не позволяет мне это делать. Это абсурдно, вот как это происходит здесь. Еще одно ограничение, которое у меня есть, заключается в том, что эта система используется другими веб-серверами, на которые у меня нет разрешения. Я должен сделать это как можно более локально.
Я хочу, чтобы это произошло, так это то, что когда я перекомпилирую сервер apache, мне нравится видеть mod_ssl
, что он связан с более новой версией библиотеки Openssl.
Итак, я загрузил исходный файл Openssl 1.0.2h:
./confgiure --prefix=//PREFIX/openssl --opendir=/PREFIX/openssl
make test
make install
Я успешно установил openssl в локальный каталог.
а затем я попытался перекомпилировать httpd2.2.9, который уже существует. итак, я перешел к исходному файлу в httpd 2.2.9
make clean
export LIBS=-ldl
export LD_LIBRARY_PATH="/PREFIX/openssl"
export LIBS="-L/PREFIX/openssl"
export CPPFLAGS="-I/PREFIX/include/openssl"
./configure --prefix=/PREFIX/apache22 --enable-so --enable-ssl=ssl -with-ssl=/PREFIX/openssl --enable-module=shared CC=/usr/bin/gcc
make install
Были некоторые ошибки, но я вроде разобрался и скомпилировал его. Однако
конечный результат для mod_ssl
по-прежнему связан со старым Openssl 0.9.8 вместо более новой версии 1.0.2h
Что я пропустил в этих шагах? Или где я ошибся?
//openssl install
./config -fPIC shared --prefix=/PREFIX/openssl --openssldir=/PREFIX/openssl
make
make test
make install
// install apache2
//recompiling after apache2 is installed with openssl
export LIBS=-ldl
export LD_LIBRARY_PATH="/PREFIX/openssl/lib"
export LDFLAGS="-L/PREFIX/openssl"
export CPPFLAGS="-I/PREFIX/openssl/include/openssl"
export CFLAGS="-Wl,-rpath=/PREFIX/openssl:/usr/lib -I/PREFIX/openssl/include/openssl"
./configure --prefix=/PREFIX/apache22 --enable-so --enable-ssl=shared -with-ssl=/PREFIX/openssl --enable-module=shared CC=/usr/bin/gcc
make
make install
Приведенная выше команда создает mod_ssl.so в разделе «apache22 / modules», но
когда я сделал ldd mod_ssl.so получилось это примерно так
linux-vdso.so.1 => (0x00007fffef8f2000)
libssl.so.1.0.0 => not found
libcrypto.so.1.0.0 => not found
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffe6a48d000)
libc.so.6 => /lib64/libc.so.6 (0x00007ffe6a116000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffe6a913000)
libssl.so , libcrypto.so не связан .. Я не знаю, что еще я могу сделать здесь, чтобы связать mod_ssl.so к другой версии openssl.
пожалуйста, помогите мне.
Комментарии:
1. Вы пробовали настраивать
LDFLAGS=-L/PREFIX/openssl
?2. Спасибо за ваш быстрый ответ. ДА. Я пытался. это не сработало.
3. Сообщите компоновщику, что у вас есть предпочтительный путь. Попробуйте
export CPPFLAGS="-Wl,-rpath=/PREFIX/openssl:/usr/lib -I/PREFIX/include/openssl"
.4. Алвиц, большое вам спасибо за ваш ответ. Я попробую и дам вам знать.
5. У меня была ошибка опечатки. Это должно быть
CFLAGS
, а неCPPFLAGS
.
Ответ №1:
Благодаря помощи Алвица я впервые смог написать этот ответ в stackoverflow.
!Слава Alvits!!
Моя первоначальная задача заключалась в том, что мне нужно было установить другую версию openssl в локальной директории, которая отличается от системного openssl. Но мне нравится создавать mod_ssl, который связан с более новым openssl.
Сначала я установил openssl с опцией shared, о которой я изначально забыл, и mod_ssl не был создан. так что будьте осторожны, не забывая об этом.
cd openssl_source_direcotry
./config -fPIC shared --prefix=/PREFIX/openssl --openssldir=/PREFIX/openssl
make
make test
make install
Следующим шагом я добавил некоторые переменные среды. ПРЕФИКС — это мой локальный каталог.
При установке, пожалуйста, используйте другое имя вместо ПРЕФИКСА.
export LIBS=-ldl
export LD_LIBRARY_PATH="/PREFIX/openssl/lib"
export LDFLAGS="-L/PREFIX/openssl"
export CPPFLAGS="-I/PREFIX/openssl/include/openssl"
export CFLAGS="-Wl,-rpath=/PREFIX/openssl/lib:/usr/lib -I/PREFIX/openssl/include/openssl"
Следующий шаг — перекомпилировать сервер apache. Я предположил, что сервер apache уже установлен на вашем сервере.
./configure --prefix=/PREFIX/apache22 --with-apr=/PREFIX/apache22/bin --with-apr-util=/PREFIX/apache22/bin --enable-so --enable-ssl=shared -with-ssl=/PREFIX/openssl --enable-module=shared CC=/usr/bin/gcc
make install
Затем перейдите в apache22 / modules, чтобы подтвердить, является ли mod_ssl.so правильно связан.
ldd mod_ssl.so
linux-vdso.so.1 => (0x00007fff823ff000)
libssl.so.1.0.0 => /PREFIX/openssl/lib/libssl.so.1.0.0 (0x00007fb3b32d4000)
libcrypto.so.1.0.0 => /PREFIX/openssl/lib/libcrypto.so.1.0.0 (0x00007fb3b2e8c000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb3b2c3e000)
libc.so.6 => /lib64/libc.so.6 (0x00007fb3b28c7000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fb3b26c2000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb3b377d000)
Еще один вопрос, я действительно ценю Алвица за его помощь. без его помощи я не смог бы продвинуться так далеко.
Комментарии:
1. Я пытаюсь перекомпилировать apache с последней версией openssl и застрял на втором шаге, мой apache2 находится по
/etc/apache2
адресу, но у него нетbin
каталога, я запустилsudo find / -name apache2 -type d
команду и проверил результаты команды, и ниfind
у одного из результатов нетapache2/bin
каталога, не могли бы вы сообщить мне, где я могу найти фактическое местоположениеapache2/bin
openssl??2. сэкономил много моего времени, спасибо
Ответ №2:
Это действительно полезно, перед перекомпиляцией apache обязательно очистите apache как «make clean»
Процесс перекомпиляции apache как make clean, configure, make install.
Комментарии:
1. Это решило проблему для меня, я обновился
openssl
, но каким-то образом httpd все еще использовал старый openssl. Мне не хватало make clean при перекомпиляции apache, как только это было сделаноmake clean
, httpd начал использовать обновленную версию openssl.