不能直接 rpm -ivh *.rpm --force --nodeps,因为oracle 11g依赖存在强版本约束和运行时链式依赖,如libaio与glibc版本必须匹配,--nodeps会跳过校验导致runinstaller启动时报glibcxx_3.4.20未找到等错误;且compat-libcap1等包在centos 7默认源中缺失,需从centos 8或oracle linux补全。
为什么不能直接 rpm -ivh *.rpm --force --nodeps
因为 oracle 11g 依赖存在强版本约束和运行时链式依赖,比如 libaio-0.3.109-13.el7.x86_64 必须匹配 glibc-2.17-325.el7_9.x86_64,而 --nodeps 会跳过校验,导致安装后 runinstaller 启动时报 libstdc++.so.6: version `glibcxx_3.4.20' not found 这类错误。更麻烦的是,部分包(如 compat-libcap1)在 centos 7 默认源里压根不存在,必须从 centos 8 或 oracle linux 的仓库补全。
挂载 ISO 制作本地 yum 源的实操要点
用 CentOS 7 安装镜像(如 CentOS-7-x86_64-DVD-2009.iso)比手动收集 RPM 更可靠,它自带完整 base + updates 仓库结构:
- 挂载前先确认镜像已上传到服务器,例如放在
/opt/CentOS-7-x86_64-DVD-2009.iso - 创建挂载点并挂载:
mkdir -p /mnt/centos7-dvd mount -o loop /opt/CentOS-7-x86_64-DVD-2009.iso /mnt/centos7-dvd
- 备份原 repo 配置:
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak - 新建
/etc/yum.repos.d/local.repo,内容如下:[local-base] name=CentOS-$releasever - Base baseurl=file:///mnt/centos7-dvd gpgcheck=0 enabled=1
- 刷新缓存:
yum clean all && yum makecache
哪些依赖必须从本地源装,哪些得额外补
本地 ISO 能覆盖大部分基础依赖,但 Oracle 11g 明确要求的以下包仍可能缺失:
-
compat-libcap1:CentOS 7 ISO 不含,需从 CentOS 8 镜像或 Oracle Linux 8 的BaseOS目录下载compat-libcap1-1.10-7.el8.x86_64.rpm手动安装 -
compat-libstdc++-33:ISO 中有,但注意区分架构——必须装.x86_64版本,i686版本会导致libstdc++.so.5加载失败 -
unixODBC-devel:某些精简版 ISO 未包含,需检查/mnt/centos7-dvd/Packages/下是否存在unixODBC-devel-2.3.1-14.el7.x86_64.rpm,没有就单独补 - 所有带
-devel后缀的包(如elfutils-libelf-devel)必须装,否则runInstaller编译检测阶段直接退出
验证依赖是否真正就绪的三步检查
别只看 yum install 返回 Complete! 就以为完事了:
- 执行
rpm -q binutils compat-libcap1 libaio-devel gcc-c++ glibc-devel,逐个确认输出具体版本号,而非package xxx is not installed - 切换到
oracle用户,运行ldd $ORACLE_HOME/bin/oracle | grep "not found"(先解压安装包但不运行安装器),若报错说明运行时库链断裂 - 在
/tmp下跑一次预检:/ora/database/stage/cvu/cv/runfixup.sh,它会真实调用系统命令检测内核参数、limits、依赖路径,比人工核对靠谱得多
离线安装最耗时的环节从来不是复制文件,而是依赖链中某一个看似无关的包版本错位。挂载 ISO 只是起点,compat-libcap1 和 libaio-devel 的架构与版本必须眼见为实。











