如何在Debian的非交互式安装中使apt-get接受新的配置文件来自存储库

25
我正在编写一个脚本,用于无人值守安装我们存储库中的软件包,其中有一个Debian标记的配置文件。我想知道是否有任何选项可以传递给apt-get/aptitude,以便接受新的配置文件。基本上,我需要一个dpkg --force-confnew 的 apt/aptitude 等效命令。
我需要回答在apt-get安装时提出的以下问题,并选择 Y:
配置文件`/opt/application/conf/XXX.conf`
==> 该文件是由您或脚本创建的。
==> 文件也在包维护者提供的软件包中。
关于此文件,您想要执行什么操作?您的选项是:
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     : background this process to examine the 
默认操作是保留您当前的版本。

其他信息:

另外,我正在通过管道传递sudo密码以执行命令

echo "mysudopass"|sudo -S apt-get mypackage

当安装处于配置交互阶段时,这会导致安装出现错误。

我使用的是Ubuntu 10.04,apt版本为apt 0.7.25.3

为什么我不能使用dpkg: 这些Debian软件包需要从仓库中安装,而我在本地机器上没有Debian软件包

非常感谢您们提前的帮助!!!


http://serverfault.com/questions/48724/100-non-interactive-debian-dist-upgrade - Alastair Irvine
3个回答

30

2
我必须添加-y。apt-get -o Dpkg::Options::="--force-confnew" install -y your-package - flapjack

11

我尝试了其他答案中的建议,发现在安装localepurge软件包时这还不够。

在使用debconf-set-selections设置所需内容后,我需要使用以下命令:

DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confnew" install localepurge

只有设置DEBIAN_FRONTEND环境变量为非交互式,我才能强制localepurge执行我要求的操作。其他软件包可能也适用此方法。

当然,你可以在脚本中导出该变量,但需要注意它可能会影响其他软件包。例如:

#!/bin/sh
export DEBIAN_FRONTEND=noninteractive
apt-get -o Dpkg::Options::="--force-confnew" install -y localepurge foo bar

-y 选项告诉 apt-get 停止询问(请参阅手册页)。


3
您还可以通过创建 /etc/apt/apt.conf.d/local 并添加以下内容,配置 apt 来执行该操作:
Dpkg::Options {
   "--force-confdef";
   "--force-confold";
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接