如何使 apt-get 在无人值守的 debian 安装中接受来自 Repo 的新配置文件

如何使 apt-get 在无人值守的 debian 安装中接受来自 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.

附加信息:

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

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

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

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

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

答案1

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

apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew install pkgname1 pkgname2 ...

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

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

someuser ALL = NOPASSWD: /usr/bin/apt-get

答案2

您可以尝试以下操作:

export DEBIAN_FRONTEND=noninteractive
apt-get -q -y install whatever-2

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

须藤者(5)关于如何允许无密码sudo调用。

答案3

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

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

除了成为自由用户之外,我们还必须使用此页面上的所有技巧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将被删除。但当然你不使用它,所以你会没事的! ;-)

答案4

或者什么强制检查建议 我建议你将其添加到 APT 设置中,这样你就不需要一直添加这些难以编写的选项。此外,如果您有这些设置,这将有助于无人值守升级。

创建/etc/apt/apt.conf.d/71debconf文件以包含以下内容:

Dpkg::Options {
  "--force-confnew";
};

注意(来自 Geoff):此更改将是全局更改。如果系统上还有其他软件包想要进行无人值守升级但也已手动配置,那么这不是合适的解决方案。

相关内容