如何升级到新的 Ubuntu 版本而无需对提示做出反应?
我现在使用的是 12.04,想安装 12.10。当我开始更新时,它通常会下载一些东西,然后询问问题,安装一些内容,询问问题等。我把它放了一夜,有时发现它几乎没有更新进度。我想直接启动这个过程,然后离开,几个小时后它就会完成。我同意它自动更新 /etc 中的配置文件等等。那么如何开始无人值守升级呢?
答案1
以下命令无需提示即可升级到新的稳定版本:
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/。链接中还有其他方法可以做到这一点。
答案2
确认托马斯·沃德 (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...
由于输入抑制,终止脚本后重启和关机均不起作用。您必须进行冷关机(按住电源按钮约 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,因此它有可能nvme0n1p5
在ntfs
格式上创建了新的 898 MB 分区。
答案3
只是为了扩展以前的答案,这里是如何远程执行与接受的答案相同的操作,使用 ssh 上的无密码升级,将您的盒子升级到最新版本。它是复制的我自己的博客条目。
所有这些步骤都假设您的软件包存储库正在运行。这意味着如果您执行 apt-get update,您不会因为版本过时而出现大量 404。您需要先修复这个问题,所以参见此答案为了那个原因。
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 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. 将配置文件恢复到之前的状态
之后,您必须将备份的配置文件移至其之前的位置,因为升级过程已将默认配置放在了其位置。
对默认答案不满意?
这家伙有办法预先准备答案对于每个提示,但缺点是你必须知道有多少个提示……
答案4
尝试添加-y
选项apt-get
但要知道它将回答y
所有查询。