Wie kann ich "dpkg --get-selections" nach Paketen filtern, die nur in Repositorys verfügbar sind?

9

Ich möchte eine Liste der auf einem System installierten Pakete erhalten und alle auf einem anderen System installieren.

Ich weiß, dpkg --get-selectionsdass ich dadurch eine Liste aller installierten Pakete erhalten kann, in die ich dpkg --set-selectionsauf dem Zielsystem einbinden kann. Einige der installierten Pakete sind jedoch solche, die ich selbst lokal erstellt habe (z. B. mit checkinstall) und die nicht in den Repositorys verfügbar sind. Der dpkg --set-selectionsProzess schlägt fehl, wenn diese Pakete nicht in den Repositorys gefunden werden können.

Gibt es eine Möglichkeit, die von generierte Liste dpkg --get-selectionsso zu filtern , dass sie nur Pakete enthält, deren aktuell installierte Version in meinen aktuellen Repositorys verfügbar ist?

Ryan C. Thompson
quelle

Antworten:

9

Ich glaube, dass Software Center heutzutage eine Funktion zum Synchronisieren zwischen Computern bietet. Wenn das fehlende Pakete korrekt behandelt, könnte es Ihr Problem lösen.

Das Problem hierbei ist, dass dpkgkeine Repositorys bekannt sind, sondern nur installierte Pakete. Sie können durch Ausführen herausfinden, ob ein Paket in einem Repository verfügbar ist apt-cache policy $package. Wenn Sie ein Repository im sehen Version Table, ist es dort verfügbar.

Wie wäre es damit? Es ist langsam, sollte aber funktionieren:

dpkg --get-selections '*' \
  | while read line; do
    apt-cache policy $(echo "$line" | cut -f1 ) \
      | grep -q 'http://' \
      && echo "$line"
done
Tumbleweed
quelle
Dies wird den Fortschritt zeigen und in eine Datei schreiben:total=$(dpkg --get-selections '*'|wc -l); i=0; dpkg --get-selections '*' | while read line; do i=$(($i+1)); apt-cache policy $(echo "$line" | cut -f1 ) | grep -q 'http://' && echo "$i/$total $line"; echo $line>>/var/tmp/dpkg-selection.list; done
rubo77
-4

Verwenden Sie den folgenden Befehl

dpkg --get-selections > installed-software

Es wird eine Datei namens installierte Software in Ihrem Home-Verzeichnis erstellt

auf dem neuen System

dpkg --set-selections < installed-software

Dadurch wird die Auswahl gelesen und installiert

Sarveshlad
quelle
3
Ich glaube nicht, dass Sie die Frage gelesen haben.
Ryan C. Thompson