You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取CentOS 9系统更新涉及的RPM包列表及对应URL以实现离线批量更新

如何获取CentOS 9系统更新涉及的RPM包列表及对应URL以实现离线批量更新

我来帮你梳理几个实用的方法,完美解决你这个离线批量更新的需求:

方法一:通过DNF历史记录直接提取更新包及URL

这种方法最直接,因为DNF会自动记录所有系统操作的历史:

  • 首先查看系统的DNF更新历史,找到你那次系统更新对应的操作ID:
    dnf history
    
    输出里会显示每条操作的ID、执行时间、动作类型(比如Update),找到你要追溯的那次更新对应的ID号。
  • 接着用这个ID查看具体的更新包明细:
    dnf history info <你的更新操作ID>
    
    这里会列出所有被更新、新增的RPM包,你可以把这些包名复制保存到一个文件里,比如updated_pkgs.txt。
  • 最后批量获取每个包的源URL,方便后续下载:
    while read pkg; do
        dnf repoquery --queryformat "%{location}" $pkg
    done < updated_pkgs.txt > pkg_urls.txt
    
    执行完后,pkg_urls.txt文件里就会包含每个更新包的完整下载地址。

方法二:对比更新前后的RPM列表找出差异包

如果你的BASE系统有快照,可以从快照里导出初始的RPM列表,再和当前已更新系统的列表对比:

  • 在BASE快照系统里导出初始包列表:
    rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" > base_pkgs.txt
    
  • 在已更新的目标系统里导出当前包列表:
    rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" > updated_pkgs.txt
    
  • 用comm命令对比两个列表,筛选出更新后新增或版本升级的包:
    comm -13 base_pkgs.txt updated_pkgs.txt > diff_pkgs.txt
    
    这个diff_pkgs.txt就是你需要的更新包列表。
  • 同样用循环批量获取每个包的URL:
    while read pkg; do
        dnf repoquery --queryformat "%{location}" $pkg
    done < diff_pkgs.txt > pkg_urls.txt
    

批量下载更新包并离线部署

拿到包列表后,你可以直接用DNF批量下载这些包,比手动用wget更省心:

dnf download --destdir=./update_pkgs/ $(cat diff_pkgs.txt)

所有需要的更新包都会被下载到./update_pkgs/目录中。之后把这个目录拷贝到其他同BASE的系统上,用以下命令完成离线更新:

dnf localinstall ./update_pkgs/*.rpm

备注:内容来源于stack exchange,提问作者Mirimat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 14:19:29