我想以无人监督的方式更新 ubuntu 盒子。如果更新失败,我将不得不飞往那里手动修复它:P所以我的问题是:
如果在内核或用户空间包更新过程中发生断电,系统会保持一致吗?
示例场景:
- 是否使用 update-grubatomic 更新内核?
- 包 A1 和 B1 依赖于 C1。新版本A2和B2依赖于C2,但不依赖于C1。更新了A2和C2然后就断电了。会发生什么?我想这取决于 dpkg 下载后如何应用更新。
跟进: 如果 dpkg 无法实现这一点,我有什么选择?像 docker 这样的东西似乎并不能解决这个问题,因为主机操作系统仍然需要更新。谢谢!
添加: 什么是无监督方式:我有数千个这样的盒子在不同的地方运行。有人可能随时不经意地拔掉插头。对于升级,我的服务器向他们发送“升级到 XXX 版本”命令。他们自主执行命令。
最佳答案
“无监督方式”是什么意思?通常通过 ssh 登录,然后在命令行上远程运行 apt-get
或 aptitude
。通常 apt-get/aptitude 首先运行,下载必要的包。下载完成后,dpkg
运行,将这些软件包安装到系统中。如果 apt-get/aptitude 运行时出现系统故障,也没有问题;您只剩下一些部分下载的软件包,可以从上次中断的地方继续。如果 dpkg
运行时出现故障,则可能会出现(也可能会出现)问题,但该问题通常也可以通过 dpkg
修复,使用以下选项dpkg --configure
。 dpkg
相当强大。当然,永远没有任何保证。请记住,系统在升级过程中通常会保持运行状态,因此除非出现一些灾难性问题(例如删除重要的系统文件),否则系统通常会保持功能并可修复。即使是 ssh 连接通常也会在升级过程中持续存在。
注意:以小增量进行更新/升级可能会降低出现问题的可能性。但您的里程可能会有所不同。
更新:发帖者澄清了“无监督”一词。这可能对我的答案没有任何影响,除了您需要确保在所有计算机上保留日志,以便在出现问题时,您会知道出了什么问题。 Debian 自动保存 dpkg
和 apt
日志。它们是 /var/log/dpkg.log
、/var/log/apt/history.log
和 /var/log/apt/term.log
。 term.log
可能是检查升级是否成功完成的最相关的。
关于ubuntu - debian 软件包更新是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28680501/