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


21

我正在为回购中的软件包的无人值守安装编写脚本,它是带有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


Answers:


22

您可以像这样传递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

7

您可以尝试以下方法:

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

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

有关如何允许无密码调用的信息,请参见sudoers(5)sudo


3

或者什么forcefsck建议我建议你,所以你不需要添加这些难以写入选项所有的时间加入到APT设置此。此外,如果您有这些设置,这将对无人参与的升级很有帮助。

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

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

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


这可能是一个不错的选择,但是必须注意,这将是全球性的变化。如果系统上有其他软件包要进行无人值守升级,但也已配置,则这不是合适的解决方案。
杰夫(Geoff)

2

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

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

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

但是,我们之所以停下来,是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将被移除。但是您当然不使用它,所以会没事的!;-)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.