Comment puis-je énumérer l'ensemble de paquets Debian nécessaires pour recréer un ensemble de paquets installés?

StackOverflow https://stackoverflow.com/questions/2273836

  •  20-09-2019
  •  | 
  •  

Question

Y at-il un moyen d'obtenir dpkg, apt-get ou aptitude à produire une liste des paquets qui doivent être installés sur une deuxième machine à dupliquer les paquets installés sur une première?

i.e.. Si j'ai installé un serveur Ubuntu ordinaire, a choisi l'option sshd lors de l'installation, puis installé build-essential j'attendre la sortie de regarder quelque chose comme:

#ubuntu 9.10 server
openssh-sshd
build-essential

Pour autant que je peux voir, tous les outils disponibles d'emballage produiront une liste verbeux des paquets sur une boîte. Je ne suis pas intéressé par libs OpenSSH, ld, gcc, et tous les autres paquets tirés par sshd et construis essentiels, car ils seront installés quand j'installe sshd et build-essential.

Je voudrais juste voir la liste du paquet que je dois installer pour recréer mon ensemble de paquets en cours sur une autre machine.

Est-ce possible?

Était-ce utile?

La solution

deborphan, en quelque sorte. Il construit une liste de chaque paquet dans votre système, ce qui figure dépend de ce que, et imprime les paquets qui n'ont pas de dépendances. Par défaut, il imprime uniquement les bibliothèques (pour le rendre facile de trouver les bibliothèques qui ont été installés par d'autres paquets et ne sont plus nécessaires, d'où le nom). Il a des options pour faire ce que vous voulez, la plupart du temps. Je lance comme:

deborphan -anp required --no-show-section

-a spécifie tous les paquets (pas seulement les bibliothèques)
-n ignore « Suggère » ou « recommande » vérification des dépendances (à savoir juste « Depends »)
-p required énumère tous les paquets en dépit de la priorité
--no-show-section n'indique pas quelle partie de debian il est dedans, juste une fonctionnalité intéressante de formatage, vous trouverez peut-être utile pour la construction d'une liste.

Maintenant, il va manquer des paquets, car certains paquets contiennent des dépendances circulaires. Mais ceux ont tendance à être assez rares, il devrait vous permettre de vous rapprocher suffisamment.

Autres conseils

Le code qui dannysauer affiché est un début. Une fois que vous avez une liste de paquets qui comprend les dépendances, vous pouvez utiliser apt-rdepends pour trouver la dépendances pour un paquet particulier (voir cette page par exemple l'utilisation et de la production).

contour de procédure

  1. itérer sur la liste des paquets retourné par le code de dannysauer
  2. Appel apt-rdepends sur chaque
  3. Supprimer tous les paquets de la liste qui apparaissent dans la sortie de apt-rdepends

Alors, vous voulez la liste des paquets qui ont été explicitement installés (comme, par exemple, ubuntu-desktop et OpenSSH), et non les dépendances automatiques? Je ne suis pas positif, mais je pense que ce dpkg --get-selections fait. Ainsi, vous pouvez faire

dpkg --get-selections > file

Et puis, sur l'autre ordinateur, utilisez le même « fichier » et exécutez

dpkg --set-selections  < file
apt-get dselect-upgrade

Je ne suis pas tout à fait positif que ces commandes ne juste paquets sélectionnés manuellement, bien que, et je ne suis pas à tous les systèmes basés sur Debian pour vérifier sur. :)

Qu'en est-il ceci:

#!/bin/bash

packages=$(dpkg --get-selections | grep '[[:space:]]install$' | awk '{print $1}')

for pkg in $packages
do
    nr_lines=$(apt-cache -i rdepends $pkg | wc -l )
    if [ "$nr_lines" = "2" ]
    then
        echo $pkg
    fi
done

Est-ce que cela fonctionne bien? Peut-il être amélioré en quelque sorte?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top