debian 包更新是原子的吗?

Are debian package update atomic?

我想以无人监督的方式更新 ubuntu 盒子。如果更新失败,我将不得不飞到那里手动修复它:P 所以我的问题是:

如果在内核或用户space包更新过程中出现断电,系统会保持一致吗?

示例场景:

跟进: 如果 dpkg 不能做到这一点,我有什么选择? docker 之类的东西似乎无法解决这个问题,因为主机 OS 仍然需要更新。谢谢!

添加: 什么是无监督方式:我在各个地方有成千上万个这样的盒子运行。有人可以随时不经意地拔掉插头。对于升级,我的服务器向他们发送 "upgrade to XXX version" 命令。他们自主执行命令。

根据我的经验和 Debian 团队提供的文档,您应该能够依靠 Debian 自动更新稳定的系统。

检查https://www.debian.org/doc/manuals/debian-faq/ch-uptodate.en.html并评估。

如果 aptitude 被杀死,那么您将需要手动 运行

dpkg --configure -a

我不是说它真的安全,但我会说它足够安全。

您可以通过使用一个非常小的系统作为许多 LXC 容器的主机来实现更安全的配置,其中包含您需要升级的大部分软件,从而降低更新主机系统时系统崩溃的风险。

你是什么意思"unsupervised way"?通常是通过 ssh 登录,然后在命令行上远程运行 apt-getaptitude。通常 apt-get/aptitude 首先运行,下载必要的包。下载完成后,dpkg 运行,将这些包安装到系统中。如果系统故障而 apt-get/aptitude 是 运行 则没有问题;你只剩下一些部分下载的包,可以从你离开的地方继续。如果在 dpkg 为 运行 时出现故障,则可能(并且可能会)出现问题,但问题通常也可以使用 dpkg 修复,使用 dpkg --configuredpkg 相当稳健。当然,从来没有任何保证。请记住,系统在升级期间通常会保持运行状态,因此除非出现某些灾难性问题,例如删除重要的系统文件,否则系统通常会保持功能并可修复。即使是 ssh 连接通常在升级期间仍然存在。

注意:以较小的增量执行 updates/upgrades 可能会降低出现问题的可能性。但您的里程可能会有所不同。

更新:张贴者澄清了术语 "unsupervised"。这可能对我的回答没有任何影响,除了您要确保在所有机器上保留日志,以便在出现问题时,您会知道出了什么问题。 Debian 会自动保存 dpkgapt 的日志。它们是 /var/log/dpkg.log/var/log/apt/history.log/var/log/apt/term.logterm.log 在检查升级是否已成功完成方面可能是最相关的。