我可以进行静默或无人值守的版本升级吗?

jdm*_*jdm 44 upgrade release-management

如何升级到新的 Ubuntu 版本而不必对提示做出反应?

我现在在 12.04 并且想安装 12.10。当我开始更新时,它通常会下载一些东西,然后问一个问题,安装一点,问一个问题等等。我把它放在一夜之间,有时发现它几乎没有更新的进展。我想开始这个过程,离开并在几个小时后完成。我可以自动更新 /etc 中的配置文件等等。那么如何开始无人值守升级呢?

jdm*_*jdm 54

以下命令在没有提示的情况下升级到新的稳定版本:

do-release-upgrade -f DistUpgradeViewNonInteractive
Run Code Online (Sandbox Code Playgroud)

以下命令在没有提示的情况下升级到当前的开发版本:

do-release-upgrade -d -f DistUpgradeViewNonInteractive
Run Code Online (Sandbox Code Playgroud)

我还没有测试过它,但它似乎只是在出现问题时执行默认操作。如果脚本挂起时间过长,它也会超时。

dpkg-reconfigure如果您对某些软件包的配置不满意,您可能必须在之后使用,但大多数时候您应该没问题。

来源:http : //awaseroot.wordpress.com/2012/04/29/ubuntu-release-upgrade-fully-automatic-non-interactive-upgrade/。在链接中还有其他方法可以做到这一点。

  • 这不适用于 Trusty => Xenial。仍然有关于修改的 /etc 文件的问题。 (9认同)

Win*_*nix 9

为了确认 Thomas Ward 在他的回答中所说的内容并与接受的答案相矛盾,do-release-upgrade -d -f DistUpgradeViewNonInteractive不起作用。

事实上,在第一个提示时,它破坏了我的 16.04 到 18.04 测试分区,我不得不重新克隆它。这是脚本冻结的地方:

Setting up mount (2.31.1-0.4ubuntu3) ...
Setting up systemd (237-3ubuntu10) ...
Installing new version of config file /etc/pam.d/systemd-user ...
Installing new version of config file /etc/systemd/journald.conf ...

Configuration file '/etc/systemd/logind.conf'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** logind.conf (Y/I/N/O/D/Z) [default=N] ? y

Y
CRASHED... NOTHING HAPPENS NOW... WILL KILL AND RESTART WITHOUT -f OPTION...
Run Code Online (Sandbox Code Playgroud)

由于输入抑制剂,杀死脚本后重启和关机都不起作用。您必须进行冷关机(按住电源按钮约 10 秒)。

谢天谢地,这是 16.04 克隆升级,而不是真正的 16.04 分区。


为了让生活更有趣,我的 NVMe SSD 中添加了一个新的 898 MB 分区,我的常规分区发生了变化:

$ lsdrv
NAME        FSTYPE  LABEL                  MOUNTPOINT          SIZE MODEL

nvme0n1                                                        477G Samsung SSD 960 PRO 512G
??nvme0n1p5 ntfs                                               858M 
??nvme0n1p3                                                     16M 
??nvme0n1p1 ntfs                                               450M 
??nvme0n1p8 ntfs    Shared_WSL+Linux       /mnt/e                9G 
??nvme0n1p6 ext4    Ubuntu18.04                               23.7G 
??nvme0n1p4 ntfs    NVMe_Win10             /mnt/c            390.4G 
??nvme0n1p2 vfat                           /boot/efi            99M 
??nvme0n1p9 swap    Linux Swap             [SWAP]              7.9G 
??nvme0n1p7 ext4    NVMe_Ubuntu_16.0       /                  44.6G 
Run Code Online (Sandbox Code Playgroud)
  • nvme0n1p5 曾经是我的 Ubuntu 16.04 分区所在的地方,但现在它已开启 nvme0n1p7
  • nvme0n1p8 曾经是我的 18.04 测试分区所在的地方,但现在它打开了 nvme0n1p8

注意:我还在今天下午将 Windows 10 从 Build 1709 升级到了 Build 1803,因此它可能nvme0n1p5ntfs格式创建了新的 898 MB分区。


oli*_*ren 6

只是为了扩展以前的答案,这里是如何远程执行与接受的答案相同的操作,使用通过 ssh 进行的无密码升级,这将使您的盒子升级到最新版本。它是从我自己的博客条目中复制而来的

所有这些步骤都假定您的包存储库正在运行。这意味着如果你执行 apt-get update 你不会因为版本过时而看到很多 404。您需要先解决这个问题,因此请参阅此答案

0. 更新所有现有包

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
Run Code Online (Sandbox Code Playgroud)

1.设置无密码执行

将您自己添加到可以使用 sudo 执行 do-release-upgrade 而不输入密码的用户列表中是通过执行来实现的

sudo visudo -f /etc/sudoers.d/do-release-upgrade.
Run Code Online (Sandbox Code Playgroud)

并添加以下行,当然用 my-username 替换您自己的:

my-username ALL=NOPASSWD: /usr/bin/do-release-upgrade
Run Code Online (Sandbox Code Playgroud)

2.开始增量升级

注销并从您的计算机执行以下命令。它将在不提示您输入的情况下进行升级(接受所有默认答案),等待计算机重新启动,然后再次尝试升级。它会一直运行,直到您升级到最新版本。

while true; do 
    ssh my-user@my-server sudo do-release-upgrade -f DistUpgradeViewNonInteractive;
    sleep 120; 
done
Run Code Online (Sandbox Code Playgroud)

3. 修复配置文件到之前的状态

之后,您必须将备份的配置文件移动到它们以前的位置,因为升级过程已将默认配置放在了它们的位置。

对默认答案不满意?

这家伙有办法为每个提示预先准备答案,但缺点是你必须知道有多少个提示......