真正可靠的私有离线YUM源必须严格按目标系统版本组织仓库结构,如/var/www/yum/centos-8-x86_64/AppStream,禁止跨版混放RPM包;需用reposync或官方ISO获取完整结构,配合createrepo -g comps.xml注入语义、--includepkg过滤冲突包,并通过priority和enabled实现版本隔离与秒级回退,最后在真实目标系统中验证依赖图与安装闭环。

在生产环境做大版本跨越(比如 CentOS 7 → CentOS 8,或 RHEL 7 → RHEL 9)时,直接复用旧仓库会导致包名变更、依赖断裂、ABI 不兼容等问题。单纯拷贝 RPM 包 + createrepo 会生成“能识别但装不上”的源——因为元数据里没体现架构差异、模块流(module streams)、或废弃/重命名包的映射关系。真正可靠的私有离线 YUM 源,必须兼顾**版本隔离性**、**依赖可解性**和**语义一致性**。
严格按目标系统版本组织仓库结构
不能把多个发行版的 RPM 混放一个目录。每个仓库根目录必须唯一对应一个操作系统主版本+架构:
-
路径即契约:例如
/var/www/yum/centos-8-x86_64/AppStream和/var/www/yum/centos-8-x86_64/BaseOS分开存放;RHEL 9 则用rhel-9-for-x86_64-baseos-rpms这类官方仓库名风格 -
禁止跨版混放:不要把 CentOS 7 的
kernel-3.10和 CentOS 8 的kernel-4.18放进同一createrepo目录——createrepo不校验 OS 兼容性,但yum/dnf客户端会因distro-sync策略拒绝安装 -
优先使用官方 ISO 或 reposync 镜像:挂载 CentOS 8 DVD 后只复制
Packages/,或用reposync --download-metadata --download-comps -r BaseOS -p /repo/centos8/获取带 comps.xml 的完整结构
用 --groupfile 和 --includepkg 精准控制元数据粒度
默认 createrepo 只扫描 RPM 文件头,无法表达“这个包只适用于 Python 3.9 模块流”或“该 nginx 是替代旧版 nginx116 的新命名包”。需主动注入语义:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
启用分组定义:下载对应版本的
comps.xml(如 CentOS 8 的AppStream/comps.xml),运行createrepo -g comps.xml /repo/centos8/AppStream,让yum groupinstall可用 -
过滤冲突包:若仓库中同时存在
httpd-2.4.37(CentOS 8)和httpd24u-2.4.53(IUS),用--includepkg httpd-*.rpm显式限定,避免yum install httpd解出两个候选导致失败 -
禁用不安全的自动依赖推导:添加
--no-database(禁用 sqlite)+--simple-md-filenames,减少元数据体积并规避某些旧客户端解析异常
通过 repo 配置实现版本软隔离与回退机制
生产服务器不应只配一个 [base] 源。要利用 YUM 的 repo 优先级和 enable/disable 逻辑做灰度控制:
-
命名含版本锚点:配置文件命名为
centos8-baseos.repo,内容中name=CentOS 8 BaseOS ($releasever),baseurl=file:///repo/centos8/BaseOS/ -
设置 repo 优先级:在所有 repo 文件中加入
priority=1(最高)到priority=10(最低),配合yum-plugin-priorities插件,确保centos8-appstream优先于centos7-legacy -
保留旧版快照:升级前执行
createrepo --update /repo/centos7-legacy/冻结当前状态;后续若新源出问题,只需enabled=0关闭新版,enabled=1开启旧版即可秒级回退
验证环节必须覆盖真实安装路径
仅检查 repomd.xml 是否生成成功远远不够。要模拟生产环境最小闭环:
-
用目标系统容器验证:在干净 CentOS 8 容器中执行
yum --disablerepo='*' --enablerepo='centos8-baseos' install --assumeno kernel-core,确认无Nothing to do或package not found -
强制依赖图分析:运行
repoquery --requires --resolve httpd --disablerepo='*' --enablerepo='centos8-appstream',检查输出是否全是centos8-前缀包,杜绝混入epel-7类残留 -
检查 gpg 签名一致性:若启用
gpgcheck=1,需提前导入对应发行版 GPG 密钥(如rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial),否则yum update会静默跳过整个源

















