fra*_*rik 68 apt grub2 amazon-ec2
Per Make apt-get (or aptitude) run with -y 但不提示替换配置文件?
我做了以下事情:
ec2run ami-3c994355 --region us-east-1 -n 1 -t m1.large -z us-east-1d
Run Code Online (Sandbox Code Playgroud)
在机器上:
sudo apt-get update
sudo apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade
Run Code Online (Sandbox Code Playgroud)
我仍然收到提示,询问我想使用哪个配置文件。这些是出现在提示之前的行:
Setting up grub-pc (1.99-21ubuntu3.1) ...
Run Code Online (Sandbox Code Playgroud)
然后:
????????????????????????????????????????????????????????? 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 ?
Run Code Online (Sandbox Code Playgroud)
RAO*_*AOF 104
该/etc/default/grub文件在软件包安装时生成,这是必需的,因为它与 debconf 集成。这意味着它不能被视为 dpkg conf 文件,因此 dpkg 的配置文件处理不知道它。
相反,它使用ucf,一种更复杂的 Debian 工具来处理配置。不幸的是,这不理解 dpkg 选项,因此设置Dpkg::Options::="--force-confdef"无济于事。不过,它确实有自己的方式进行无提示升级,通过UCF_FORCE_CONFFNEW和UCF_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
Run Code Online (Sandbox Code Playgroud)
¹:从技术上讲,软件包可以使用除 debconf 之外的其他提示方法,但这违反 Debian 政策。如果您遇到这样的包,请提交错误。
met*_*ral 21
离开 RAOF 的答案,在花了无数个小时在网上搜索以便能够在 Ubuntu 12.04 上执行完全不干涉的更新和 dist-upgrade 之后,我想出了这个,这要归功于这篇文章(https://bugs) .launchpad.net/ubuntu/+source/grub/+bug/239674/comments/1 ) 指出当您想使用包维护者 grub menu.lst 而不是任何可能的本地菜单时,grub 遵循 UCF 而不是 Dpkg 选项.lst 编辑。
我将 Dpkg force-confnew 选项留在了其他不是 grub 的软件包中。
#!/bin/bash
unset UCF_FORCE_CONFFOLD
export UCF_FORCE_CONFFNEW=YES
ucf --purge /boot/grub/menu.lst
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get -o Dpkg::Options::="--force-confnew" --force-yes -fuy dist-upgrade
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40453 次 |
| 最近记录: |