Question Calculer une liste de différence entre les packages installés sur deux hôtes


J'ajoute juste quelques problèmes avec mes serveurs virtuels Debian et je les ajoute pour les réinstaller tous à partir de zéro. Cependant, j'avais toujours accès à l'ancienne version et je pouvais récupérer la liste des packages installés.

Afin de faciliter le processus de restauration d'un serveur virtuel à l'avenir, je souhaite créer une liste de packages spécifiques pour chacun de mes serveurs.

Pour mieux expliquer ce que je veux réaliser. J'ai déjà un processus automatisé pour créer un nouveau serveur virtuel avec un paquet de base et une configuration utilisée partout. Maintenant, je veux enregistrer le delta avec ce "squelette" pour faciliter la réinstallation d'un serveur particulier.

Un réel avantage sera également de sauvegarder les fichiers de configuration modifiés par défaut, mais je ne peux vivre qu'avec la liste de paquets.

En bref, je veux un moyen de créer une liste de paquets installés sur un hôte mais pas sur un autre.

Ce sera vraiment bien si la liste ne contient que des paquetages installés manuellement et pas la liste de toutes les dépendances.

Si vous disposez de certains outils conçus pour réaliser cette tâche particulière, n'hésitez pas à les proposer, mais je souhaite que la dépendance soit aussi réduite que possible. Pour information, ce ne sont pas exactement des serveurs virtuels, mais des conteneurs LXC.


11
2017-11-07 20:57


origine


Juste une pensée, mais il serait peut-être temps de commencer à travailler dans cette direction opposée. Au lieu d'essayer d'extraire l'information, pourquoi installer un système de gestion de la configuration (marionnette). Transférez ensuite les éléments sur vos systèmes gérés. - Zoredache
Oh, BTW, voyez cette question. serverfault.com/questions/3852/… - Zoredache
@Zoredache Je cherche actuellement un meilleur moyen de gérer tout cela, mais en attendant, je voulais trouver un moyen rapide de sauvegarder l'état des serveurs au cas où. Merci pour le lien ! - krtek


Réponses:


Sur l'installation de référence (une seule fois):

dpkg-query -W -f='${Package}\n' | sort > baselist.txt

(Ce qui suit suppose bash)

Pour obtenir les packages ajoutés à partir de l'installation de référence (cela ne montre pas ce qui a été supprimé):

comm -1 -3 baselist.txt <(dpkg-query -W -f='${Package}\n' | sort)

Encore mieux, en évitant la copie de baselist.txt:

comm -1 -3 <(ssh user@refserver cat /path/to/baselist.txt) <(dpkg-query -W -f='${Package}\n' | sort)

12
2017-11-07 21:20





sur l'ancien serveur, lancez:

dpkg --get-selections> old-packages-list

Copiez le fichier ci-dessus sur le nouveau serveur et exécutez-le sur le nouveau serveur:

dpkg --set-selections <old-packages-list

apt-get update

mise à jour de dselect

En outre, n'oubliez pas d'ajouter tous les dépôts supplémentaires de /etc/apt/sources.list d’ancien serveur à nouveau, bien avant la migration des packages, comme si ce n’était pas le cas, la plupart des packages resteraient non installés.


2
2017-11-07 21:09



Cela sauvegardera la liste complète des paquets, et c'est exactement la solution que j'ai utilisée pour restaurer les serveurs. Mais maintenant, pour faciliter le processus à l'avenir, je veux enregistrer uniquement la liste des packages qui est différente du serveur de base. - krtek
ok, c’est très facile aussi., d’abord, sauvegardez la liste de l’ancien serveur avec "dpkg --get-selections> old-packages-list", puis obtenez la liste des paquets stockés sur le nouveau serveur avec "dpkg --get-selections > new-packages-list ",,, lancez la commande" cat old-packages-list | awk '{print $ 1}'> old-list ",,, même commande sur le nouveau serveur, mais remplacez ancien par nouveau. lancer un diff sur les deux fichiers, ce qui vous montrera la différence. par diff -w old-list new-list - Farhan
cut -f1 sera probablement plus rapide que awk, et comme commenté dans la réponse de Khaled, diff ne donnera pas toujours un bon résultat. La solution avec comm vraiment s'il vous plaît pour le moment ... Cependant, il me manque une version qui ne répertorie que les paquets installés manuellement. - krtek


Vous pouvez utiliser la commande suivante pour obtenir la liste complète des packages sur les deux serveurs:

     dpkg -l | sort > old_file
     dpkg -l | sort > new_file

Ensuite, vous pouvez obtenir les différences en utilisant:

     diff -Nur old_file new_file > changes.txt

Vous pouvez filtrer les modifications nécessaires à l'aide de grep. En outre, diff peut être utilisé pour obtenir les modifications dans les fichiers de configuration et générer des correctifs à appliquer en cas de besoin. Au fait, diff peut comparer deux dossiers et pas seulement deux fichiers.


1
2017-11-07 21:34



Le problème avec la sortie diff est qu’elle ne peut pas être directement alimentée par apt-get pour tout réinstaller de manière automatique ... Et comme proposé par Shellholic, utiliser comm est meilleur dans ce cas particulier, diff pourrait produire des résultats erronés si la la liste des paquets est vraiment longue. - krtek
Un autre problème est que dpkg redimensionne automatiquement la colonne de sortie. Donc, dpkg -l depuis un serveur avec un nom de paquetage plus long rend le diff difficile. - Paolo


Plan est conçu pour répondre exactement à vos besoins. Il crache une description des packages installés et des fichiers de configuration qui ont été modifiés. Il est capable de convertir ces descriptions en scripts Puppet ou Chef afin de les appliquer aux boîtes blanches.


1
2018-03-06 12:02





Également trouvé ce paquet utile, dont la description est la suivante:

Un script Bash qui compare l’arborescence du système de fichiers d’un paquet Debian à l’arborescence du système de fichiers actuel, en imprimant des différences unifiées pour des fichiers différents.

https://code.google.com/p/dpkg-diffs/

Un seul fichier bash que vous pouvez coller dans votre chemin quelque part et fonctionner - semble fonctionner pour moi et ce n’est pas trop vieux.

J'espère que ça aide quelqu'un.


0
2017-09-07 21:53