CentOS 8 缺失 compat-libcap1 和 compat-libstdc++-33,因其为 RHEL/CentOS 7 专属 ABI 兼容包,官方仓库已移除;需手动下载 OL7 源 RPM 并 rpm -ivh 安装,且安装 oracle-database-preinstall-19c 时必须加 --nodeps --force 参数绕过 yum 的 el8 兼容性校验。

CentOS 8 上直接用 yum install compat-libcap1 或 compat-libstdc++-33 会失败,因为这些包根本不在 CentOS 8 的官方仓库里——它们是 RHEL/CentOS 7 的遗留二进制兼容库,必须手动下载并安装。
为什么 compat-libcap1 和 compat-libstdc++-33 在 CentOS 8 上找不到
Oracle 19c 的 RPM 安装包(尤其是 oracle-database-preinstall-19c)在构建时硬依赖 RHEL 7 环境下的 ABI,其中 compat-libcap1 提供 cap_get_proc 等旧版 libcap 符号,compat-libstdc++-33 则用于满足某些 Oracle 二进制组件对 GCC 3.4 时代 C++ ABI 的调用。CentOS 8 默认使用 libcap 2.25+ 和 libstdc++ 8/9,不提供这些符号,所以 yum install compat-libcap1 必然报 nothing provides compat-libcap1。
正确安装 compat 包的实操步骤
按顺序执行,缺一不可:
- 先下载两个 RPM(推荐从 Oracle 官方镜像或可信镜像源):
curl -O https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/compat-libcap1-1.10-7.el7.x86_64.rpm curl -O https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
- 用
rpm -ivh安装(不是yum install):rpm -ivh compat-libcap1-1.10-7.el7.x86_64.rpm rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
- 如果提示
Failed dependencies: libgcc >= 3.4.0或类似,说明系统缺少基础运行时,补装:yum install -y libgcc libstdc++ glibc
- 验证是否生效:
ldconfig -p | grep cap # 应看到 libcap.so.1 (libc6,x86-64) => /usr/lib64/libcap.so.1
安装 oracle-database-preinstall-19c 前必须绕过的坑
即使 compat 包装好了,直接 yum install oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm 仍大概率失败,原因有二:
-
yum会尝试解析依赖并从仓库拉取,但compat-libcap1已是本地 RPM,yum 不认; - RPM 包名后缀
.el7会让 yum 认为它“不兼容 el8”,触发跳过逻辑。
正确做法是:
rpm -ivh --force --nodeps oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm注意:
--nodeps 是必须的(否则仍卡在 compat-libcap1),--force 可避免因文件冲突中止。装完后务必运行 id oracle 确认用户已创建,且 /etc/oracle 目录存在。
libnsl 和其他易漏的运行时依赖
Oracle 19c 启动监听器或 sqlplus 时若报 error while loading shared libraries: libnsl.so.1,说明 libnsl 缺失。CentOS 8 默认只装 libnsl2,而 Oracle 需要旧版 libnsl:
- 安装 64 位版:
yum install -y libnsl
- 如需 32 位兼容(比如某些 ODBC 组件),额外加:
yum install -y libnsl.i686
- 验证:
ls /usr/lib64/libnsl.so*
应输出/usr/lib64/libnsl.so.1
别忽略 libaio 和 libaio-devel,rpm -ivh oracle-database-ee-19c-1.0-1.x86_64.rpm 时若提示 libaio.so.1 找不到,就补:
yum install -y libaio libaio-devel
最关键的细节:所有 compat 包和 preinstall 包都带 .el7 后缀,这不是笔误,是 Oracle 官方明确要求的兼容标识——你不能试图找“el8 版本”,它不存在;也不能指望 dnf 自动降级解决,必须人工干预安装路径和依赖策略。


















