24

我正在为我们的仓库中的一个无人值守安装包编写一个脚本,它是一个带有 Debian 标记配置的软件包。是否有任何选项可以传递给 apt-get/aptitude 以便它接受新的配置文件。

基本上我需要一个 apt/aptitude 相当于 dpkg --force-confnew

我需要回答使用 Y 进行 apt-get 安装时提出的以下问题


配置文件`/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 将从 Repo 安装,而我的机器上没有本地 debian

提前感谢大家的帮助!!!!

4

3 回答 3

29

我认为您正在寻找的 apt-get 命令行是

apt-get -o Dpkg::Options::="--force-confnew" install your-package

至于您的 sudo -S 问题,也许尝试在“|”周围添加一些空格 特点。不是,问题如何在不覆盖 TTY 的情况下将密码传递给 su/sudo/ssh?可能有用。

于 2011-11-07T00:43:28.607 回答
12

我尝试了其他答案中的建议,发现尝试安装 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 停止提问(参见手册页)。

于 2014-01-21T11:04:03.903 回答
3

您还可以apt通过创建/etc/apt/apt.conf.d/local和添加来配置:

Dpkg::Options {
   "--force-confdef";
   "--force-confold";
}
于 2017-05-02T16:15:05.327 回答