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? ?
? ? …Run Code Online (Sandbox Code Playgroud) 有
apt-get -o Dpkg::Options::="--force-confnew"
Run Code Online (Sandbox Code Playgroud)
和
apt-get -o Dpkg::Options::="--force-confold"
Run Code Online (Sandbox Code Playgroud)
还有很多。
如何获取所有列表Dpkg::Options及其当前设置的值?
我正在维护一个 debian 包,其中包含一些安装在/etc/. 有没有一种方法可以让我--purge在用户执行常规操作时以某种方式使包始终自动自动运行apt-get remove mypackage?
原因是我在 /etc 中有一些配置文件,当二进制文件被删除时,这些文件应该被删除,否则会导致奇怪的行为。但是我仍然想将它们视为 conf 文件,即确保 apt 不会在每次升级包时擦除它们。但是当卸载包时它们应该被删除。
目前我正在我的 postrm 脚本中手动删除 /etc conf 文件。但是我刚刚发现这有一个不幸的副作用:如果用户卸载然后重新安装软件包,则不会重新安装 conf 文件,因为 apt 认为它们仍然存在。那么有没有一种方法可以在我的 postrm 中手动触发一个完整的“清除”,这样 apt 就知道 conf 文件已经消失了?
我发现了这个问题并且我的脚本基本上有同样的问题。
但!我不是用 packer 运行它,而是用一个简单的脚本:
DEBIAN_FRONTEND=noninteractive sudo apt-get update
DEBIAN_FRONTEND=noninteractive sudo dpkg --configure -aq
DEBIAN_FRONTEND=noninteractive sudo apt-get upgrade -yq --force-yes
DEBIAN_FRONTEND=noninteractive sudo apt-get dist-upgrade -yq --force-yes
Run Code Online (Sandbox Code Playgroud)
...和其他东西。
该脚本确实在 1404 上工作,但是对于 1604 Xenial 和 1804 Bionic,我遇到了问题,即对话框提示想要在脚本中打开并且不会自行继续。这是因为我无法在工作站上使用键盘输入进行响应。
在我看来,这个解决方案对于 GRUB 来说似乎风险太大,但我需要自动化,因为我无法手动更新数百台服务器。
我认为这是所有“新”1604 和 1804 机器的问题。
有人知道解决方案吗?
更新:我尝试了这个接受的答案解决方案,它给了我以下错误:
E: Invalid operation Dpkg::Options::=--force-confdef
Run Code Online (Sandbox Code Playgroud) 关于我提出的前一个问题(使用 -y 运行 apt-get(或 aptitude)但不提示替换配置文件?)我遇到了一个有点奇怪且难以解释的行为。也许有人仍然可以解释它。
当我debootstap在目标内部之后立即执行以下命令时chroot,包mercurial似乎需要比看起来更合理的更多内容:
apt-get -s -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install mercurial
Reading package lists...
Building dependency tree...
The following extra packages will be installed:
ca-certificates fontconfig-config fonts-dejavu-core libdrm-intel1
libdrm-nouveau2 libdrm-radeon1 libelf1 libfontconfig1 libfontenc1
libfreetype6 libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libice6
libllvm3.4 libpciaccess0 libsm6 libtcl8.6 libtk8.6 libtxc-dxtn-s2tc0
libutempter0 libx11-6 libx11-data libx11-xcb1 libxau6 libxaw7 libxcb-dri2-0
libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-shape0 libxcb-sync1 libxcb1
libxcomposite1 libxdamage1 libxdmcp6 libxext6 libxfixes3 libxft2 libxi6
libxinerama1 libxmu6 libxmuu1 libxpm4 …Run Code Online (Sandbox Code Playgroud)