RHEL 8.4环境下httpd启动报dlopen错误且无法安装libapr1问题求助
RHEL跨版本升级后httpd启动失败排查方案
报错根因说明
- 包名不匹配:
libapr1是Debian/Ubuntu发行版的包命名规则,RHEL 8 中apr运行库的官方包名为apr,所以直接搜索安装libapr1会提示找不到匹配包。 - 二进制兼容性问题:原有httpd是RHEL 6环境下编译的二进制文件,依赖的
libapr-1.so.0链接的是RHEL 6自带的低版本glibc库,RHEL 8的glibc版本更高,符号表不匹配,因此启动时提示找不到dlopen符号。
修复步骤
步骤1:安装RHEL 8官方apr相关依赖
首先确认系统已启用BaseOS和AppStream官方源,执行以下命令安装依赖:
yum install -y apr apr-devel apr-util apr-util-devel
步骤2:修复httpd服务,二选一即可
方案A:使用RHEL 8官方httpd(推荐)
官方源提供的httpd适配RHEL 8系统环境,稳定性更高:
- 执行安装命令:
yum install -y httpd - 将原有自定义配置、站点数据从旧的
/usr/xxxxx/xxx/apache/目录迁移到对应路径:- 配置文件迁移到
/etc/httpd/conf.d/ - 站点文件迁移到
/var/www/html/ - 日志目录可按需修改配置指定
- 配置文件迁移到
- 启动服务并设置开机自启:
systemctl start httpd systemctl enable httpd
方案B:重新编译自定义版本apache
如果必须使用当前的自定义apache版本,在RHEL 8环境下重新编译即可:
- 下载对应版本的apache源码包,编译时指定使用系统安装的apr库,避免使用自带的旧版本libapr:
./configure --with-apr=/usr/bin/apr-1-config --with-apr-util=/usr/bin/apu-1-config # 其余参数保持原有编译参数即可 make && make install - 编译完成后重新启动httpd服务即可。
步骤3:验证修复结果
执行systemctl status httpd确认服务处于active运行状态,再执行curl localhost确认服务可正常响应请求。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

