我正在编写一个脚本,用于无人值守安装我们存储库中的软件包,它是一个带有 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
通过使用dget
against来看到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):此更改将是全局更改。如果系统上还有其他软件包想要进行无人值守升级但也已手动配置,那么这不是合适的解决方案。