如何从已安装的 RPM 列表中更新断开连接的 CentOS 系统?

如何从已安装的 RPM 列表中更新断开连接的 CentOS 系统?

我花了很多时间寻找关于如何更新断开连接的 CentOS 7 系统的良好解决方案,但尚未找到合适的解决方案。

大多数有关如何更新断开连接的系统 (RedHat/CentOS) 的解决方案都会告诉您创建一些本地存储库或使用包含所有最新软件包的 CD/DVD。

我想要的是在断开连接的系统上创建已安装软件包的列表(例如使用 rpm -qa),将该列表带到连接的系统并下载所有更新。我花了一些时间编写一个基本上像这样工作的脚本。该脚本逐步遍历列表中的所有包并检查是否有更新,如果有,则下载更新。所以为了这么好。然而问题是,包原则上可以引入新的依赖关系,即引入尚未安装在现有系统上的新包。因此,要解决这个问题,脚本需要检查所有依赖项,如果找到新的依赖项,请下载它。因为我不想重复yum,所以我想知道是否已经有一些yum脚本或工具可以用于离线更新。

答案1

有一种方法,但它相当棘手,可能会弄乱你的服务器,所以非常小心

命名法:

  • 在线的:连接到存储库的系统
  • 离线:您的系统未连接

脚步:

从以下位置压缩您的 rpm 数据库离线系统并将其传输到在线的系统:

cd /var/lib/rpm/
tar -cvzf /tmp/rpmdb.tgz *
scp /tmp/rpmdb.tgz root@online:/tmp

在你的在线的系统;将您的 rpm 数据库替换为离线系统:

cp -r /var/lib/rpm{,.bak} # back up your rpmdb from your online system. Make sure not to lose this!!
rm -rf /var/lib/rpm/*
cd /var/lib/rpm
tar -xvf /tmp/rpmdb.tgz # now your online system pretends to have the rpm database from the offline system. Don't start really installing / uninstalling rpms or you'll break everything

现在使用仅下载来模拟您的更新(我没有使用 yum 运行此更新,而是使用 zypper 运行,但它应该类似):

zypper up --download-only

现在您可以获取所有下载的软件包,它们应该足以更新您的离线系统

现在恢复你的在线的机器:

rm -rf /var/lib/rpm
cp -r /var/lib/rpm{.bak,}

相关内容