Làm cách nào tôi có thể ngăn apt-get / aptitude hiển thị các hộp thoại trong khi cài đặt?


28

Tôi đang cố gắng xây dựng một Playbook Ansible để triển khai một số máy chủ Ubuntu 12.04 trên Linode, nhưng vấn đề của tôi dường như là một Ubuntu. Khi tôi chạy các kết hợp khác nhau của apt-get hoặc aptitude, tôi luôn nhận được hộp thoại sau mà tôi phải trả lời.

Hộp thoại cấu hình gói

Tôi muốn điều này được trả lời từ dòng lệnh để nó không làm gián đoạn việc triển khai tự động. Có ý kiến ​​gì không?

Các lệnh hiện tại của tôi ở bên dưới. Lưu ý rằng tôi đang cố gắng đặt 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

Câu trả lời:


34

Hãy thử sử dụng debconf-set-selectionsđể đặt giá trị trước khi cài đặt gói:

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

Hoặc, thông qua 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

@Braiam Tôi đã thêm sudo
Lorin Hochstein

Bạn có thể muốn thêm iptables-kiên trì iptables-persistent/autosave_v4 boolean truequá.
Braiam

@Braiam Đã thêm v4
Lorin Hochstein

0

Bạn đã bỏ lỡ -q. Thử:

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

1
Điều đó đã không hoạt động vào ngày 12.04 :( Tôi đã phải thực hiện việc sửa lỗi khác, vì vậy tôi tự hỏi liệu gói đó có bỏ qua biến môi trường không.
Brian Lyttle

1
Tôi đã thử nghiệm điều này trong một vm máy tính để bàn 12.04 trước khi đăng. Vì vậy, có lẽ nó liên quan đến máy chủ 12.04 của bạn?
Germar

Debian hiển thị cùng một thông điệp ...
Braiam

0

Tôi nghĩ bạn nên xem xét việc thực hiện một cơ sở dữ liệu gỡ lỗi để tự động hóa tất cả quy trình. Đây là một quá trình không trực quan và đòi hỏi nhiều công việc, như đóng gói lại các tệp deb của riêng bạn, để làm cho nó hoạt động và được gọi là "gỡ lỗi trước" .

Có một số ví dụ trong wiki Debian về cách thực hiện việc này:

Tùy thuộc vào thời gian và hoàn cảnh bạn sẽ chọn một (đó là lý do tại sao tôi không đi sâu vào chi tiết). Lấy một cái có vẻ hữu ích, và gắn bó với nó cho đến cuối cùng.

Nếu bạn gặp vấn đề, hãy hỏi một câu hỏi khác nêu chi tiết những gì bạn đang cố gắng làm và cách bạn dự định thực hiện nó.


0

Sửa chữa / điều chỉnh nhỏ cho câu trả lời dựa trên Ansible của @ lorin-hochstein để cài đặt iptables không tương tác - trong đó tác vụ yêu cầu sudo-privateilges chạy thành công (thêm become: yesdòng): ## 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


0

Nếu xây dựng hình ảnh 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.