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