Lors de la création de packages pour des projets internes à l'entreprise, nous perdons parfois la trace de la source du package et n'avons que le fichier binaire .deb. Pire encore, le constructeur de packages peut l'installer sur un système de production mais oublier de le laisser tomber et de quitter l'entreprise plus tard. Dans le futur, nous devons construire un nouveau serveur et nous voulons nous assurer que le .deb que nous avons trouvé dans le répertoire personnel de l'ingénieur correspond exactement à celui des serveurs existants. Existe-t-il un moyen de savoir si le .deb est exactement le même?
Sur les systèmes basés sur le régime, je ferais ce qui suit
old-server$ rpm -qi foo
new-server$ rpm -qi -p foo-1.2.3.rpm
et comparer la taille, la date de construction, l'hôte de construction et s'ils correspondent, alors je sais que j'ai le régime exact dont j'ai besoin.
Existe-t-il un moyen équivalent de le faire sur les systèmes basés sur dpkg?
Je vois que dpkg-query peut renvoyer un MD5 de certaines données, mais la page de manuel indique qu'il est lié à dselect et je ne peux pas en obtenir de données.
Je suppose que la comparaison des fichiers installés sur le système avec les fichiers à l'intérieur du package devrait vous donner une bonne idée? Vous pouvez extraire des fichiers d'un * .deb avec dpkg -x <deb-filename> <directory-to-extract-in>
et vous pouvez répertorier tous les fichiers installés par un package installé avec dpkg -L <package-name>
.
Lorsque vous avez ces informations, vous devriez pouvoir comparer les noms de fichiers, les dates de fichiers, les sommes de contrôle ou tout ce que vous voulez ...
Vous pourriez faire un dpkg -l <packagename>
et voir si le package est installé et de quelle version il s'agit. Cela peut ne pas fonctionner si vous n'avez pas de lignes directrices pour les numéros de version et autres (par exemple, lorsque vous apportez des modifications au code et libérez/installez, vous devez augmenter le numéro de version)