Wiederherstellung aller Daten und Abhängigkeiten aus dpkg --set-selections '*'

44

So kann ich auf einer Maschine laufen:

dpkg --get-selections '*' > selection.txt

Auf einem anderen Computer:

dpkg --set-selections < selection.txt

... gefolgt von einer der folgenden Optionen:

aptitude install
apt-get -u dselect-upgrade

... um die Pakete zu installieren, die.

Es scheint jedoch, dass dabei einige Informationen verloren gehen, z. B. ob ein Paket (z. B. xyz) automatisch als Abhängigkeit von einem anderen Paket ( abc) installiert wurde . Das sieht man immer dann, wenn man so etwas macht apt-get --purge remove abc. Auf dem Originalcomputer werden Sie benachrichtigt, dass das Paket xyzin Abhängigkeit von installiert wurde abcund dass Sie es möglicherweise verwenden apt-get autoremove, um es zu entfernen.

Ich bin jetzt bewusst deborphanund debfoster, aber sie sind lästig , das (einfache) Aufgabe verwenden gegeben.

Das Speichern und Wiederherstellen der oben gezeigten Auswahl reicht nicht aus, um die subtilen Abhängigkeiten der installierten Pakete wiederherzustellen.

Gibt es eine Möglichkeit, den gesamten Metadatensatz für die Paketverwaltung zu sichern und ihn dann vollständig wiederherzustellen?

0xC0000022L
quelle
Ich habe mich oft gefragt, wie ich mit all meinen Paketen (minus libs) ein großes Shell-Skript mit einer 'sudo apt-get install' generiere. Natürlich stoße ich auf dasselbe Problem, das Sie haben.
Chuck R
Ich würde vermuten, dass der beste Ausgangspunkt für die Suche darin besteht, zu überprüfen, ob dpkg tatsächlich für diese Informationen verantwortlich ist. Wenn nicht, dann ist das vielleicht die Aufgabe von apt.
Huckle
3
Wenn Sie den manuellen Weg gehen, könnten Sie daran interessiert sein apt-mark, Informationen über automatisch
versus
Es ist nicht in der 10.04 Paket-Repo, oder? Gehört dies zu den Canonical Repos oder zu Drittanbietern?
0xC0000022L
2
Nein, das ist nur ein Kommentar "zu Ihrer Information". Ich würde apt-mark verwenden (es ist Teil von apt, daher sollte es bereits installiert sein), um die Markierungen für die Pakete abzurufen und festzulegen ( Details finden Sie auf der Manpage ).
htorque

Antworten:

39

Backup:

apt-mark showauto > pkgs_auto.lst
apt-mark showmanual > pkgs_manual.lst

Wiederherstellen:

sudo apt-mark auto $(cat pkgs_auto.lst)
sudo apt-mark manual $(cat pkgs_manual.lst)
Drehmoment
quelle
Danke, wollte Sie oder Lekensteyn bitten, das als Antwort zu schreiben.
0xC0000022L
Können Sie mit diesen Befehlen die Programme aus dieser Liste neu installieren?
Svetlana Belkin
Kann dies Pakete entfernen , die bei der Wiederherstellung zusätzlich installiert werden?
n611x007
1
Können Sie den Unterschied zwischen autound erklären manual? Vielen Dank.
Anto
Ich habe versehentlich eine Reihe anderer Pakete als manuell markiert. Gibt es eine Möglichkeit, sie zurückzusetzen? Vielen Dank
dentex
2

Die ausgewählte Antwort auf diese Frage ist unvollständig und funktioniert nicht (oder nicht mehr). Die schmerzhafte Lösung besteht darin, eine Bash-For-Schleife zu verwenden, um die * .lst-Ausgabedateien zu analysieren und sie zu füttern apt install. Eine schlechte Wahl wird hier jedoch nicht dargestellt.

Eine bessere Wahl ist die Verwendung apt-clone, wie in dieser Antwort auf dem Unix & Linux Stackexchange zu sehen. Dadurch wird eine kleine Datei erstellt (ca. 100 KB oder weniger für mein System). Angeblich wird es die Pakete mit wenig Aufwand oder Schmerzen klonen.

Also, kurz gesagt, auf der Originalmaschine:

apt-clone clone `uname -n`

Kopieren Sie dann auf dem Computer, auf den Sie klonen möchten, die Klondatei und führen Sie Folgendes aus:

apt-clone restore original-machine-name.apt-clone.tar.gz

Ich füge diese Antwort hier hinzu, da diese Seite bei den ersten Websuchen aufgetaucht ist, die andere Antwort jedoch nicht. Diese Methode sieht viel einfacher aus.

Gelegenheitskodierer
quelle