我有几十个 Debian 盒子,我想以确定的方式保持最新状态,并遵循Engineering => Pre-Prod => Prod
确定性的登台过程的常规操作。
对我来说,理想的世界是手头有某种“补丁级别 ID”,就像2022-01-10.e28de15cc1
能够说一样apt upgrade --to 2022-01-10.e28de15cc1
,但我还没有找到任何类似的东西。
我可能可以在升级第一个盒子后对输出进行哈希处理apt list --installed
并模拟这个概念,但我真的很想知道为什么没有人这样做,我保持企鹅整洁的思维模型是否完全偏离了这里?
答案1
据我所知,apt
存储库没有global ID
引用所有软件包的特定版本号。您可以创建一个软件包版本列表,将其分发到所有服务器,并创建一个脚本来获取这些特定版本。但这样的脚本“容易出错”,如果该特定版本已从目录中删除,您就会遇到麻烦存储库。
实现此目的的最简单方法可能是设置自己的存储库(或者三个,如果你想继续工程/前期制作/产品您可以在不同的级别上更新多个服务器(例如,服务器名称、服务器类型和服务器版本),每当您想要更新时,都必须先更新第一个服务器repo server
,然后再更新连接的服务器......
答案2
我怀疑在实践中,大多数人并不需要“所有”软件包都达到精确/“确定性”的升级水平。他们需要一些关键的因素以及实现这一目标的工具都已存在。
也就是说,对 apt list --installed 的输出进行散列可能是“正确”的第一步。
对于“本地”/测试用途,apt 将允许您安装特定版本并且apt-get install packagename=version
您可以拿着包裹。当有大量系统时,这可能不是正确的方法
虽然我(模糊地)记得传统的 unix 和其他操作系统都有补丁级别,但随着互联网和分布式软件开发的发展,这变得不那么有意义了。工具做然而,对于一个人来说,建立一个确定性系统是存在的。
正确的方法是使用配置管理工具,然后使用它为该角色安装特定版本的软件。Ansible例如,将会这样做。