Comment puis-je énumérer l'ensemble de paquets Debian nécessaires pour recréer un ensemble de paquets installés?
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?
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
- itérer sur la liste des paquets retourné par le code de dannysauer
- Appel
apt-rdepends
sur chaque - 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?