Ubuntu debian包更新是原子的吗?

Ubuntu debian包更新是原子的吗?,ubuntu,debian,dpkg,Ubuntu,Debian,Dpkg,我想以一种无监督的方式更新ubuntu盒。如果更新失败,我将不得不飞到那里手动修复:P所以我的问题是: 如果在内核或用户空间包更新中间有断电,系统会保持一致吗? 示例场景: 是否使用update grub atomic更新内核 包装A1和B1取决于C1。新版本A2和B2依赖于C2,而不是C1。更新得到A2和C2,然后断电。会发生什么?我想这取决于下载后dpkg如何应用更新 后续行动: 如果dpkg不能做到这一点,我有什么选择?docker之类的东西似乎无法解决这个问题,因为主机操作系统仍然需

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

如果在内核或用户空间包更新中间有断电,系统会保持一致吗? 示例场景:

  • 是否使用update grub atomic更新内核
  • 包装A1和B1取决于C1。新版本A2和B2依赖于C2,而不是C1。更新得到A2和C2,然后断电。会发生什么?我想这取决于下载后dpkg如何应用更新
后续行动: 如果dpkg不能做到这一点,我有什么选择?docker之类的东西似乎无法解决这个问题,因为主机操作系统仍然需要更新。谢谢

增加:
什么是无监督的方式:我有数千个这样的盒子在不同的地方运行。有人可能随时不经意地拔掉插头。对于升级,我的服务器向他们发送“升级到XXX版本”命令。它们自动执行命令

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

检查和评估

如果天赋被杀死,你需要手动运行

dpkg --configure -a
我不是说它真的安全,但我想说它足够安全了

您可以通过将一个非常小的系统作为主机安装到许多LXC容器中来实现更安全的配置,这些容器包含您需要升级的大多数软件,因此可以降低更新主机系统时系统崩溃的风险。

您所说的“无监督方式”是什么意思?通常通过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
在检查升级是否成功完成方面可能是最相关的。

不,甚至不能保证系统在更新后会启动。@hek2mgl。。。我也不认为这是Debian所特有的。也许有一些发行版不是这样的,但我认为这对绝大多数发行版都是正确的…@twalberg如果能够提供这种级别的稳定性,Debian只会实现它!)我以为这只是一个折衷?大多数用户不需要这种保证。但从理论上讲,您可以始终拥有两个副本,然后自动创建一个新的配置文件,指定每个升级包的新版本。正在运行的进程会在重新启动后拾取更改。如果在不同的位置有数千个,则会有冗余。如果你希望有人拔插头,那就更糟。你已经有了冗余,这就是你的安全网。谢谢你的链接。然而,医生说“请注意,dpkg将在适当的位置安装升级文件,即使是在运行的系统上。”所以我不确定这是否能经受住断电。我从来没有遇到过问题,我经受住了断电和系统崩溃。我在主要版本升级方面遇到了问题,特别是缺少固件和主要更改,如udev或测试/不稳定的风格。请将read the STABLE作为当前的STABLE或旧的STABLE Debian版本。使用LXC容器封装复杂性将使更新主机的任务更快、更可靠。占地面积较小将使主机系统升级更简单、更快。如果你的容器崩溃了,你只需要访问主机就可以修复它。将主机和LXC的复杂性分开,并分别升级。谢谢Faheem。我更新了关于无监督方式的问题。但不管怎样,你的帖子似乎回答了我的问题。