我一直在尝试抑制有关修改配置文件和冲突的交互式对话框。我浏览了所有的搜索结果,每个人都在不停地复制和粘贴完全相同的答案而不提供额外的背景信息。
我找到的解决方案是放入一个/etc/apt/apt.conf.d
包含复制粘贴好的项目的配置文件:
Dpkg::Options {
"--force-confdef";
"--force-confold";
}
我已经包括APT::Get::Assume-Yes "true";
了这绝对有效。我已经apt-config
确认Dpkg::Options
是正在加载。但每次我尝试DEBIAN_FRONTEND=noninteractive sudo apt upgrade
使用此配置时,交互式对话框都会停止我的自动脚本。
除了复制粘贴,还有人能提供更多有关此配置失败的原因吗?为什么这些设置会被忽略?
重现我的困境:
- 在 Lightsail 上创建新的 Ubuntu 20.04 实例
- 添加
/etc/apt/apt.conf.d/99confold
包含上述设置 /etc/cloud/cloud.cfg
以某种方式修改sudo apt update
然后sudo apt upgrade
更新结束时仍会出现冲突对话框。
答案1
有几个原因可能导致您在 /etc/apt/apt.conf.d 文件中指定的 Dpkg::Options 设置被忽略:
您可能正在使用不支持 Dpkg::Options 设置的 apt 版本。Dpkg::Options 设置在 apt 版本 1.1.0 中引入,因此如果您使用的是旧版本,则此设置将被忽略。
Dpkg::Options 设置可能会被另一个配置文件中的设置覆盖。apt 从多个位置读取配置文件,后面文件中的设置可以覆盖前面的设置。例如,如果您有一个文件 /etc/apt/apt.conf.d/99force-confold,其中包含行 Dpkg::Options {"--force-confnew"};,则此设置将覆盖您在之前的配置文件中指定的 --force-confold 设置。
Dpkg::Options 设置可能不适用于您正在执行的特定软件包或操作。Dpkg::Options 设置会影响 dpkg 在安装或升级软件包时处理配置文件的方式,但可能不适用于其他操作,例如删除软件包或更新软件包缓存。
如果您使用的是较新版本的 apt,并且 Dpkg::Options 设置未被其他配置文件覆盖,则 --force-confold 选项可能不适用于您尝试执行的操作。您可以尝试指定 --force-confdef 选项,这会强制 dpkg 使用任何修改过的配置文件的默认版本。
还值得注意的是,DEBIAN_FRONTEND=noninteractive 设置不会在使用 apt 时抑制所有交互式提示。它只会抑制与 debconf 系统特别相关的提示,该系统用于在安装某些软件包期间询问问题和设置配置选项。如果您看到与 debconf 无关的交互式提示,此设置不会抑制它。