Wie kann ich einen ausführlichen apt-get-Beendigungscode erhalten?

12

Wie kann ich einen "ausführlichen" Exit-Code für apt-getsolche Fehler erhalten?

Package google-chrome is a virtual package provided by:
  google-chrome-stable 29.0.1547.76-r223446
  google-chrome-beta 30.0.1599.47-1
You should explicitly select one to install.

E: Package 'google-chrome' has no installation candidate

habe einen anderen Exit-Code als solche Download-Fehler

Err http://dl.google.com/linux/chrome/deb/ stable/main google-chrome-stable amd64 29.0.1547.76-r223446
  Something wicked happened resolving 'dl.google.com:http' (-11 - System error)

Derzeit werden beide Fehler mit beendet 100

Grundsätzlich möchte ich, dass Download-Fehler mit einem anderen Code beendet werden als Fehler wie der erste. Wenn möglich, möchte ich, dass jeder Fehler einen anderen Beendigungscode hat, aber das obige Beispiel ist das Minimum, das ich brauche. Wie kann ich dies in einer Vanilla-Ubuntu-Installation ohne zusätzliche Software tun (mit Ausnahme von aptitude)?

kiri
quelle
Sie können den Befehl apt-get in ein Skript einbinden, das die Ausgabe analysiert. Oder zählt das als "Zusatzsoftware"? Wenn Sie Download-Fehler feststellen möchten, sollten Sie dies apt-get --download-onlyzuerst tun .
Jos
Ah, das macht Sinn. Vielleicht können Sie zuerst die Existenz von Paket X überprüfen, indem Sie Folgendes tun apt-cache policy X?
Jos
Auch hier müssten Sie die Ausgabe abfragen. Ich gehe davon aus, dass apt-cache policy google-chromeIhnen dies keine Zeile mit dem Wort "Kandidat" gibt, wohingegen dies der Fall apt-cache policy google-chrome-stablewäre.
Jos
IN ORDNUNG. Ich versetze diese Diskussion in einen Chat und gebe diesen Vorschlag als (Teil-) Antwort ein.
Jos

Antworten:

1

Keine vollständige Antwort, aber Sie können zunächst prüfen, apt-cache policy Xob Pakete vorhanden sind, indem Sie die Ausgabe für "Kandidat (keine)" oder "Paket X nicht gefunden" usw. überprüfen.

Jos
quelle
Fürs Erste upvoted, aber wie du gesagt hast, ist es teilweise. Fühlen Sie sich frei, alle Ihre Kommentare zu löschen, die jetzt in einer Antwort sind. Vielen Dank für Ihre Hilfe
kiri
15

Ich glaube, dies ist kein Fall von XY, und Sie möchten nur in der Lage sein, apt-get generell zu debuggen. Unter solchen Voraussetzungen ist hier meine Antwort.

Aus dem man apt.conf:

DEBUG-OPTIONEN

Wenn Sie die Optionen im Abschnitt Debug :: aktivieren, werden die Debuginformationen unter Verwendung der apt-Bibliotheken an den Standardfehlerstrom des Programms gesendet, oder Sie aktivieren spezielle Programmmodi, die in erster Linie zum Debuggen des Verhaltens von apt hilfreich sind.

Daher müssen Sie nur die Regeln für jedes der folgenden Debug-Verhalten aktivieren apt-get:

  • Debug :: pkgProblemResolver : Aktiviert die Ausgabe über die Entscheidungen, die durch dist-upgrade, upgrade, install, remove, purge getroffen wurden.
  • Debug :: NoLocking : Deaktiviert alle Dateisperrungen. Dies kann verwendet werden, um einige Vorgänge (z. B. apt-get -s install) als Benutzer ohne Rootberechtigung auszuführen.
  • Debug :: pkgDPkgPM : Gibt jedes Mal die aktuelle Befehlszeile aus, wenn apt dpkg (1) aufruft.

Diese 3 sind die ersten, die die Manpage empfiehlt, und die erste hilft Ihnen beim Debuggen des ersten Fehlers, den Sie anzeigen. Für die Sekunde benötigen Sie möglicherweise:

  • Debug :: Acquire :: http : Informationen zum Herunterladen von Paketen über HTTP ausgeben. Es gibt auch https, ftp, cdrom.

Die Manpage enthält viele weitere, die Sie einfach mit auflisten können man apt.conf | grep -A5 -i debug.

All dies sollte mit der richtigen Syntax geschrieben werden und sie akzeptieren boolesche Werte:

Debug::*::*  "true";

oder wenn Sie mehrere Zeilen verwenden möchten:

Debug {
  Acquire {
    http "true";
    ftp "true";
  };
  NoLocking "true";
};

Wenn Sie nur für eine Instanz von apt-get ausführen möchten, können Sie den Schalter -o/ verwenden --option:

sudo apt-get -o Debug::pkgProblemResolver=true -o Debug::Acquire::http=true -f install 

Eine andere Methode erstellt Ihre personalisierte Konfigurationsdatei und lädt sie mit der Option -c/ --config-file:

sudo apt-get -c debug-apt.conf install hello

Über die Änderung der Exit-Codes, glaube ich, können Sie nicht, wenn Sie den Quellcode ändern. apt-getist eine hochmoderne Software, die über fortschrittliche Methoden zum Debuggen des Prozesses verfügt, ohne dass Exit-Codes erforderlich sind.

Braiam
quelle
Ich versuche tatsächlich, diese Befehle in ein Skript zu schreiben, das unbeaufsichtigt ausgeführt werden kann. Wie würde ich dies in einem Bash-Skript verwenden, um festzustellen, ob der erste Fehler aufgetreten ist?
kiri
Ich möchte dies auch nur für eine bestimmte Instanz von tun apt-get, nicht die ganze Zeit.
kiri
@ minerz029 Mit dieser -oOption können Sie Ad-hoc-Befehle ausführen. Aktualisiert meine Antwort.
Braiam
Über den ersten Kommentar sollten Sie etwas Kluges mit dem Parsen der Ausgabe tun. Ich habe keine Ahnung, wie du das machen kannst.
Braiam
Eigentlich habe ich es geschafft, die Ausgabe von zu begreifen apt-cache policy PACKAGE, wie Jos sagte. Ich habe versucht, zu überprüfen, ob ein Paket installierbar ist. Möglicherweise habe ich meine Frage nicht richtig gestellt, aber dies ist eine gute Antwort
kiri