![yum + 如何捕获 yum update 安装的所有 rpm](https://linux22.com/image/179944/yum%20%2B%20%E5%A6%82%E4%BD%95%E6%8D%95%E8%8E%B7%20yum%20update%20%E5%AE%89%E8%A3%85%E7%9A%84%E6%89%80%E6%9C%89%20rpm.png)
我们从 rhel 7.2 升级到 rhel 7.6
升级是通过 yum update (来自 redhat repertoires )
subscription-manager release --set=7.6
subscription-manager repos --enable "rhel-*-optional-rpms" --enable "rhel-*-extras-rpms" --enable "rhel-ha-for-rhel-*-server-rpms"
然后我们表演了
yum update
我们还可以从 yum 历史记录中看到更新
yum history
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
ID | Command line | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
31 | update | 2020-09-11 09:10 | I, O, U | 899 EE
在更新过程中,更新/安装了 300 rpm
但现在我们想在没有网络连接的情况下在其他机器上离线执行 yum 更新,我问我们是否可以捕获已安装的所有 rpm(在 yum 更新期间)
因此可以捕获所有已安装的 rpm 列表
我问这个是因为,如果我有 rpm 列表,那么我可以通过以下方式下载它们yumdownloader
我发现的是
yum history info 31 | grep Updated
Updated rpm-4.11.3-17.el7.x86_64 @anaconda/7.2
Updated subscription-manager-1.15.9-15.el7.x86_64 @anaconda/7.2
Updated yum-3.4.3-132.el7.noarch @anaconda/7.2
Updated yum-langpacks-0.4.2-4.el7.noarch @anaconda/7.2
Updated ModemManager-1.1.0-8.git20130913.el7.x86_64 @anaconda/7.2
Updated ModemManager-glib-1.1.0-8.git20130913.el7.x86_64 @anaconda/7.2
Updated NetworkManager-adsl-1:1.0.6-27.el7.x86_64 @anaconda/7.2
Updated NetworkManager-config-server-1:1.0.6-27.el7.x86_64 @anaconda/7.2
Updated NetworkManager-glib-1:1.0.6-27.el7.x86_64 @anaconda/7.2
Updated NetworkManager-libnm-1:1.0.6-27.el7.x86_64 @anaconda/7.2
Updated NetworkManager-libreswan-1.0.6-3.el7.x86_64 @anaconda/7.2
Updated NetworkManager-libreswan-gnome-1.0.6-3.el7.x86_64 @anaconda/7.2
Updated NetworkManager-team-1:1.0.6-27.el7.x86_64 @anaconda/7.2
.
.
.
这是捕获从 yum update 安装的所有 rpm 的真正方法吗?
答案1
红帽有一篇解决方案文章,介绍了更新断开连接的系统的可能方法:我们如何定期更新一个断开连接的系统(没有互联网连接的系统)?。
可用选项如下:
设置红帽卫星服务器。这需要额外订阅。卫星服务器连接到在线 Red Hat 存储库。所有系统都连接到卫星服务器以下载更新。
在另一个连接的系统上下载更新。将包传输到目标系统并更新。
使用发行媒体(特定发行版本的 DVD/ISO 映像)。
从 Red Hat 网站手动下载软件包。这是一种耗时的方法,难以自动化,而且您必须手动处理依赖关系解析。
创建本地存储库。这种方法涉及使用该
reposync
工具将软件包下载到一个系统。然后使用 HTTP/NFS/FTP 将软件包作为 yum 存储库公开给其他系统。
就您而言,您似乎正在使用第二种方法。有关此方法的更多详细信息可以在此处找到:如何在没有网络连接的情况下将离线 Red Hat Enterprise Linux 服务器更新到 Red Hat/Proxy/Satellite?。本文建议从目标系统复制 RPM 数据库,然后用于yum update --downloadonly
获取新包。
您也可以研究其他选项,看看它们是否更适合该任务。由于您当前正在尝试从 7.2 升级到 7.6,因此使用 7.6 发布媒体(第三种方法)可能效果很好。
对于更长期的解决方案,我建议查看第一种方法(卫星)或第五种方法(本地存储库)。这些方法更加集中,并提供更好的自动化可能性。
答案2
Yum 下载/var/cache/yum/<repo>/packages
.因此,如果您将 rpm 从该目录复制到同一路径上的另一台服务器,应该可以解决问题。但请记住:
最好的方法是首先在连接互联网的计算机上清理软件包,以便仅
yum update
保留并复制最新运行的更新/安装的软件包。另一方面,这意味着将不使用增量 rpm 机制,并且必须下载每个 rpm 的完整大小,而不仅仅是差异。如果目标机器根本无法访问 Internet,则 yum 将不会收到有关可用的较新软件包的通知。因此,复制 rpm 后,您可以用来
yum install ./*.rpm
安装它们。我在互联网带宽较低的计算机上使用的方法是yum check-update
在连接到网络时运行,然后在将所有 rpm 复制到/var/cache/yum/<repo>/packages
更新后运行。 Yum 会在缓存中查找 rpm,并且不会从网络下载它们。
如果您需要经常更新大量计算机,最好的方法是设置本地存储库和更新服务器。这是一项简单的任务,您会找到许多有关操作方法的指南。