在Ubuntu上强制apt-get版本连续性

我如何确保当我在不同的时间在两台不同的服务器上运行apt-get update,apt-get upgrade,我将获得相同的软件包? 我如何autotmate /执行此?

我目前正在看的(简化)用例是如果我升级到开发实例上的最新版本,并testing所有我的自定义软件,这需要一天或2。当我运行更新/升级生产机器,我只想升级到我以前testing过的版本。 这可以让我build立一个过程,比我目前更快,更安全地迭代更新的补丁。

理想情况下,我喜欢为第一次升级获取时间戳,然后在后续升级时强制更新该时间戳。 (但任何其他build议将是伟大的)

我考虑过调查一些选项,但我不确定他们是否有前途,他们需要一些工程时间,并且很好奇是否有一个更简单的方法来做到这一点。

1)创buildcaching版本的某种本地apt回购。 该回购可以拉第一次拉的所有最新版本,然后只有当随后查询返回。

2)看到像ansible / chef这样的configurationpipe理工具是否可以捕获在第一次拉取时更新的所有版本,然后强制第二次拉取那些确切的版本。

谢谢。

你需要使用apt-mirror或aptly这样的工具来运行你自己的apt库。 使用像apt-mirror这样的简单工具,您可以在更新开发环境之前同步您的资源库,并在更新生产环境之前不要再同步它。 使用像aptly这样更复杂的工具,您可以实现更复杂的包stream。

  1. 清除/var/cache/apt/archives/ 。 不是绝对必要的,但在未来的步骤中节省空间和时间的复制。
  2. 在目标系统上,使用-d (仅下载)执行更新以下载软件包而不应用它们。
  3. 在环境升级之前将这些文件复制到/var/cache/apt/archives/
  4. 使用--no-download运行所有系统上的更新,强制系统使用升级候选。

免责声明:我没有自己testing过,但这与我在自己的生产环境中使用yum方式类似,以避免计划外的频道更新出现问题。

sciurus提到的本地镜像方法会更好,除非您不能完全控制本地镜像,并且要确保在集群修补程序之间不会发生同步。