GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Debian – Wie repliziert man installierte Paketauswahlen von einem Debian-System auf ein anderes? (Debian Wheezy)?

Ich versuche, eine Staging-Umgebung in einer VM einzurichten, um Updates zu testen, bevor ich sie auf mein Hauptsystem anwende.

Um dies zu tun, habe ich eine grundlegende Installation von Debian Wheezy (wie auf dem Hauptsystem) in der VM durchgeführt und dann als root von innerhalb der VM aus ausgeführt:

# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh [email protected] 'dpkg --get-selections | grep -v deinstall' | 
  dpkg --set-selections

Die i386-Architektur wird in meinem Fall leider benötigt; Das System ist AMD64-nativ.

Das Problem liegt bei dpkg --set-selections in der VM ausführen. Ich habe einige Pakete, die eine besondere Behandlung erfordern (das sind eigentlich die Hauptgründe, warum ich überhaupt eine Staging-Umgebung möchte), aber wenn ich den letzten Befehl oben ausführe, erhalte ich ungefähr eine Unmenge an Ausgaben wie:

dpkg: warning: package not in database at line NNN: package-name

für Pakete, die eigentlich im Basissystem vorhanden sein sollten. Beispiele sind xterm , yelp und zip .

Nun zu meiner Frage:

Wie sieht der spezifische Prozess zum Übertragen der Paketauswahlliste von einem Debian-System auf ein anderes aus (unter der Annahme des gleichen Debian-Release-Levels in Wheezy) und anschließend diese Änderungen anwenden? Das Ziel ist, dass beide dieselbe Liste installierter Pakete haben, idealerweise so, dass ein diff durchgeführt wird zwischen den Ausgaben von dpkg --get-selections oder dpkg --list auf den beiden kommt zurück und zeigt keine Unterschiede.

Die grep -v deinstall Teil ist entlehnt von Verhindern, dass Pakete entfernt werden, nachdem dpkg --set-selections ausgeführt wurde drüben auf Ask Ubuntu.

Ich habe die Quelle in der VM so geändert, dass sie dieselbe wie auf dem Hauptsystem ist, und auch apt-transport-https installiert :

deb https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb [arch=amd64] http://archive.zfsonlinux.org/debian wheezy main

Wenn ich mir die Ausgabe von –set-selections anschaue, sehe ich:

dpkg: warning: package not in database at line 1: a2ps
dpkg: warning: package not in database at line 1: abiword
dpkg: warning: package not in database at line 1: abiword-common
dpkg: warning: package not in database at line 1: abiword-plugin-grammar
dpkg: warning: package not in database at line 1: abiword-plugin-mathview
dpkg: warning: package not in database at line 1: accountsservice
dpkg: warning: package not in database at line 1: acl
dpkg: warning: package not in database at line 4: aglfn
dpkg: warning: package not in database at line 4: aisleriot
dpkg: warning: package not in database at line 4: alacarte
dpkg: warning: package not in database at line 4: alien
...

Die Zeilennummern sahen seltsam aus, und der entsprechende Teil der Ausgabe von –get-selections ist:

a2ps install
abiword install
abiword-common install
abiword-plugin-grammar install
abiword-plugin-mathview install
accountsservice install
acl install
acpi-support-base install
acpid install
adduser install
aglfn install
aisleriot install
alacarte install
alien install

Beachten Sie, dass zwischen acl und aglfn sind acpi-support-base , acpid und adduser für die keine Fehler gemeldet werden . Es scheint, dass die Pakete, für die Fehler gemeldet werden, entweder un sind gemäß dpkg -l , oder dpkg -l hat überhaupt keine Ahnung davon (dpkg-query: no packages found matching ... ). Ich weiß, dass es einige lokal installierte Pakete gibt, aber nicht viele. i386 erscheint erst gcc-4.7-base:i386 install viel weiter unten in der Liste (Zeile 342 in der Ausgabe von –get-selections).

Verwandte:Was sind die grundlegenden Unterschiede zwischen den Mainstream-*NIX-Shells??

Akzeptierte Antwort:

Um eine Debian-Installation zu klonen, verwenden Sie apt-clone Nützlichkeit. Es ist (als separates Paket, nicht Teil der Standardinstallation) in Debian seit Wheezy und in Ubuntu seit 12.04 verfügbar. Führen Sie auf dem vorhandenen Computer

aus
apt-clone clone foo

Dadurch wird eine Datei foo.apt-clone.tar.gz erstellt . Kopieren Sie es auf den Zielcomputer und führen Sie es aus

apt-get install apt-clone
apt-clone restore foo.apt-clone.tar.gz

Wenn Sie mit einem alten System arbeiten, auf dem apt-clone nicht verfügbar ist oder wenn Sie nur die Liste der installierten Pakete, aber keine Konfigurationsdatei replizieren möchten, finden Sie hier die manuellen Schritte.

  • Auf dem Quellcomputer:

    cat /etc/apt/sources.list /etc/apt/sources.list.d >sources.list
    dpkg --get-selections >selections.list
    apt-mark showauto >auto.list
    
  • Auf dem Zielcomputer:

    cp sources.list /etc/apt/
    apt-get update
    /usr/lib/dpkg/methods/apt/update /var/lib/dpkg/
    dpkg --set-selections <selections.list
    apt-get dselect-upgrade
    xargs apt-mark auto <auto.list
    

Ich glaube, dass Sie von einer inkompatiblen Änderung in dpkg betroffen sind, die es zuerst in Wheezy geschafft hat. Siehe Fehler Nr. 703092 für Hintergrundinformationen.

Die Kurzgeschichte ist, dass dpkg --set-selections akzeptiert jetzt nur Paketnamen, die in der Datei /var/lib/dpkg/status vorhanden sind oder /var/lib/dpkg/available . Wenn Sie APT nur zum Verwalten von Paketen verwenden, wie die meisten Leute, dann /var/lib/dpkg/available wird nicht aktuell gehalten.

Nach dem Ausführen von apt-get update und bevor Sie dpkg --set-selections ausführen und apt-get -u dselect-upgrade , führen Sie den folgenden Befehl aus:

apt-cache dumpavail >/tmp/apt.avail
dpkg --merge-avail /tmp/apt.avail

Ab Jessie können Sie dies vereinfachen zu

apt-cache dumpavail | dpkg --merge-avail

Alternativ führen Sie

aus
/usr/lib/dpkg/methods/apt/update /var/lib/dpkg/

oder noch einfacher

apt-get install dctrl-tools
sync-available

Eine weitere einfache Methode, bei der kein zusätzliches Paket installiert werden muss, sondern die Paketlisten erneut heruntergeladen werden, ist

dselect update

Weitere Informationen finden Sie in den häufig gestellten Fragen zu dpkg. (Dies wird in der dpkg-Manpage erwähnt, aber eher auf eine Weise, die Sie an das Problem erinnern würde, wenn Sie es bereits wüssten, nicht auf eine Weise, die erklärt, wie das Problem gelöst werden kann!)

Beachten Sie, dass das Klonen einer Paketinstallation mit dpkg --set-selections stellt die automatische/manuelle Markierung in APT nicht wieder her. Weitere Einzelheiten finden Sie unter Wiederherstellen aller Daten und Abhängigkeiten von dpkg –set-selections ‘*’. Mit

können Sie die Markierungen auf dem Quellsystem speichern
apt-mark showauto >auto.list

und mit

auf dem Zielsystem wiederherstellen
xargs apt-mark auto <auto.list

Debian
  1. So aktualisieren Sie das Debian-Linux-System von Wheezy auf die stabile Version von Jessie

  2. So installieren Sie Gradle unter Debian 10

  3. So installieren Sie AnyDesk unter Debian 10

  4. Debian – Wie installiere ich ein einzelnes Paket von Debian Testing oder Unstable auf Stable?

  5. Fedora – Wie repliziert man die installierte Paketauswahl von einer Fedora-Instanz zu einer anderen?

So installieren Sie Pakete unter Debian 10

So installieren Sie PostgreSQL 14 auf Debian 11

So installieren Sie das Debian-Paket (.deb).

So installieren Sie Webmin unter Debian 11

So leiten Sie in Nginx und Debian 11 von einer Domäne zu einer anderen um

So installieren Sie Wine unter Debian 7 Wheezy