本周我要更新一批机器,但我对我们既定的程序不太有信心。它基本上对每台机器的运行方式如下:
- 挂载特定于操作系统版本/位数的共享目录,即:
mount -t cifs //server/share/rhel5.3-64/ /mnt/updates/
yum update --downloadonly --downloaddir=/mnt/updates/
yum update /mnt/updates/*.rpm
我们使用 mount 来减少所用的网络带宽,但由于每台机器安装的软件包集可能有很大差异,因此“update”命令中会包含系统中不存在的软件包,并且某些软件包会有多个旧版本。
这是个问题吗? yum 会在应用更改之前跳过/删除任何不必要/过时的软件包吗?
编辑
在阅读了@aaron-copley 的回复后,我决定做一些测试。我登录到服务器,安装共享,运行yum update --downloadonly --downloaddir=/mnt/updates/
,卸载共享,执行yum clean all
,重新安装,然后重新运行命令。什么都没下载。[耶]
我删除了一个 rpm,再次运行该命令,只下载了那一个包。[也太好啦]
我把共享挂载到了另一个运行相同 RHEL 版本的机器上,yum update --downloadonly --downloaddir=/mnt/updates/
然后运行,虽然它标记了 221 个需要下载的软件包,但它只下载了共享中尚未包含的 30 个软件包。[超级棒]
作为奖励,yum 还以粗体列出了已下载的软件包。
答案1
Yum 仅在与 一起使用时才会替换已安装的软件包update
。不过您说得对,您可能没有下载其他系统所需的软件包。
您可以做的是使用类似 的工具mrepo
来构建和维护所有 Red Hat 勘误表的本地存储库。该系统将同步到 RHN 并维护本地网络上的所有软件包。然后,每个系统都会在内部指向此主机以获取更新,以减少 WAN 带宽消耗。您也不必处理挂载,您可以通过 HTTP 使用 Yum。
答案2
Yum 仅安装较新版本的软件包。您可以使用createrepo
软件包创建带有更新的存储库,并在配置文件 /etc/yum.repos.d/company-updates.repo 中填写以下内容:
[rhel-company-updates]
name=RHEL-company-updates
baseurl=file:///mnt/updates/
gpgcheck=0
enabled=1
该程序简化:
# mount -t cifs //server/share/rhel5.3-64/ /mnt/updates/
# yum update
顺便说一句,下一步要优化的是当 yum 尝试访问此文件夹时,使用带有 cifs 的 autofs 自动挂载 /mnt/updates/。