在 CentOS 6.3 上启动 apache 的问题

在 CentOS 6.3 上启动 apache 的问题

我有一些别人交给我的盒子,但我甚至无法启动基本的 Apache 服务器。它是通过 yum 安装的(我已卸载并安装了它),当我启动服务(service httpd start)时,它显示“OK”,但没有 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)

答案1

查看 ldd 信息后,似乎您的 httpd 二进制文件是针对与当前安装的库不同的库进行编译的。我会清除尽可能多的 apache 依赖项,并重新安装它们。不过,在执行此操作之前,我还会检查您是否安装了任何非标准 yum 存储库。某些第三方 yum 存储库因导致一些看起来与此有些相似的严重冲突而闻名。

对于初学者:

yum remove apr-devel apr-util-devel httpd

不幸的是,即使这确实解决了问题,您可能已经深陷系统不兼容的泥潭。看起来,在您之前管理此系统的人要么从源代码编译了内容,要么安装了不兼容的 RPM,要么滥用了第三方存储库。您可能花在重新安装系统上的时间比尝试清理系统的时间还少。

答案2

a)更新所有操作系统提供的软件包:

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) 验证所有包的文件:

rpm -Va

只有修改过的配置文件才会打印为已修改(在打印的每一行的第 3 个字符处查找“5”)。 、 、 、 或 中肯定没有任何内容/lib/lib64如果/usr/lib修改/usr/lib64了任何内容,/bin/usr/bin看起来好像有人覆盖了发行版提供的二进制文件 — 要么是毫无头绪的管理员,要么是使用 rootkit 的黑帽黑客。 在这种情况下,您可以重新安装包含这些已修改二进制文件的软件包,但建议完全重新安装,因为很难找出还修改了什么(也许在另一台计算机或虚拟机上安装同一组软件包并进行比较)。

d) 如果以上方法均无效,那么我怀疑这是一个复杂的 rootkit。强烈建议完全重新安装。

答案3

我在 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

APR 1.3.3 位于 /usr/local/lib 中。我移动了 /usr/local/lib 库(我知道这很糟糕),然后 httpd 启动了。

答案4

我今天在 centos 6.5 上遇到了类似的问题。错误信息是:

“/usr/sbin/httpd:符号查找错误:/usr/lib64/libapr-1.so.0:未定义符号:dlopen”

我根据 INSTALL 说明从源代码使用 apr-1.5.1 和 apr-util 1.5.3 重新编译了 apache 2.4.10。

我将源代码下载到 /root。按照 INSTALL 中的指示将 apr 和 apr-util 源代码移动到 srclib/。

./configure --with-included-apr
make
make install

这在 /usr/local/apache2/lib 中创建了一个新的 httpd 和 lib

我将 /usr/lib64 中的 lib 文件与 /usr/local/apache2/lib 进行了比较,发现它们的大小不同。

我将新编译的 libapr-1.so.0 复制到 /usr/lib64 中,这解决了这个问题。

service httpd start

[好的}

我也运行 php-fpm,因此也启动了它:

service php-fpm start

[好的]

恢复营业!这可能会帮助其他人解决这个问题。

相关内容