我有一些交给我的盒子,我甚至不能启动基本的Apache服务器。 它通过百胜安装(我已经卸载并安装它),当我启动服务(服务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
我认为这不是因为最后一行而开始的。 build议?
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)
看看ldd信息后,看起来你的httpd二进制文件是针对不同于当前安装的库编译的。 我会清除尽可能多的apache依赖项,并重新安装它们。 但是,在这之前,我还要检查一下是否安装了任何非标准的yum软件仓库。 某些第三方yum版本库因引起一些与此相似的可怕冲突而出名。
对于初学者:
yum remove apr-devel apr-util-devel httpd
不幸的是,即使这样做解决了这个问题,你可能已经陷入了系统不兼容的境地。 看起来好像pipe理这个系统的人,无论是从源头上编译的东西,安装的不兼容的RPM,还是滥用第三方回购之前。 重新安装系统可能花费的时间less于尝试清理系统的时间。
a)更新所有os提供的软件包:
yum clean all # Clean yum cache so all fresh data will be downloaded yum --disablerepo='*' --enablerepo=base --enablerepo=updates update
b)检查是否安装了除默认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)validation所有软件包的文件:
rpm -Va
只有修改过的configuration文件应该被修改打印(在打印的每行的第三个字符处查找“5”)。 当然,在/lib , /lib64 , /usr/lib , /usr/lib64 , /bin或/usr/bin 。 如果有什么修改,那么看起来有人已经覆盖了分发提供的二进制文件 – 无论是pipe理员还是没有线索的黑客或者黑客利用rootkit。 在这种情况下,您可以重新安装包含这些修改后的二进制文件的软件包,但是build议您完全重新安装,因为很难找出哪些被修改(可能在另一台计算机或虚拟机上安装相同的软件包并进行比较)。
d)如果以上没有任何帮助,我会怀疑一个复杂的rootkit。 然后强烈推荐完全重新安装。
我遇到5.8这个问题。 在删除软件包之前,请检查/ usr / local / lib – 某人在此服务器上安装了更高版本的apr,并导致此问题(subversion在dav中运行在此服务器上,所以我需要启动httpd)。
你可以通过/ usr / sbin / httpd -V来检查
输出服务器加载:APR 1.3.3,APR-Util 1.2.7编译使用:APR 1.2.7,APR-Util 1.2.7
APR 1.3.3在/ usr / local / lib中。 我移动了/ usr / local / lib库(我知道这很糟糕),然后启动了httpd。
我今天在6.5版本上遇到类似的问题。 错误信息是:
“/ usr / sbin / httpd:符号查找错误:/usr/lib64/libapr-1.so.0:undefined symbol:dlopen”
我根据INSTALL指令使用apr-1.5.1和apr-util 1.5.3从源代码重新编译apache 2.4.10。
我将源代码下载到/ root。 将apr和apr-util源文件移动到srclib / INSTALL中。
./configure --with-included-apr make make install
这在/ usr / local / apache2 / lib中创build了一个新的httpd和lib
我将/ usr / lib64中的lib文件与/ usr / local / apache2 / lib进行了比较,发现它们大小不一。
我将新编译的libapr-1.so.0复制到/ usr / lib64中,并解决了这个问题。
service httpd start
[好}
我也运行php-fpm,所以也启动了:
service php-fpm start
[好]
回到工作! 这可能会帮助别人解决这个问题。