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

如何防止 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

答案1

尝试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

答案2

您错过了-q。请尝试:

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

答案3

我认为你应该考虑做一个 debconf 数据库来自动化所有过程。这是一个非直观的过程,需要做很多工作,比如重新打包你自己的 deb 文件,才能让它工作,它被称为“debconf 预置”

有几个例子Debian 维基关于如何做到这一点:

根据时间和情况,你可以选择一个(这就是我没有详细说明的原因)。选择一个看起来有用的,并坚持到底。

如果遇到问题,请提出另一个问题,详细说明您正在尝试做什么以及您计划如何去做。

答案4

如果构建 Docker 映像:

RUN echo iptables-persistent iptables-persistent/autosave_v4 boolean true | debconf-set-selections \
  && echo iptables-persistent iptables-persistent/autosave_v6 boolean true | debconf-set-selections
RUN apt-get install -y iptables-persistent

相关内容