我的系统配置脚本执行了apt-get install -y postfix
。不幸的是,当 Postfix 安装程序显示配置屏幕时,脚本会停止。有没有一种方法可以强制 Postfix 在安装期间使用默认值,以便自动脚本可以继续运行到最后?
Postfix 安装程序是否会检查是否存在现有配置/etc/postfix
,如果存在,则不会让配置屏幕打扰用户?
答案1
您可以为此使用预先植入,使用命令debconf-set-selections
在安装软件包之前预先回答 debconf 提出的问题。
例如:
debconf-set-selections <<< "postfix postfix/mailname string your.hostname.com"
debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet Site'"
apt-get install --assume-yes postfix
答案2
如果你希望在全球范围内实现这一点:
dpkg-reconfigure debconf
然后将其配置为“非交互式“
如果您只希望进行单次安装,请运行:
DEBIAN_FRONTEND=noninteractive apt-get install PACKAGE
答案3
当从不提供 here-strings( <<<
) 的 shell 执行时,通过管道传输答案:
echo "postfix postfix/mailname string my.hostname.example" | debconf-set-selections
echo "postfix postfix/main_mailer_type string 'Internet Site'" | debconf-set-selections
DEBIAN_FRONTEND=noninteractive apt-get postfix
答案4
另一种方法是创建一个文件,例如 myconf:
postfix postfix/main_mailer_type select Internet Site
postfix postfix/mailname string your.hostname3.com
然后调用 debconf-set-selections 并将文件作为参数传递:
debconf-set-selections myconf
您也可以像其他答案一样,通过将字符串插入 debconf-set-selections 来执行此操作:
echo "postfix postfix/main_mailer_type select Internet Site" | debconf-set-selections
echo "postfix postfix/mailname string your.hostname3.com" | debconf-set-selections
使用管道方法的一种方式是,如果您想将它们从一台服务器传递到另一台服务器,如手册页中所述,使用debconf-get-selections
以下位置提供的sister 命令debconf-utils
:
debconf-get-selections | ssh anotherserver debconf-set-selections
debconf-set-selections 存储它们的临时文件是:
/var/cache/debconf/config.dat
您可以检查内部,它应该包含您刚刚设置的设置:
Name: postfix/mailname
Template: postfix/mailname
Value: your.hostname3.com
Owners: postfix
Flags: seen
Name: postfix/main_mailer_type
Template: postfix/main_mailer_type
Value: Internet Site
Owners: postfix
Flags: seen
然后只需运行安装程序,就不会有任何提示:
apt install postfix -y
现在如果你卸载 postfix:
apt remove postfix --purge
您会注意到根本没有任何 postfix 设置/var/cache/debconf/config.dat
,所以如果您决定重新安装 postfix,并且之前没有再次运行 debconf-set-selections,您将得到通常的提示。