debian 包更新是原子的吗?
Are debian package update atomic?
我想以无人监督的方式更新 ubuntu 盒子。如果更新失败,我将不得不飞到那里手动修复它:P 所以我的问题是:
如果在内核或用户space包更新过程中出现断电,系统会保持一致吗?
示例场景:
- 是否使用 update-grub atomic 更新内核?
- 包 A1 和 B1 依赖于 C1。新版本 A2 和 B2 依赖于 C2 但不依赖于 C1。更新得到 A2 和 C2,然后断电。怎么了?我想这取决于 dpkg 下载后如何应用更新。
跟进:
如果 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-get
或 aptitude
。通常 apt-get/aptitude
首先运行,下载必要的包。下载完成后,dpkg
运行,将这些包安装到系统中。如果系统故障而 apt-get/aptitude
是 运行 则没有问题;你只剩下一些部分下载的包,可以从你离开的地方继续。如果在 dpkg
为 运行 时出现故障,则可能(并且可能会)出现问题,但问题通常也可以使用 dpkg
修复,使用 dpkg --configure
。 dpkg
相当稳健。当然,从来没有任何保证。请记住,系统在升级期间通常会保持运行状态,因此除非出现某些灾难性问题,例如删除重要的系统文件,否则系统通常会保持功能并可修复。即使是 ssh 连接通常在升级期间仍然存在。
注意:以较小的增量执行 updates/upgrades 可能会降低出现问题的可能性。但您的里程可能会有所不同。
更新:张贴者澄清了术语 "unsupervised"。这可能对我的回答没有任何影响,除了您要确保在所有机器上保留日志,以便在出现问题时,您会知道出了什么问题。 Debian 会自动保存 dpkg
和 apt
的日志。它们是 /var/log/dpkg.log
、/var/log/apt/history.log
和 /var/log/apt/term.log
。 term.log
在检查升级是否已成功完成方面可能是最相关的。
我想以无人监督的方式更新 ubuntu 盒子。如果更新失败,我将不得不飞到那里手动修复它:P 所以我的问题是:
如果在内核或用户space包更新过程中出现断电,系统会保持一致吗?
示例场景:
- 是否使用 update-grub atomic 更新内核?
- 包 A1 和 B1 依赖于 C1。新版本 A2 和 B2 依赖于 C2 但不依赖于 C1。更新得到 A2 和 C2,然后断电。怎么了?我想这取决于 dpkg 下载后如何应用更新。
跟进: 如果 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-get
或 aptitude
。通常 apt-get/aptitude
首先运行,下载必要的包。下载完成后,dpkg
运行,将这些包安装到系统中。如果系统故障而 apt-get/aptitude
是 运行 则没有问题;你只剩下一些部分下载的包,可以从你离开的地方继续。如果在 dpkg
为 运行 时出现故障,则可能(并且可能会)出现问题,但问题通常也可以使用 dpkg
修复,使用 dpkg --configure
。 dpkg
相当稳健。当然,从来没有任何保证。请记住,系统在升级期间通常会保持运行状态,因此除非出现某些灾难性问题,例如删除重要的系统文件,否则系统通常会保持功能并可修复。即使是 ssh 连接通常在升级期间仍然存在。
注意:以较小的增量执行 updates/upgrades 可能会降低出现问题的可能性。但您的里程可能会有所不同。
更新:张贴者澄清了术语 "unsupervised"。这可能对我的回答没有任何影响,除了您要确保在所有机器上保留日志,以便在出现问题时,您会知道出了什么问题。 Debian 会自动保存 dpkg
和 apt
的日志。它们是 /var/log/dpkg.log
、/var/log/apt/history.log
和 /var/log/apt/term.log
。 term.log
在检查升级是否已成功完成方面可能是最相关的。