如何在没有grub配置提示的情况下apt-get -y dist-upgrade?

Modified on: Fri, 08 Jun 2018 23:42:53 +0800

Per 使用-y运行apt-get(或aptitude)但不提示更换配置文件?

我做了以下事情:

ec2run ami-3c994355 --region us-east-1 -n 1 -t m1.large -z us-east-1d

在机器上:

sudo apt-get update
sudo apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

我仍然会收到提示,询问我要使用哪个配置文件。这些是提示之前的行:

Setting up grub-pc (1.99-21ubuntu3.1) ...

然后:

                         ┌───────────────────────────────────────────────────────┤ Configuring grub-pc ├───────────────────────────────────────────────────────┐                              
                         │ A new version of configuration file /etc/default/grub is available, but the version installed currently has been locally modified.  │                              
                         │                                                                                                                                     │                              
                         │ What do you want to do about modified configuration file grub?                                                                      │                              
                         │                                                                                                                                     │                              
                         │                                     install the package maintainer's version                                                        │                              
作者:Community,fratrik

最佳答案

/etc/default/grub文件是在软件包安装时生成的,这是必要的,因为它与debconf集成在一起。这意味着它不能被视为dpkg conf文件,因此dpkg的配置文件处理不知道它。

相反,它使用ucf,这是一个更复杂的Debian工具,用于处理配置。遗憾的是,这不了解dpkg选项,因此设置Dpkg::Options::="--force-confdef"将无济于事。不过,它确实有自己的方式进行无提示升级,通过UCF_FORCE_CONFFNEWUCF_FORCE_CONFFOLD环境变量。

ucf使用debconf进行提示,因此将debconf接口设置为noninteractive也会使消息静音。如果你真的想要非交互式更新,你无论如何都需要这样做 - 任意软件包可能会询问debconf问题(虽然它们通常不会在升级期间)。

您可以通过将DEBIAN_FRONTEND=noninteractive添加到您的环境中来将debconf接口设置为一次性,或者可以通过运行dpkg-reconfigure debconf并选择它来永久设置它非交互式前端。如果您正在使用非交互式前端,您将获得包可能会提出的任何问题的默认答案。

对于ucf,默认答案是“保留现有文件”。

因此,执行真正的100%保证¹无提示更新的完整命令将是。

sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

¹:从技术上讲,软件包可以使用另一种提示方法而不是debconf,但这违反了Debian政策。如果您遇到这样的包,请提交错误。

作者:,RAOF

相关问答

添加新评论