如何获取CentOS 9系统更新涉及的RPM包列表及对应URL以实现离线批量更新
如何获取CentOS 9系统更新涉及的RPM包列表及对应URL以实现离线批量更新
我来帮你梳理几个实用的方法,完美解决你这个离线批量更新的需求:
方法一:通过DNF历史记录直接提取更新包及URL
这种方法最直接,因为DNF会自动记录所有系统操作的历史:
- 首先查看系统的DNF更新历史,找到你那次系统更新对应的操作ID:
输出里会显示每条操作的ID、执行时间、动作类型(比如dnf historyUpdate),找到你要追溯的那次更新对应的ID号。 - 接着用这个ID查看具体的更新包明细:
这里会列出所有被更新、新增的RPM包,你可以把这些包名复制保存到一个文件里,比如dnf history info <你的更新操作ID>updated_pkgs.txt。 - 最后批量获取每个包的源URL,方便后续下载:
执行完后,while read pkg; do dnf repoquery --queryformat "%{location}" $pkg done < updated_pkgs.txt > pkg_urls.txtpkg_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.txtdiff_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
相关产品推荐
相关产品推荐

