如何让 apt-get 从 Repo 无人值守的安装 debian 中接受新的配置文件

Ram*_*man 27 aptitude apt software-installation

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

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

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


配置文件``/opt/application/conf/XXX.conf`'

==> File on system created by you or by a script.
==> File also in package provided by package maintainer.

What would you like to do about it ?  Your options are:
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 

The default action is to keep your current version.
Run Code Online (Sandbox Code Playgroud)

附加信息:

另外,我sudo在管道中传递密码来执行命令

echo "mysudopass"|sudo -S apt-get mypackage
Run Code Online (Sandbox Code Playgroud)

当安装处于配置交互阶段时,这会标记安装错误。

我使用的是 Ubuntu 10.04
apt 版本:apt 0.7.25.3

为什么我不能使用dpkg:这些 Debian 是从 Repo 安装的,我的机器上没有本地 Debian

for*_*sck 27

你可以像这样传递dpkg参数apt-get

apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew install pkgname1 pkgname2 ...
Run Code Online (Sandbox Code Playgroud)

随着--force-confdef如果旧的配置文件仍然存在,他们不会得到重写。所以你可能不会使用它,我只是为其他人记录它。

sudo如果您否定用户的身份验证选项或NOPASSWD在特定条目中添加标签,则不会要求输入密码。例如

someuser ALL = NOPASSWD: /usr/bin/apt-get
Run Code Online (Sandbox Code Playgroud)


sr_*_*sr_ 8

您可以尝试以下操作:

export DEBIAN_FRONTEND=noninteractive
apt-get -q -y install whatever-2
Run Code Online (Sandbox Code Playgroud)

但请注意,这会产生一些影响,例如空的默认密码(也许您想要一些部署/配置工具,例如 puppet、chef、fabric...?)。

请参阅sudoers(5)了解如何允许无密码sudo调用。


Pet*_*rch 5

除了其他答案之外,您可能还必须设置环境UCF_FORCE_CONFFNEW=1

例如,debianstretch 中的 openssh 使用 ucf(而不是 debconf)来openssh-server/openssh-7.4p1/debian/openssh-server.postinst询问配置文件。openssh-server.postinst(您可以通过使用http://security.debian.org/debian-security/pool/updates/main/o/openssh/openssh_7.4p1-10+deb9u4.dscdget来查看)

除了成为debconf 预置的自由用户之外,我们还必须使用此页面上的所有技巧。

然而,我们确实停下来了,export DEBIAN_FRONTEND=noninteractive因为我们想知道我们是否错过了一些东西(这可能很重要)。我们的用例是操作员开始操作。升级预计是非交互式的,但如果出现问题并且会出现对话框,则操作员会在场。您的情况可能有所不同。

但这export DEBIAN_FRONTEND=noninteractive是你众所周知的大锤。

请注意:设置-o Dpkg::Options::=--force-confnew和/或UCF_FORCE_CONFFNEW=1意味着已安装软件包中的所有配置文件都将恢复为上游配置文件。例如,在 的情况下openssh-server,您的/etc/ssh/sshd_config设置将被重置为出厂设置。例如PermitRootLogin=yes将被删除。但当然你不使用它,所以你会没事的!;-)