GNU/Linux >> Tutoriels Linux >  >> Debian

Debian – Comment répliquer les sélections de paquets installés d'un système Debian à un autre ? (debian Wheezy) ?

J'essaie de configurer un environnement intermédiaire dans une machine virtuelle, afin de tester les mises à jour avant de les appliquer à mon système principal.

Pour ce faire, j'ai effectué une installation de base de Debian Wheezy (comme sur le système principal) dans la VM, puis exécuté en tant que root depuis la VM :

# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh [email protected] '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 dpkg --set-selections exécuter dans la machine virtuelle. J'ai certains packages qui nécessitent une gestion spéciale (c'est en fait la principale raison pour laquelle je veux un environnement de staging en premier lieu) mais lorsque j'exécute la dernière commande ci-dessus, j'obtiens environ un gazillion 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) puis en appliquant ensuite ces modifications ? L'objectif est que les deux aient la même liste de packages installés, idéalement de sorte que faire un diff entre les sorties de dpkg --get-selections ou dpkg --list sur les deux revient ne montrant aucune différence.

Le grep -v deinstall la partie est empruntée à Empêcher les paquets d'être supprimés après avoir fait dpkg --set-selections sur Ask Ubuntu.

J'ai changé la source dans la machine virtuelle 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 qu'entre acl et aglfn sont acpi-support-base , acpid et adduser pour lesquels aucune erreur n'est signalée . Il semble que les packages pour lesquels des erreurs sont signalées soient soit un selon dpkg -l , ou dpkg -l n'en a aucune idée (dpkg-query: no packages found matching ... ). Je sais qu'il existe des packages installés localement, mais pas beaucoup. i386 ne figure pas avant l'installation de gcc-4.7-base:i386 install beaucoup plus bas dans la liste (ligne 342 dans la sortie –get-selections).

Connexes :Quelles sont les différences fondamentales entre les coques * NIX traditionnelles ? ?

Réponse acceptée :

Pour cloner une installation Debian, utilisez le apt-clone utilitaire. Il est disponible (en tant que paquet 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écutez

apt-clone clone foo

Cela crée un fichier foo.apt-clone.tar.gz . Copiez-le sur la machine de destination et exécutez

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

Si vous travaillez avec un ancien système où apt-clone n'est pas disponible, ou si vous souhaitez simplement répliquer la liste des packages installés mais pas n'importe quel fichier de configuration, voici les étapes manuelles.

  • Sur la machine source :

    cat /etc/apt/sources.list /etc/apt/sources.list.d >sources.list
    dpkg --get-selections >selections.list
    apt-mark showauto >auto.list
    
  • Sur la machine cible :

    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
    

Je crois que vous êtes affecté par un changement incompatible dans dpkg qui l'a d'abord rendu sifflant. Voir le bogue #703092 pour le contexte.

La petite histoire est que dpkg --set-selections n'accepte désormais que les noms de packages présents dans le fichier /var/lib/dpkg/status ou /var/lib/dpkg/available . Si vous n'utilisez APT que pour gérer les packages, comme la plupart des gens, alors /var/lib/dpkg/available n'est pas tenu à jour.

Après avoir exécuté apt-get update et avant d'exécuter dpkg --set-selections et apt-get -u dselect-upgrade , exécutez la commande suivante :

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

À partir de Jessie, vous pouvez simplifier cela pour

apt-cache dumpavail | dpkg --merge-avail

Sinon, exécutez

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

ou encore plus simple

apt-get install dctrl-tools
sync-available

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

dselect update

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 paquet avec dpkg --set-selections ne restaure pas la marque automatique/manuel dans APT. Voir Restauration de toutes les données et dépendances depuis dpkg –set-selections ‘*’ pour plus de détails. Vous pouvez enregistrer les repères sur le système source avec

apt-mark showauto >auto.list

et restaurez-les sur le système cible avec

xargs apt-mark auto <auto.list

Debian
  1. Comment mettre à niveau le système Debian Linux de Wheezy vers la version stable de Jessie

  2. Comment installer Gradle sur Debian 10

  3. Comment installer AnyDesk sur Debian 10

  4. Debian – Comment installer un seul paquet depuis Debian Testing ou Unstable sur Stable ?

  5. Comment compiler à partir des sources et installer Nginx dans un VPS Debian 7 (Wheezy)

Comment installer des paquets sur Debian 10

Comment installer PostgreSQL 14 sur Debian 11

Comment installer le paquet Debian (.deb)

Comment installer Webmin sur Debian 11

Comment rediriger d'un domaine à un autre dans Nginx et Debian 11

Comment installer Wine sur Debian 7 Wheezy