如何确保当我在不同时间在两台不同的服务器上运行 apt-get update、apt-get upgrade 时,我将获得相同的软件包?如何自动执行/强制执行此操作?
我目前正在研究的(简化)用例是,如果我在开发实例上将所有内容升级到最新版本,并针对它测试我的所有自定义软件,这可能需要一两天的时间。当我在生产机器上运行更新/升级时,我只想升级到我之前测试过的版本。这将允许我构建一个流程来比现在更快、更安全地迭代更新的补丁。
理想情况下,我喜欢为第一次升级设置一个时间戳,然后在后续升级中强制执行到该时间戳的更新。(但任何其他建议都很好)
我已经考虑调查一些选项,但我不确定它们是否有希望,并且需要一些工程时间,并且很好奇是否有更简单的方法来做到这一点。
1) 创建某种本地 apt 存储库,同时缓存两个版本。该存储库可以在第一次提取时提取所有最新版本,然后在后续查询时仅返回这些版本。
2)查看像 ansible/chef 这样的配置管理工具是否可以捕获第一次拉取时更新的所有版本,然后强制第二次拉取这些精确的版本。
谢谢。
答案1
答案2
- 清除
/var/cache/apt/archives/
。不是绝对必要的,但可以节省后续步骤中的复制空间和时间。 - 在目标系统上,使用(仅下载)执行更新
-d
以下载软件包而不应用它们。 - 将这些文件复制到
/var/cache/apt/archives/
环境升级前的晚上。 - 在所有使用的系统上运行更新
--no-download
,强制系统使用您的升级候选项。
免责声明:我自己没有测试过这个,但这类似于我yum
在自己的生产环境中使用的方法,以避免计划外的频道更新出现问题。
除非您无法完全控制本地镜像并希望确保集群补丁之间不会发生同步,否则 sciurus 提到的本地镜像方法会更好。