内网离线安装Oracle RPM包必须构建本地yum仓库,而非直接rpm -ivh或--force跳过依赖;需下载完整RPM集(含glibc、libaio等),用createrepo建仓并配repo文件,严格匹配系统版本,安装前须验证repolist与deplist确保依赖可解析。
内网离线安装Oracle RPM包,必须先建本地yum仓库
直接用 yum install 或 rpm -ivh 强制装 oracle 依赖包,在内网离线环境大概率失败——缺依赖会层层报错,比如 libaio.so.1()(64bit) is needed、glibc >= 2.17 is needed,手动一个个找包补全几乎不可行。
正确路径是:把 Oracle 官方提供的完整 RPM 集(如 oracle-database-preinstall-21c-1.0-1.el7.x86_64.rpm 及其所有运行时依赖)提前下载好,用它们构建一个本地 yum 仓库。这样 yum 才能自动解析依赖关系、按顺序安装。
- Oracle 官方推荐的预装包(如
oracle-database-preinstall-21c)本身不包含底层依赖,只声明了 Requires,必须靠仓库提供满足条件的glibc、libaio、compat-libcap1等 - 镜像源必须和目标系统版本严格一致:CentOS 7 用
centos-7的 base + extras 仓库,Oracle Linux 8 用ol8_baseos_latest,混用会导致Package conflicts或file /usr/lib64/libstdc++.so.6 from install of xxx conflicts with file from package yyy - 不要试图用
rpm -ivh --force --nodeps跳过依赖——Oracle 数据库启动时会动态加载共享库,缺失或版本错位会导致ORA-27123: unable to attach to shared memory segment或实例无法启动
用 createrepo 制作最小可用本地 yum 仓库
不需要同步整个官方镜像,只需把实际需要的 RPM 包放一起、生成元数据即可。关键命令只有三步:
mkdir -p /opt/local-repo/oracle-deps cp *.rpm /opt/local-repo/oracle-deps/ createrepo /opt/local-repo/oracle-deps/
然后配一个 repo 文件:
[oracle-local] name=Oracle Local Dependencies baseurl=file:///opt/local-repo/oracle-deps enabled=1 gpgcheck=0
放在 /etc/yum.repos.d/oracle-local.repo,执行 yum clean all && yum makecache 就能识别。
-
createrepo必须在包目录里运行,不能只指定单个 RPM;如果后续增删包,要重新运行createrepo --update /path,否则 yum 不会感知变更 - 若遇到
repomd.xml not found,检查baseurl路径末尾是否漏了/(file:///opt/local-repo/oracle-deps无效,必须是file:///opt/local-repo/oracle-deps/) - Oracle 的 preinstall 包常依赖
kernel-uek(UEK 内核),但标准 CentOS 没这个包——此时要从 Oracle Linux 镜像中提取对应kernel-uekRPM,放进同一仓库,否则yum install oracle-database-preinstall-21c会卡死在 unresolved deps
强制安装 rpm 只适用于极少数兜底场景
仅当确认所有依赖已静态存在(比如已用 rpm -Uvh 逐个装完、或系统自带版本完全兼容),且只是因为签名或架构校验失败时,才考虑强制安装。
- 典型适用场景:
rpm -ivh --force --nosignature oracle-database-preinstall-21c-1.0-1.el7.x86_64.rpm(跳过 GPG 签名检查) - 绝对避免:
--nodeps——它绕过所有依赖检查,但 Oracle 安装脚本(runInstaller)会在静默安装阶段再次校验,失败直接退出并提示PRVF-7532 : Sufficient number of packages are not installed - 若提示
error: Failed dependencies: ... is needed by ...,说明仓库没配对或yum makecache没刷新成功,不是靠强制能解决的
验证仓库有效性比安装步骤更重要
很多问题其实出在「以为仓库好了,其实没生效」。务必在安装前做两件事:
- 运行
yum repolist enabled,确认你的 repo 名字出现在列表里,且status显示非零数字(比如oracle-local 12表示有 12 个包可选) - 用
yum deplist oracle-database-preinstall-21c查看完整依赖树,人工扫一眼关键项(libaio、sysstat、ksh)是否标记为provider:而非(none) - 如果
yum install过程中突然提示Cannot retrieve repository metadata,大概率是baseurl路径权限问题:确保/opt/local-repo/oracle-deps对root可读,且 SELinux 没拦截(临时用setenforce 0测试)
离线环境没有重试机会,仓库结构和依赖覆盖度一旦出错,后面所有步骤都是徒劳。花十分钟验证 repo,能省掉几小时排查时间。











