如何防止apt-get / aptitude在安装过程中显示对话框?

我正在尝试构建一个Ansible Playbook来在Linode上部署一些Ubuntu 12.04服务器,但我的问题似乎是Ubuntu服务器。 当我运行apt-get或aptitude的不同组合时,我总是得到以下对话框,我必须回复。

包配置对话框

我希望从命令行回答这个问题,这样它就不会中断自动部署。 有任何想法吗?

我目前的命令如下。 请注意,我正在尝试设置DEBIAN_FRONTEND:

#!/bin/bash echo 'DEBIAN_FRONTEND="noninteractive"' >> /etc/profile echo 'DEBIAN_FRONTEND="noninteractive"' >> ~/.profile source /etc/profile source ~/.profile # This next line is the one that pops up the dialog sudo aptitude -y install iptables-persistent # Need this to fix an issue with the package post-install (this works fine.) sudo sed \ -i 's/\(modprobe -q ip6\?table_filter\)/\1 || true/g' \ /var/lib/dpkg/info/iptables-persistent.postinst; \ sudo aptitude install iptables-persistent 

尝试使用debconf-set-selections在安装包之前设置值:

 echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections 

或者,通过ansible

 - name: prevent the iptables-peristent install dialog debconf: name=iptables-persistent question={{ item }} vtype=boolean value=true with_items: - iptables-persistent/autosave_v4 - iptables-persistent/autosave_v6 - name: install iptables-persistent apt: name=iptables-persistent 

你错过了-q 。 尝试:

 sudo DEBIAN_FRONTEND=noninteractive aptitude install -y -q iptables-persistent 

我认为您应该考虑使用debconf数据库来自动化所有过程。 这是一个非直观的过程,需要大量工作,比如重新打包自己的deb文件,才能使其工作,并被称为“debconf preseeding”

Debian wiki中有几个关于如何执行此操作的示例:

  • 使用DHCP
  • 这适用于安装映像
  • 使用SSH
  • 越来越多 ……

根据时间和情况,您将选择一个(这就是为什么我没有详细说明)。 拿一个似乎有用的东西,并坚持到最后。

如果遇到问题,请提出另一个问题,详细说明您要做的事情,以及您打算如何做。

对@ lorin-hochstein的基于Ansible的非回复安装iptables-persistent的解决方案的小修复/调整,其中任务需要sudo-privilges成功运行(添加become: yes行): ## Prevent iptables-persistent pckgs install dialog (debconf-set-selections) - name: prevent the iptables-peristent install dialog become: yes debconf: name=iptables-persistent question={{ item }} vtype=boolean value=true with_items: - iptables-persistent/autosave_v4 - iptables-persistent/autosave_v6 - name: install iptables-persistent apt: name=iptables-persistent