
Ich habe eine Reihe von RPM-Paketen. Ich werde sie alle auf einmal installieren, aber vorher möchte ich die Reihenfolge kennen, in der sie installiert werden. Ich weiß, wenn ich sie alle in zufälliger Reihenfolge dem Paketmanager zur Verfügung stelle, wird der Manager die Abhängigkeiten zwischen ihnen feststellen und sie in der richtigen Reihenfolge installieren. Wie erhalte ich diese Reihenfolge?
Antwort1
Sie können die Debug-Ausgabe von rpm mit der Option --test verwenden. Das bedeutet, dass keine Pakete installiert werden, aber die stderr-Ausgabe enthält die interne Reihenfolge, wie folgt:
D: ========== tsorting packages (order, #predecessors, #succesors, depth)
D: 0 0 2 1 +cla-v1-r45.0.0.x86_64
D: 1 0 11 2 +ace-6.5.15-1.x86_64
D: 2 0 1 3 +ace-kokyu-6.5.15-1.x86_64
D: 3 0 1 3 +ace-xml-6.5.15-1.x86_64
D: 4 0 7 4 +tao-2.5.15-1.x86_64
D: 5 0 0 5 +tao-cosconcurrency-2.5.15-1.x86_64
D: 6 0 0 5 +tao-cosevent-2.5.15-1.x86_64
D: 7 0 0 5 +tao-cosnaming-2.5.15-1.x86_64
D: 8 0 0 5 +tao-cosnotification-2.5.15-1.x86_64
D: 9 0 0 5 +tao-costrading-2.5.15-1.x86_64
D: 10 0 0 5 +tao-rtevent-2.5.15-1.x86_64
D: 11 0 0 5 +tao-utils-2.5.15-1.x86_64
D: 12 0 0 3 +ace-gperf-6.5.15-1.x86_64
D: 13 0 0 1 +mpc-6.5.15-1.x86_64
D: 14 0 0 1 +PCMX-6.0A90-02.x86_64
D: installing binary packages
Verwenden Sie dann einen Filter zum Parsen, z. B. awk
rpm -Uvv --test *.rpm 2>&1 | awk 'BEGIN { FS = "+" }; /D: ========== tsorting packages/,/D: installing binary packages/ { printf "%s ",$2 }'
Antwort2
yum
hat keine Möglichkeit, diese Bestellung auszudrucken (sieheHandbuch), noch gibt es eine bekannte Schnittstelle zu seiner Datenbank und Bibliotheken, die dies tun kann. Eine Lösung müsste also seindraußen yum
. Sie können jederzeit yum
eine vollständige Liste der zusätzlichen Abhängigkeiten eines Pakets ausdrucken lassen, aber diese Informationen sind nicht sehr nützlich, um dieBefehlin denen Pakete installiert werden müssen. Einfacher ist es, nachzufragen rpm
.
Im Prinzip kann man ein Skript schreiben, das die Ausgabe von
rpm -qpR package-file
für jedePaketdatei, um die Abhängigkeiten abzurufen und sie in Schritte zu ordnen, z. B.
- Pakete, die von keinem der anderen abhängig sind, dann
- Pakete, die von einem oder mehreren der vorhergehenden (und möglicherweise anderen inDasGruppe) und
- so weiter, bis keine Pakete mehr übrig sind
(Ich habe es umgekehrt gemacht - ich habe nach Paketen gesucht, umentfernen, und es ist kompliziert, aber machbar).