我可以进行无提示或无人值守版本升级吗?


31

如何在不响应提示的情况下升级到新的Ubuntu版本?

我现在在12.04上,想安装12.10。当我开始更新时,它通常会下载内容,然后问一个问题,安装一点,问一个问题,等等。我将其放置一整夜,有时发现更新几乎没有进展。我只想开始这个过程,走了几个小时就完成了。我可以自动更新/ etc中的配置文件,以此类推。那么如何开始无人值守的升级呢?

Answers:


42

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

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/。在链接中,还有其他方法可以执行此操作。


请避免引用链接中的内容,但也要包括相关信息,以防止在无法访问站点时丢失信息。
k0pernikus 2014年

我这样做了,一切似乎都可以正常工作,但是重新启动后,我只遇到了grub错误,因此您似乎不得不在此无人值守的升级之后添加更多的grub配置。也许与sudo apt-get install grub-emu
rubo77

6
这对于Trusty => Xenial不起作用。仍然会收到有关修改的/ etc文件的问题。
威廉

这不应该与sudo一起运行吗?
塞林

关于修改的/ etc文件的问题,这里有一个很不错的解决方案:awaseroot.wordpress.com/2012/04/29/…。使用'echo“ y \ n \ ny \ ny \ ny \ n”运行命令。在do-release-upgrade前面。它为问题提供了答案。如果/ etc中有很多修改过的文件,请添加很多答案。
nmgeek

6

只是为了扩展先前的答案,这是如何通过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代替您自己的用户名:

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.将配置文件修复为以前的状态

之后,您将必须将备份的配置文件移至其先前的位置,因为升级过程已将默认配置放置在其位置。

对默认答案不满意?

这个人有办法为每个提示预先准备答案,但缺点是您必须知道有多少提示…


5

为了确认托马斯·沃德在回答中陈述的内容并与接受的答案相矛盾,这是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,因此有可能nvme0n1p5ntfs格式创建了新的898 MB 分区。


不过,这很大,因此您应该在启动板中报告它。通过较早的发行版本升级使用了非交互式方式
oligofren

在同一天在同一盒子上升级了Ubuntu和Windows?您必须享受痛苦
JDS

@JDS Windows很烦。1700个升级失踪,从Windows应用商店的各种破碎的依赖Python的2比Python 3下我不得不删除并重新安装的Ubuntu 16.04 感叹
WinEunuuchs2Unix

2

您可以使用在终端上执行此操作sudo apt-get -y upgrade。这将对所有提示回答“是”。但是,它不会自动运行,因此您必须运行它。它应该工作。AFAIK无法使用GUI更新管理器对软件进行无人值守的升级(这与发行版升级不同!

如果您要升级到其他Ubuntu版本(又称为发行版升级,通常是相对于您的Ubuntu版本的发行版中的下一个发行版),则必须手动激活它 。 sudo do-release-upgrade可能有效。但是,没有办法跳过过去的提示。这就是为什么要在出现此类提示时启动升级的原因-会有提示。


1
“虽然没有办法跳过过去的提示”。DistUpgradeViewNonInteractive标志呢?跳过提示。
oligofren

1
@oligofren Thomas是正确的,因为-f DistUpgradeViewNonInteractive标志会导致脚本在第一个(Y/I/N/O/D/Z)提示时锁定。查看我刚刚发布的答案。
WinEunuuchs2Unix

-4

尝试向中添加-y选项,apt-get但知道它将回答y所有查询。


1
我使用的是图形更新管理器,而不是apt-get。我可以在控制台中进行更新,但是我听说'apt-get dist-upgrade'多年来没有工作(要在发行版之间进行升级),所以命令不会是'apt-get'。
jdm

@jdm apt-get dist-upgrade应该可以正常工作。您在这里的地方不再工作了?
赛斯

3
@Seth apt-get dist-upgrade现在并且在任何操作系统中都从未独立执行过版本升级。请参阅man apt-getupgrade仅升级可以升级的软件包,而无需重新安装或卸载任何软件包。dist-upgrade升级软件包,即使这意味着已删除或添加软件包。这主要用于执行常规更新-例如,upgrade不会升级内核。
伊莱亚·卡根

2
更改sources.list为指向下一个版本的存档,然后运行apt-get dist-upgrade如果成功,将执行版本升级。Debian支持此功能,但aptitude dist-upgrade由于更高级的依赖关系解析,建议使用它代替。在Ubuntu中,虽然可能成功,但完全不支持这种功能。而是do-release-upgrade使用在命令行中升级到更高版本。该实用程序没有-y标记,因此该答案不适用于升级到新版本的情况
伊莱亚·卡根

嗯,很有趣。那时我一定在读有关Debian的文章。
赛斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.