J'essaie de configurer un environnement de transfert dans une machine virtuelle, afin de tester les mises à jour avant de les appliquer à mon système principal.
Pour ce faire, j'ai fait une installation de base de Debian Wheezy (la même que sur le système principal) dans la VM, puis j'ai exécuté en tant que root à partir de la VM:
# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh me@main-system 'dpkg --get-selections | grep -v deinstall' | \
dpkg --set-selections
L'architecture i386 est malheureusement nécessaire dans mon cas; le système est natif amd64.
Le problème vient de l' dpkg --set-selections
exécution dans la machine virtuelle. J'ai quelques paquets qui nécessitent une manipulation spéciale (ce sont en fait la principale raison pour laquelle je veux un environnement de transfert en premier lieu) mais quand j'exécute la dernière commande ci-dessus, j'obtiens environ un milliard de lignes de sortie comme:
dpkg: warning: package not in database at line NNN: package-name
pour les packages qui devraient vraiment être disponibles dans le système de base. Les exemples incluent xterm
, yelp
et zip
.
Maintenant pour ma question:
Quel est le processus spécifique pour transférer la liste de sélection de paquets d'un système Debian à un autre (en supposant le même niveau de version Debian, dans Wheezy) et ensuite appliquer ces modifications? L'objectif est que les deux aient la même liste de packages installés, idéalement de telle sorte que faire un diff
entre les sorties de dpkg --get-selections
ou dpkg --list
sur les deux revienne sans aucune différence.
La grep -v deinstall
partie est empruntée à Empêcher les packages d'être supprimés après avoirdpkg --set-selections
terminé sur Ask Ubuntu.
J'ai changé la source dans la VM pour qu'elle soit la même que sur le système principal, en installant également 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
En regardant la sortie --set-selections, je vois:
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
...
Les numéros de ligne semblaient impairs, et la partie correspondante de la sortie de --get-selections est:
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
Notez que entre acl
et aglfn
sont acpi-support-base
, acpid
et adduser
pour lesquels aucune erreur sont signalées . Il semble que les paquets pour lesquels des erreurs sont signalées sont un
conformes dpkg -l
ou dpkg -l
n'ont aucune idée à leur sujet ( dpkg-query: no packages found matching ...
). Je sais qu'il existe des packages installés localement, mais pas beaucoup. i386
n'apparaît que gcc-4.7-base:i386 install
beaucoup plus bas dans la liste (ligne 342 dans la sortie --get-selections).
la source
dpkg --get-selections … | … dpkg --set-selections
est le moyen de répliquer les sélections de packages. Si cela échoue pour vous, vous devrez fournir plus d'informations sur la raison. Publiez votre ensemble complet de sources sur les deux systèmes, la sortie dedpkg --get-selections
et la transcription complète dedpkg --get-selections
(peut-être pouvons-nous discerner un modèle en voyant ce qui fonctionne et ce qui ne fonctionne pas). Si le système principal amd64 ou i386? Cela fonctionne-t-il si vous n'ajoutez pas l'architecture i386?dpkg --get-selections
(et je suppose que vous vouliez dire ladpkg --set-selections
transcription?)? Même le premier contient plus de 3 600 lignes et environ 100 Ko./var/lib/dpkg/Packages
(qui est encore plus longue) pourrait également être utile - cela pourrait être le symptôme d'un fichier Packages cassé.Réponses:
Pour cloner une installation Debian, utilisez l'
apt-clone
utilitaire. Il est disponible (en tant que package séparé, ne faisant pas partie de l'installation par défaut) dans Debian depuis Wheezy et dans Ubuntu depuis 12.04. Sur la machine existante, exécutezCela crée un fichier
foo.apt-clone.tar.gz
. Copiez-le sur la machine de destination et exécutezSi vous travaillez avec un ancien système où il
apt-clone
n'est pas disponible, ou si vous souhaitez simplement répliquer la liste des packages installés mais pas de fichier de configuration, voici les étapes manuelles.Sur la machine source:
Sur la machine cible:
Je crois que vous êtes affecté par un changement incompatible dans dpkg qui l'a d'abord transformé en sifflement. Voir bug # 703092 pour le fond.
La petite histoire est que
dpkg --set-selections
maintenant accepte uniquement les noms de packages qui sont présents dans le fichier/var/lib/dpkg/status
ou/var/lib/dpkg/available
. Si vous utilisez uniquement APT pour gérer les packages, comme la plupart des gens, il/var/lib/dpkg/available
n'est pas tenu à jour.Après avoir exécuté
apt-get update
et avant d'exécuterdpkg --set-selections
etapt-get -u dselect-upgrade
, exécutez la commande suivante:À partir de Jessie, vous pouvez simplifier cela en
Sinon, exécutez
ou encore plus simple
Une autre méthode simple qui ne nécessite pas l'installation d'un package supplémentaire mais qui téléchargera à nouveau les listes de packages est
Voir la FAQ dpkg pour plus d'informations. (Ceci est mentionné dans la page de manuel de dpkg, mais plus d'une manière qui vous rappellerait le problème si vous étiez déjà au courant, pas d'une manière qui explique comment résoudre le problème!)
Notez que le clonage d'une installation de package avec
dpkg --set-selections
ne restaure pas la marque automatique / manuelle dans APT. Voir Restauration de toutes les données et dépendances de dpkg --set-selections '*' pour plus de détails. Vous pouvez enregistrer les repères sur le système source avecet les restaurer sur le système cible avec
la source
dpkg --set-selections
depuis pré-sifflement!--set-selections
. Maintenant, comment appliquer les modifications? Mêmeapt-get -u dist-upgrade
ne mentionne qu'une poignée de packages (tous liés à ZFS) où il devrait y avoir des centaines sinon des milliers de packages affectés.apt-get -u dselect-upgrade
Comment je l'ai fait
Sur l' hôte source :
attention
/etc/apt/sources.list.d
si utilisé ...Copiez ensuite le
source.sel
fichier sur l'hôte de destination.Sur l' hôte de destination :
adapter sources.list même avec différents miroirs, mais même liste de composants .
Et maintenant, mon hôte de destination installe actuellement beaucoup de choses, alors je pourrais prendre un certain temps pour poster ceci.
la source