Проблема с запуском apache на CentOS 6.3
У меня есть какая-то коробка, которая была вручена мне, и я даже не могу запустить базовый сервер Apache. Он устанавливается через yum (я удалил и установил его), и когда я запускаю службу (запуск службы httpd), она говорит "ОК", но pid нет. Статус показывает не работает.
В логе error_log есть следующее:
[Wed Feb 13 16:16:36 2013] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Wed Feb 13 16:16:36 2013] [notice] Digest: generating secret for digest authentication ...
[Wed Feb 13 16:16:36 2013] [notice] Digest: done
/usr/sbin/httpd: symbol lookup error: /usr/lib64/libaprutil-1.so.0: undefined symbol: apr_os_uuid_get
Я предполагаю, что это не начинается из-за последней строки. Предложения?
ldd $(which httpd)
linux-vdso.so.1 => (0x00007fff9edff000)
libm.so.6 => /lib64/libm.so.6 (0x00007f4c8815c000)
libpcre.so.0 => /lib64/libpcre.so.0 (0x00007f4c87f30000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f4c87d10000)
libaprutil-1.so.0 => /usr/lib64/libaprutil-1.so.0 (0x00007f4c87aec000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f4c878b5000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f4c8768c000)
libdb-4.7.so => /lib64/libdb-4.7.so (0x00007f4c87318000)
libapr-1.so.0 => /usr/lib64/libapr-1.so.0 (0x00007f4c870e9000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4c86ecb000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4c86b38000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f4c86934000)
/lib64/ld-linux-x86-64.so.2 (0x000000369be00000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f4c8672f000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f4c864cd000)
librt.so.1 => /lib64/librt.so.1 (0x00007f4c862c5000)
4 ответа
После просмотра информации о ldd, похоже, что ваш двоичный файл httpd скомпилирован с использованием библиотек, отличных от установленных в настоящее время. Я бы удалил столько зависимостей apache, сколько это можно сделать, и переустановил их. Перед тем, как вы это сделаете, я бы также проверил, установлены ли у вас нестандартные репозитории yum. Некоторые сторонние репозитории yum известны тем, что вызывают некоторые ужасные конфликты, которые выглядят несколько похожими на это.
Для начинающих:
yum remove apr-devel apr-util-devel httpd
К сожалению, даже если это решит проблему, возможно, вы уже глубоко погружены в несовместимость системы. Похоже, кто бы ни управлял этой системой до того, как вы скомпилировали вещи из исходного кода, установили RPM-пакеты, которые были несовместимы, или неправильно использовали сторонние репозитории. Вы можете потратить меньше времени на переустановку системы, чем пытаться ее почистить.
А ) Обновите все предоставленные ОС пакеты:
yum clean all # Clean yum cache so all fresh data will be downloaded
yum --disablerepo='*' --enablerepo=base --enablerepo=updates update
б) Проверьте, установлены ли какие-либо дополнительные пакеты, помимо доступных в репозиториях CentOS по умолчанию - base
а также updates
:
yum clean all # Clean yum cache so all fresh data will be downloaded
yum --disablerepo='*' --enablerepo=base --enablerepo=updates list extras
Если есть какие-либо, которые выглядят актуальными, отключите все репозитории, кроме этих двух, и обновите / обновите эти пакеты до предоставленных версий распространения.
c) Проверьте файлы всех пакетов:
rpm -Va
Только измененные файлы конфигурации должны быть напечатаны как измененные (ищите "5" на 3-м символе каждой напечатанной строки). Конечно, ничего в /lib
, /lib64
, /usr/lib
, /usr/lib64
, /bin
или же /usr/bin
, Если что-то там модифицируется, то похоже, что кто-то перезаписал предоставляемые дистрибутивом двоичные файлы - либо администратор без подсказки, либо хакер с черной шляпой с руткитом. В этом случае вы можете переустановить пакеты, которые содержат эти измененные двоичные файлы, но рекомендуется полная переустановка, так как очень трудно выяснить, что еще было изменено (возможно, установка того же набора пакетов на другом компьютере или виртуальной машине и сравнение).
г) Если ничего не помогает, я бы заподозрил сложный руткит. Настоятельно рекомендуется полная переустановка.
Я столкнулся с этим вопросом на Centos 5.8. Перед удалением пакетов проверьте /usr/local/lib - кто-то установил более позднюю версию apr на этот сервер и вызвал эту проблему (на этом сервере с dav запускается subversion, поэтому для запуска мне понадобился httpd).
Вы можете проверить это: /usr/sbin/httpd -V
Выходной сервер загружен: APR 1.3.3, APR-Util 1.2.7, скомпилированный с использованием: APR 1.2.7, APR-Util 1.2.7
Апрель 1.3.3 находился в / usr / local / lib. Я переместил библиотеку /usr/local/lib (я знаю, что это плохо), а затем запустил httpd.
У меня была похожая проблема на Centos 6.5 сегодня. сообщение об ошибке было:
"/ usr / sbin / httpd: ошибка поиска символа: /usr/lib64/libapr-1.so.0: неопределенный символ: dlopen"
Я перекомпилировал apache 2.4.10 с apr-1.5.1 и apr-util 1.5.3 из исходного кода в соответствии с инструкциями INSTALL.
Я скачал источник в / root. перенес источник apr и apr-util в srclib /, как указано в INSTALL.
./configure --with-included-apr
make
make install
это создало новые httpd и lib в /usr/local/apache2/lib
Я сравнил файлы lib в / usr / lib64 с /usr/local/apache2/lib и увидел, что они различаются по размеру.
Я скопировал недавно скомпилированный libapr-1.so.0 в / usr / lib64, и это решило проблему.
service httpd start
[ХОРОШО}
Я также запускаю php-fpm, поэтому тоже начал:
service php-fpm start
[ХОРОШО]
снова в деле! Это может помочь кому-то решить эту проблему.