Umgebungsvariable DEBIAN_FRONTEND

22

Mein potenzieller Hosting-Anbieter schlägt vor , einen Befehl im Terminal auszuführen, um das Betriebssystem-Image des KVM-basierten Servers auf ein Minimum zu reduzieren. Da die KVM-Vorlagen Pakete enthalten, die ich nicht benötige, dachte ich, ich könnte denselben Befehl verwenden, um unerwünschte Pakete zu entfernen.

Dieser Befehl beginnt mit DEBIAN_FRONTEND=noninteractiveund wird apt-get removewie folgt aufgerufen :

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 

Es ist das erste Mal, dass ich auf die DEBIAN_FRONTENDUmgebungsvariable stoße und bisher keine nützlichen Informationen gefunden habe. Ich frage mich also, auf was es sich noninteractiveauswirkt und ob es ratsam ist, weil ich annehme, dass value ( noninteractive) bestehen bleibt .

Asarluhi
quelle
4
Ohne zu wissen, was es tut, kann ich feststellen, dass, wenn Sie eine Variable als Teil einer längeren Befehlszeichenfolge auf diese Weise festlegen, dies nur bei der Ausführung dieses Befehls wirksam ist. Es bleibt nicht bestehen.
Gunnar Hjalmarsson

Antworten:

27

Das einfache Voranstellen eines aptBefehls mit DEBIAN_FRONTEND=somethingbleibt nach dem einzelnen Befehl, auf den er angewendet wird, nicht bestehen.

Die DEBIAN_FRONTENDOptionen sind in den Handbuchseiten von Abschnitt 7 dokumentiert debconf(möglicherweise müssen Sie das debconf-docPaket installieren , um diese auf Ihrem System verfügbar zu machen). Von 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.

Es wird auch darauf hingewiesen, dass:

   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.
Stahlfahrer
quelle
1
Ich sehe DEBIAN_FRONTEND=noninteractivehäufig in Dockerfiles verwendet. Bei dieser Antwort frage ich mich, warum wir das --yesFlag bei apt-Befehlen einfach nicht verwenden, da es expliziter ist und in den meisten Fällen unseren Anforderungen entspricht.
Dennis
@ Tennis Ich denke, es liegt daran, dass readline nicht unbedingt installiert ist und apt eine Warnung als solche ausgeben kann.
Hayd
4
Hinweis: Wenn Sie DEBIAN_FRONTENDmit verwenden sudo, legen Sie die Variable innerhalb des sudoBefehls und nicht für diesen fest. Das heißt: sudo DEBIAN_FRONTEND=noninteractive apt-get install slrn. Wenn Sie die env-Variableneinstellung zuvor setzen sudo, ist sie für den sudoBefehl selbst gültig und sudokopiert sie nicht in den ausgeführten apt-getBefehl. Die Syntax für die Einrichtung von Umgebungsvariablen für den auszuführenden sudoBefehl ist zwischen und der eigentliche Befehl sudo(siehe Manpage). Das bereitete mir große Schwierigkeiten und ich dachte darüber nach, etwas zu teilen.
Caxcaxcoatl
1
Wenn Sie das Standardverhalten des Frontends auf ändern möchten noninteractive, können Sie dies mit dem folgenden Befehl tun:dpkg-reconfigure debconf --frontend=noninteractive
Carter Pape,