问题描述
如何在不响应提示的情况下升级到新的Ubuntu版本?
我现在在12.04上,想安装12.10。当我开始更新时,它通常会下载内容,然后问一个问题,安装一点,问一个问题,等等。我将其放置一夜,有时发现更新几乎没有进展。我只想开始这个过程,走了几个小时就完成了。我可以自动更新/etc中的配置文件,以此类推。那么如何开始无人值守的升级呢?
最佳思路
以下命令将升级到没有提示的新稳定版本:
do-release-upgrade -f DistUpgradeViewNonInteractive
以下命令在没有提示的情况下升级到当前开发版本:
do-release-upgrade -d -f DistUpgradeViewNonInteractive
我没有测试过,但是似乎出现问题时它只是执行默认操作。如果脚本挂得太久,它也会使脚本超时。
如果您对某些程序包的配置不满意,则以后可能必须使用dpkg-reconfigure
,但是大多数时候您应该没问题。
资料来源:http://awaseroot.wordpress.com/2012/04/29/ubuntu-release-upgrade-fully-automatic-non-interactive-upgrade/。在链接中,还有其他方法可以执行此操作。
次佳思路
只是为了扩展先前的答案,这是如何通过ssh使用无密码升级来远程执行与接受的答案相同的操作,这将使您的设备升级到最新版本。它是从my own blog entry复制的。
所有这些步骤都假定您的软件包存储库正在运行。这意味着,如果您执行apt-get更新,则由于版本过旧,因此不会显示很多404。您需要首先解决该问题,因此需要see this answer。
0.更新所有现有软件包
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
1.设置无密码执行
通过执行以下操作即可将自己添加到可以使用sudo执行do-release-upgrade的用户列表中
sudo visudo -f /etc/sudoers.d/do-release-upgrade.
并添加以下行,当然用my-username代替您自己的:
my-username ALL=NOPASSWD: /usr/bin/do-release-upgrade
2.开始增量升级
注销并从计算机执行以下命令。它将执行升级,而不会提示您输入(接受所有默认答案),等待计算机重新启动,然后再次尝试升级。它会一直运行,直到您升级到最新版本。
while true; do
ssh my-user@my-server sudo do-release-upgrade -f DistUpgradeViewNonInteractive;
sleep 120;
done
3.将配置文件修复为以前的状态
之后,您将必须将备份的配置文件移至其先前的位置,因为升级过程已将默认配置放置在其位置。
对默认答案不满意?
每个提示都有This guy has a way to pre-prepare answers,但缺点是您必须知道有多少个提示……
第三种思路
为了确认托马斯·沃德在回答中陈述的内容并与接受的答案相矛盾,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...
由于输入抑制器的原因,杀死脚本后重新启动或关闭都不会起作用。您必须进行冷关机(按住电源按钮约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
-
nvme0n1p5
曾经是我的Ubuntu 16.04分区所在的位置,但现在位于nvme0n1p7
上 -
nvme0n1p8
曾经是我的18.04测试分区所在的位置,但现在它位于nvme0n1p8
上
注意:我今天下午也将Windows 10从Build 1709升级到Build 1803,因此有可能以ntfs
格式创建了新的898 MB nvme0n1p5
分区。