100% nicht interaktives Debian-Dist-Upgrade

38

Gibt es apt-get dist-upgradein Debian eine Möglichkeit, die nicht nur alle gestellten Fragen automatisch mit "Ja" beantwortet, sondern auch angemessene Standardeinstellungen als Antworten auf Fragen verwendet, die so komplex sind, dass verschiedene interaktive Dialogfelder angezeigt werden müssen? Ich denke hier an das Keymap-Zeug, das beim Upgrade angezeigt wird libc6, und an die Auswahl der Kernel-Images.

Das Ziel ist es, aus der Ferne eine ziemlich große dist-upgradeMaschine zu initiieren - auch für eine Maschine, die stark hinter der Zeit zurückliegt - und sie überhaupt nicht babysitten zu müssen, es sei denn, etwas ist einfach schrecklich, katastrophal falsch.

Das ist doch möglich?

Danke im Voraus!

Alex Balashov
quelle
Für diejenigen, die nur auf Ubuntu upgraden möchten (und nicht dist-upgrade), probieren Sie das Paket für unbeaufsichtigte Upgrades aus .
Jo Liss

Antworten:

42

Wenn Sie festlegen DEBIAN_FRONTEND=noninteractive(um zu verhindern, dass Debconf-Eingabeaufforderungen angezeigt werden) und force-confoldund force-confdefzu Ihrer /etc/dpkg/dpkg.cfgDatei hinzufügen , sollten Sie über eine vollständig nicht interaktive Paketinstallation verfügen. Jedes Paket , das Ihnen noch aufgefordert , Informationen hat einen veröffentlichungskritischen Fehler (und ich sage das als sowohl ein Automatisierungs Junkie und als Debian - Entwickler).

womble
quelle
das hat bei mir nicht geklappt. apt-listchangeswurde eröffnet von less.
magnetar
@magnetar: Das ist ein Problem mit apt-listchanges, nicht apt. Deinstallieren Sie apt-listchanges oder konfigurieren Sie es entsprechend.
womble
1
Versuchen Sie: env APT_LISTCHANGES_FRONTEND = keine apt-get dist-upgrade -u -y
H.-Dirk Schmitt
21

Florian Lohoff hat einen Weg gepostet , um das, was womble vorschlägt, in einem einzigen Befehl zu vereinen:

DEBIAN_FRONTEND=noninteractive \
apt-get \
-o Dpkg::Options::="--force-confnew" \
--force-yes \
-fuy \
dist-upgrade

Natürlich können Sie auch verwenden -o Dpkg::Options::="--force-confnew --force-confdef"(suchen Sie in der Manpage von dpkg nach confnew). Ich bin mir nicht sicher, in welchen Fällen dies einen Unterschied machen würde. Ich persönlich benötige das nicht interaktive Upgrade, um Vanille-Images auf den neuesten Stand zu bringen. In diesem Fall ist es wahrscheinlich --force-confdefsinnvoll, immer die neue Konfigurationsdatei (ohne ) auszuwählen.

Jo Liss
quelle
W: --force-yes is deprecated, use one of the options starting with --allow instead.
Alex
3

Obwohl die Antwort von womble oben im Allgemeinen gut ist, hat es bei mir nicht funktioniert und ich musste einige zusätzliche Nachforschungen anstellen, um 100% unbeaufsichtigt zu bleiben. Ich dachte, ich werde das Ergebnis auf prägnante Weise teilen, um es den zukünftigen Besuchern einfacher zu machen.

Das Folgende ist ein Skript, das gemäß den Upgrade-Empfehlungen von Debian 8 Release Notes (meistens) ausgeführt wird, zusammen mit Flags und Umgebungsvariablen, die es unbeaufsichtigt machen. (Die echos dienen nur zum Debuggen und können entfernt werden. Ich empfehle jedoch, sie beizubehalten. Wenn das Skript hängen bleibt, wissen Sie, wo.)

#!/bin/bash

apt-get remove apt-listchanges --assume-yes --force-yes &&

#using export is important since some of the commands in the script will fire in a subshell
export DEBIAN_FRONTEND=noninteractive &&
export APT_LISTCHANGES_FRONTEND=none &&

#lib6c was an issue for me as it ignored the DEBIAN_FRONTEND environment variable and fired a prompt anyway. This should fix it
echo 'libc6 libraries/restart-without-asking boolean true' | debconf-set-selections &&

echo "executing wheezy to jessie" &&
find /etc/apt -name "*.list" | xargs sed -i '/^deb/s/wheezy/jessie/g' &&

echo "executing autoremove" &&
apt-get -fuy --force-yes autoremove &&

echo "executing clean" &&
apt-get --force-yes clean &&

echo "executing update" &&
apt-get update &&

echo "executing upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy upgrade &&

echo "executing dist-upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy dist-upgrade
Tom Klino
quelle
1
Hinweis: "--force-yes Ja erzwingen; dies ist eine gefährliche Option, die dazu führt, dass apt ohne Aufforderung fortfährt, wenn es etwas potenziell Schädliches tut. Es sollte nur in ganz speziellen Situationen verwendet werden. Die Verwendung von" force-yes "kann potenziell zerstören Ihr System! Konfigurationselement: APT :: Get :: force-yes. Dies ist veraltet und wird in 1.1 durch --allow-downgrades, --allow-remove-essential, --allow-change-held-packages ersetzt. "
Alex
1

> = Apt 1.1

Wenn Sie mit Apt 1.1 oder höher, --force-yesist veraltet , so dass Sie die Optionen , beginnend mit verwenden , haben --allowstattdessen zum Beispiel --allow-downgrades, --allow-remove-essential, --allow-change-held-packages.

Der Befehl lautet also:

DEBIAN_FRONTEND=noninteractive \
  apt-get \
  -o Dpkg::Options::=--force-confold \
  -o Dpkg::Options::=--force-confdef \
  -y --allow-downgrades --allow-remove-essential --allow-change-held-packages \
  dist-upgrade

Hinweis: Verwenden Sie --force-confolddiese --force-confnewOption , um alte und neue Konfigurationen beizubehalten.

Quelle: CFE-2360: Machen Sie die Version des apt_get-Paketmoduls bekannt .

Verbunden:

Kenorb
quelle
-4

Von der apt-get(8)Manpage:

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

Als Referenz -yfunktioniert die Option yum(8)ebenfalls.

koenigdmj
quelle
5
Ich kenne das. Ich benutze dieses Flag und es beantwortet erfolgreich "Ja" zu Standard-APT-J / N-Fragen zum Überschreiben vorhandener Konfigurationen usw. usw. Dies sind nicht die Fragen, auf die ich mich beziehe. Wenn ich ein apt-get -y dist-upgrade durchführe, erhalte ich immer noch einige 'Dialog'-Eingabeaufforderungen für wichtige Dinge, z. B. Änderungen der Tastaturbelegung, Neustart des libc6-bezogenen Dienstes usw. Ich habe nach einem zusätzlichen Flag gesucht schalte das auch aus.
Alex Balashov