是否有一些简单明了的说法可以让几台 Linux 机器保持在同一补丁级别?对于一些 Ubuntu 和一些 CentOS 7(实际上是 Oracle Linux 7,但足够接近,因为其他人可能更熟悉 CentOS)机器,我需要这个。
编辑:澄清一下,不同的发行版不必“在相同的补丁级别”,所以我只需要将 Ubuntu 16.xx 机器保持在相同的补丁级别,Ubuntu 18.xx 机器在相同的补丁级别补丁级别、相同补丁级别的 Oracle Linux 7.x 机器等。
我的意思是这个。我有一台使用“sudo yum update”更新的 CentOS 7 机器 A。它具有默认存储库以及一些额外的第三方存储库。然后一个月后我想更新另一台 CentOS 7 机器,但不是更新到最新的软件包,而是与机器 A 上的相同版本。
如果安装的存储库和软件包存在差异(例如机器 A 安装了Yarn和Jenkins存储库和软件包,而 B 没有安装它们,反之亦然),这些将不计算在内,但会更新到最新任何一台机器上都有可用的版本。所以只有那些包会在两台机器上都存在“版本限制”。
我知道至少在 CentOS ( YUM ) 中,您可以将软件包更新到某个版本而不是最新版本,我认为在 Ubuntu 上使用APT也是可能的。问题是是否有适用于 Ubuntu 和 CentOS 的工具,可以使用第一台机器的输出(安装了哪些软件包以及它们是什么版本)作为第二台机器上的输入,如果该软件包则更新到哪个版本(和存储库)也安装在那里。然后其余的将更新到最新版本。
我之前尝试过用谷歌搜索,我主要看到两个建议:
使用包锁定文件有一种更简单的方法。 yum-versionlock应该允许您在机器 A 上创建一个引用锁定文件,然后您可以手动或使用 Ansible 将其复制到其他 centOS 7 机器。
如果您只关心几个包,那么使用 Ansible 管理它们会更容易。如果你真的需要所有包在机器上保持完全相同的版本,那么 yum-versionlock 是要走的路。您仍然可以使用 Ansible 从机器 A 复制锁定文件。
安装 yum-versionlock
然后添加所有包
*
或特定包,如httpd
versionlock.list
您应该在文件中看到这些包,如versionlock.conf
. 默认情况下,这些文件位于/etc/yum/pluginconfg.d/
然后复制
versionlock.list
到另一台机器并运行sudo yum install -y
orsudo yum update -y
,它将安装或更新所有包到锁定文件中的版本。如果您只是运行更新,它应该只将您已经拥有的内容更新为锁定文件允许的内容(但我没有尝试过)。对于其他操作系统,也有类似的工具,正如此处对 apt所解释的那样,但我不知道有一种工具可以在不同的包管理器之间锁定包。
同样,如果您只关心某些包,您可以使用 Ansible 的包模块来执行此操作,但您可能会发现一些用例必须使用 yum 和其他包管理器特定模块。这可能会变得混乱,但值得。
如果您绝对需要一个工具,那么您可以使用 Ansible 从您需要支持的不同包管理器中的 jinja2 模板创建包锁定文件,然后将它们复制到您的机器上。这将花费更长的时间来设置并且容易出错,但允许您维护一个要安装的软件包列表。