Zypper: Wie liste ich installierte Pakete auf, die sich nicht in einem Repo befinden?

8327
David B.

Wie kann man in einem System, das Zypper für die Paketverwaltung verwendet (in meinem Fall openSuse), eine Liste aller installierten Pakete erhalten, die keinem aktuell aktivierten Repository zugeordnet sind?

Echtes Problem: Beim Upgrade von Distributionen (z. B. von openSuse 12.1 auf 12.2) deaktiviere ich alle von mir aktivierten Nicht-Standard-Repositorys. Oft habe ich sie nur hinzugefügt, um eine neue Version eines bestimmten Tools zu erhalten, diese neuere Version ist jedoch standardmäßig in der aktualisierten Distribution enthalten. Manchmal wurden jedoch zusätzliche Pakete aus dem Repository installiert, aber ich weiß nicht, wie ich diese erkennen kann. Das System funktioniert, aber diese Pakete werden niemals aktualisiert, da ich das bereitgestellte Repository nach dem Upgrade entfernt habe.

4

2 Antworten auf die Frage

3
s-m-e

Es geht ein bisschen darum, mit Zypper-Anfragen herumzuspielen.

1) Finden Sie installierte Pakete, die aus Nicht-OpenSuse-Distributions-Repositorys stammen:

zypper search -s | grep "i |" | grep -vi "| patch" | grep -vi "| opensuse" > list1.txt 

2) Suchen Sie nach Paketen, die in OpenSuse-Repositorys verfügbar sind (unabhängig davon, ob sie installiert sind oder nicht):

zypper search -s | grep "v |" | grep -vi "| patch" | grep -i "| opensuse" > list2.txt 

3) Identifizieren Sie Pakete aus Liste1, die nicht in Liste2 dargestellt sind:

cat list1.txt | cut -d " " -f3 | cut -d " " -f1 | while read line do if [ "$(cat list2.txt | grep -i $line)" = "" ]; then echo "$line" fi done 

Dies sollte den Fall lösen (getestet unter openSUSE 11.3).

1
Chris Maes

Die Option paist wahrscheinlich sinnvoller:

zypper pa -i 

listet alle installierten Pakete und ihre verfügbaren Versionen und Repositorys auf. Sie können auswählen, dass nur die Pakete aufgelistet werden, die zu einem bestimmten Repository gehören, mit der -rMarkierung:

zypper pa -i -r openSUSE-12.1 

Von dort aus können Sie die von @ernestopheles vorgeschlagenen Strategien verwenden, um die für Sie passende zu finden.

Ich habe angefangen mit `zypper pa -i | grep @ System`; Früher habe ich `zypper search -i -s -t package | verwendet grep "| (System Packages) \ s * $" ` ShadSterling vor 7 Jahren 0