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

Bri*_*tle 29 aptitude iptables apt debconf

我正在尝试构建 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
Run Code Online (Sandbox Code Playgroud)

Lor*_*ein 36

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
Run Code Online (Sandbox Code Playgroud)

或者,通过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
Run Code Online (Sandbox Code Playgroud)


Ger*_*mar 0

你错过了-q。尝试:

sudo DEBIAN_FRONTEND=noninteractive aptitude install -y -q iptables-persistent
Run Code Online (Sandbox Code Playgroud)


Bra*_*iam 0

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

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

根据时间和情况,您将选择一个(这就是为什么我没有详细介绍)。选择一个看起来有用的,并坚持到最后。

如果您遇到问题,请提出另一个问题,详细说明您想要做什么以及计划如何做。