Ich schreibe ein Post-Installationsskript für Ubuntu in Perl (das gleiche Skript wie gesehen here). Einer der Schritte besteht darin, eine Liste von Paketen zu installieren. Das Problem ist, dass, wenn apt-get install
auf viele verschiedene Arten für eines der Pakete versagt, das Skript schlecht stirbt. Ich möchte das verhindern.Überprüfen Sie eine Liste der zu installierenden Pakete mit apt-get
Das passiert, weil apt-get install
für Pakete fehlschlägt, die es nicht mag. Zum Beispiel, wenn ich versuche, einen Unsinn Wort zu installieren (dh in den falschen Paketnamen eingegeben)
$ sudo apt-get install oblihbyvl
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package oblihbyvl
aber wenn anstelle der Paketname (Installation Hand von ppa)
$ sudo apt-get install handbrake
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package handbrake is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'handbrake' has no installation candidate
$ apt-cache search handbrake
handbrake-cli - versatile DVD ripper and video transcoder - command line
handbrake-gtk - versatile DVD ripper and video transcoder - GTK GUI
etc holt wurde, etc ...
Ich habe versucht, die Ergebnisse von apt-cache
und apt-get -s install
zu analysieren, um alle Möglichkeiten zu fangen, bevor Sie die Installation zu tun, aber ich scheine immer neue Wege zu finden, um Fehler zu ermöglichen, den eigentlichen Systembefehl zu installieren.
Meine Frage ist, gibt es eine Möglichkeit in Perl (zB ein Modul, obwohl ich die Installation von Modulen möglichst vermeiden möchte, da dies nach einer Neuinstallation von Ubuntu das erste Ding sein sollte) oder apt- * oder dpkg, damit ich sicher sein kann, dass alle Pakete vor der Installation installiert werden können, und wenn sie nicht auf eine Weise fehlschlagen, die den Benutzer entscheiden lässt, was zu tun ist?
N.B. Ich tue etwas entlang der Linien von:
my @list_of_install_candidates = (...);
my @to_install = grep { my $output = qx{ apt-get -s install $_ }; parse_output($output); } @list_of_install_candidates;
system('apt-get', 'install', @to_install);
Selbst etwas mit einer nicht leeren Version kann zu Konflikten mit anderen installierten Paketen führen. – ysth
hmm, in diesem Fall wäre es vielleicht sinnvoller, die Ausgabe eines Trockenlaufs zu parsen ('apt-get -s install ...') – cam
@cam, danke, ich werde es versuchen. @ysth, das kann in Ordnung sein, da die Absicht ist, das erste Ding zu sein, das nach einer Installation läuft, solange die Pakete nicht mit den Distro-Standard-Paketen kollidieren (und das sollten sie nicht), sollte dies in Ordnung sein. –