Biến môi trường DEBIAN_FRONTEND


22

Nhà cung cấp dịch vụ lưu trữ tiềm năng của tôi đề nghị chạy một lệnh trong thiết bị đầu cuối để làm cho hình ảnh hệ điều hành của máy chủ KVM trở nên tối thiểu. Vì các mẫu KVM của họ đi kèm với các gói tôi sẽ không cần, tôi nghĩ rằng tôi có thể sử dụng lệnh tương tự để loại bỏ các gói không mong muốn.

Lệnh đó bắt đầu bằng DEBIAN_FRONTEND=noninteractive, sau đó gọi apt-get removenhư sau:

DEBIAN_FRONTEND=noninteractive apt-get remove --purge -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" package-1 package-2 ... package-n; apt-get -y autoremove; apt-get clean all 

Đây là lần đầu tiên tôi gặp DEBIAN_FRONTENDbiến môi trường và cho đến nay tôi không thể tìm thấy thông tin hữu ích. Vì vậy, tôi tự hỏi những gì thiết lập nó để noninteractivelàm, và nếu nó được khuyến khích, bởi vì tôi cho rằng giá trị ( noninteractive) sẽ tiếp tục.


4
Không biết nó làm gì, tôi có thể nói rằng khi bạn đặt một biến theo cách đó như là một phần của chuỗi lệnh dài hơn, nó chỉ hiệu quả khi chạy lệnh đó. Nó không tồn tại.
Gunnar Hjalmarsson

Câu trả lời:


27

Đơn giản chỉ cần chuẩn bị một aptlệnh DEBIAN_FRONTEND=somethingkhông tồn tại sau lệnh đơn được áp dụng.

Các DEBIAN_FRONTENDtùy chọn được ghi lại trong các trang hướng dẫn Phần 7 của debconf(bạn có thể cần phải cài đặt debconf-docgói để cung cấp chúng trên hệ thống của bạn). Từ man 7 debconf:

Frontends
   One of debconf's unique features is that the interface it  presents  to
   you is only one of many, that can be swapped in at will. There are many
   debconf frontends available:

   dialog The default frontend, this uses  the  whiptail(1)  or  dialog(1)
          programs to display questions to you. It works in text mode.

   readline
          The  most  traditional frontend, this looks quite similar to how
          Debian configuration always has been:  a  series  of  questions,
          printed  out  at  the console using plain text, and prompts done
          using the readline library. It even supports tab completion. The
          libterm-readline-gnu-perl package is strongly recommended if you
          chose to use this frontend; the default readline module does not
          support  prompting  with default values.  At the minimum, you'll
          need the perl-modules package installed to use this frontend.

          This frontend has some special hotkeys. Pageup (or ctrl-u)  will
          go  back  to  the previous question (if that is supported by the
          package that is using debconf), and pagedown  (or  ctrl-v)  will
          skip forward to the next question.

          This is the best frontend for remote admin work over a slow con‐
          nection, or for those who are comfortable with unix.

   noninteractive
          This is the anti-frontend. It never interacts with you  at  all,
          and  makes  the  default  answers  be used for all questions. It
          might mail error messages to root, but that's it;  otherwise  it
          is  completely  silent  and  unobtrusive, a perfect frontend for
          automatic installs. If you are using this front-end, and require
          non-default  answers  to questions, you will need to preseed the
          debconf database; see the section below  on  Unattended  Package
          Installation for more details.

Nó cũng lưu ý rằng:

   You can change the default frontend debconf uses by reconfiguring  deb‐
   conf.  On the other hand, if you just want to change the frontend for a
   minute, you can set the DEBIAN_FRONTEND  environment  variable  to  the
   name of the frontend to use. For example:

     DEBIAN_FRONTEND=readline apt-get install slrn

   The  dpkg-reconfigure(8) and dpkg-preconfigure(8) commands also let you
   pass --frontend= to them, followed by the frontend  you  want  them  to
   use.

   Note  that not all frontends will work in all circumstances. If a fron‐
   tend fails to start up for some reason, debconf will print out  a  mes‐
   sage explaining why, and fall back to the next-most similar frontend.

1
Tôi thấy DEBIAN_FRONTEND=noninteractivethường được sử dụng trong Dockerfiles. Câu trả lời này khiến tôi tự hỏi tại sao chúng ta chỉ đơn giản là không sử dụng --yescờ với các lệnh apt vì nó sẽ rõ ràng hơn và trong hầu hết các trường hợp, nó sẽ đáp ứng nhu cầu của chúng ta.
Dennis

@Dennis Tôi nghĩ rằng đó là vì đường dẫn không nhất thiết phải được cài đặt và apt có thể đưa ra cảnh báo như vậy.
hayd

4
Lưu ý: nếu sử dụng DEBIAN_FRONTENDvới sudo, hãy đặt biến trong sudolệnh chứ không phải cho nó. Đó là : sudo DEBIAN_FRONTEND=noninteractive apt-get install slrn. Nếu bạn đặt cài đặt biến env trước đó sudo, nó sẽ hợp lệ cho sudochính lệnh đó và sudosẽ không sao chép nó vào apt-getlệnh đang chạy. Sử dụng nó giữa sudovà lệnh thực tế là sudocú pháp để thiết lập các biến env cho lệnh sẽ được chạy (xem trang man). Điều này đã cho tôi một thời gian khó khăn, vì vậy tôi nghĩ như chia sẻ.
caxcaxcoatl

1
Nếu bạn muốn thay đổi hành vi mặc định của lối vào thành noninteractive, bạn có thể thực hiện điều đó bằng lệnh sau:dpkg-reconfigure debconf --frontend=noninteractive
Carter Pape
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.