Ich versuche, eine Staging-Umgebung in einer VM einzurichten, um Updates zu testen, bevor sie auf mein Hauptsystem angewendet werden.
Zu diesem Zweck habe ich eine Basisinstallation von Debian Wheezy (wie auf dem Hauptsystem) in der VM durchgeführt und bin dann als root von der VM aus gelaufen:
# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh me@main-system 'dpkg --get-selections | grep -v deinstall' | \
dpkg --set-selections
Die i386 Architektur wird in meinem Fall leider benötigt; das system ist amd64 native.
Das Problem liegt beim dpkg --set-selections
Ausführen in der VM. Ich habe einige Pakete, die eine spezielle Behandlung erfordern (das ist eigentlich der Hauptgrund, warum ich überhaupt eine Staging-Umgebung haben möchte), aber wenn ich den letzten obigen Befehl ausführe, erhalte ich ungefähr eine Unmenge von Ausgabezeilen 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:
Was ist der genaue Vorgang, um die Paketauswahlliste von einem Debian-System auf ein anderes zu übertragen (bei gleichem Debian-Release-Stand in Wheezy) und diese Änderungen anschließend anzuwenden? Das Ziel ist, dass beide die gleiche Liste der installierten Pakete haben, idealerweise so, dass das Ausführen eines diff
zwischen den Ausgaben von dpkg --get-selections
oder dpkg --list
auf den beiden zurückkommt und keine Unterschiede zeigt.
Der grep -v deinstall
Teil wurde von Prevent-Paketendpkg --set-selections
entlehnt , die nach dem Ausführen von Ask Ubuntu entfernt wurden.
Ich habe die Quelle in der VM so geändert, dass sie mit der auf dem Hauptsystem übereinstimmt, und Folgendes installiert apt-transport-https
:
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 ansehe, 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 ungerade 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 in 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 den un
Angaben entsprechen dpkg -l
oder dpkg -l
überhaupt keine Ahnung davon haben ( dpkg-query: no packages found matching ...
). Ich weiß, dass es einige lokal installierte Pakete gibt, aber nicht viele. i386
nicht Figur , bis gcc-4.7-base:i386 install
viel weiter unten in der Liste (Linie 342 in der --get-Auswahlausgabe).
dpkg --get-selections
(und ich nehme an, Sie meinten das dpkg --set-selections
Transkript?)? Sogar nur der erstere hat mehr als 3.600 Zeilen und ungefähr 100 KB.
/var/lib/dpkg/Packages
(die noch länger ist) könnte ebenfalls nützlich sein - dies könnte ein Symptom für eine beschädigte Paketdatei sein.
dpkg --get-selections … | … dpkg --set-selections
ist der Weg, um die Paketauswahl zu replizieren. Wenn es für Sie fehlschlägt, müssen Sie weitere Informationen darüber bereitstellen, warum. Veröffentlichen Sie Ihren vollständigen Quellensatz auf beiden Systemen, die Ausgabe vondpkg --get-selections
und das vollständige Transkript vondpkg --get-selections
(vielleicht können wir ein Muster erkennen, indem wir sehen, was funktioniert und was nicht). Ist das Hauptsystem amd64 oder i386? Funktioniert es, wenn Sie die i386-Architektur nicht hinzufügen?