10
votes

Comment répertorier le jeu minimal de packages Debian nécessaires pour recréer un ensemble de packages installés?

Y a-t-il un moyen d'obtenir DPKG, apt-get ou aptitude à produire une liste des packages à installer sur une deuxième machine pour dupliquer les packages installés sur une première?

I.e. Si j'ai installé un serveur uni Ubuntu, choisissez l'option SSHD au moment de l'installation, puis installée Constray-essentielle, je m'attendrais à ce que la sortie ressemble à quelque chose comme: xxx aussi loin Comme je peux le constater, tous les outils d'emballage disponibles produiront une liste verbeuse des packages sur une boîte. Je ne suis pas intéressé par OpenSSH Libs, LD, GCC et tous les autres forfaits retirés par SSHD et Build-Essential, comme ils seront installés lors de l'installation de SSHD et de la construction.

J'aimerais voir juste la liste du paquet que je dois installer pour recréer mon ensemble actuel de packages sur une autre machine.

est-ce possible?


0 commentaires

4 Réponses :


1
votes

Donc, vous souhaitez que la liste des packages a été explicitement installée (comme, dire, Ubuntu-Desktop et Openssh) et non les dépendances automatiques? Je ne suis pas positif, mais je pense que c'est ce que dpkg --get-sélections fait. Donc, vous pouvez faire xxx

puis, sur l'autre ordinateur, utilisez le même "fichier" et exécuter xxx

je suis Pas absolument positif que ces commandes ne font que choisir manuellement des paquets, cependant, et je suis actuellement absent de tout système basé sur Debian pour vérifier. :)


1 commentaires

Non, on dirait que cela répertorie les packages qui ont été tirés en tant que dépendances. Sur ma machine, la liste comprend des packages tels que G ++, G ++ - 4.4, GCC ... que je sais a été installé par Build-Essential.



12
votes

deborphan , en quelque sorte. Il construit une liste de chaque paquet de votre système, des chiffres sur ce qui dépend de quoi et imprime les paquets qui n'ont aucune dépendance. Par défaut, il n'imprime que les bibliothèques (pour faciliter la recherche de bibliothèques installées par d'autres packages et ne plus besoin, d'où le nom). Il a des options pour faire ce que vous voulez, surtout. Je l'exécute comme:

deborphan -anp requis - non-show-section

-A Spécifie tous les packages (pas seulement des bibliothèques)
-n ignore "suggère" ou "recommande" Vérification de la dépendance (c'est-à-dire "dépend" de
-P requis répertorie tous les packages malgré la priorité
- No-Show-Section n'indique pas quelle partie de Debian Il est intégré, juste une belle fonctionnalité de formatage, vous trouverez peut-être utile pour créer une liste.

Maintenant, il manquera des packages, car certains paquets ont des dépendances circulaires. Mais ceux-ci ont tendance à être assez rares, il devrait donc vous demander suffisamment proche.


2 commentaires

Pourquoi "Deborphanan -anp -anp a-t-il besoin" d'inclure "GCC" dans sa production, lorsque "APT-RDepends Build-Essential" montre que "Build-Essential" dépend de "GCC"?


Est-ce qu'il montre une version spécifique de GCC, comme GCC-4.3 ou le paquet GCC lui-même? Si c'est le package "GCC", peut-être que la construction n'est pas réellement installée? ... Pas de bonnes suppositions, désolé. Dans ma sortie, je vois la construction-essentielle mais pas de GCC.



2
votes

Le code que Dannysauer a affiché est un début. Une fois que vous avez une liste de packages qui inclut des dépendances, vous pouvez utiliser apt-rdepends pour trouver les dépendances d'un package particulier (voir cette page par exemple, utilisation et sortie).

Contour de procédure

  1. itérale à travers la liste des colis Retourné par le code de Dannysauer
  2. appel apt-rdepends sur chaque
  3. Supprimer tous les packages de la liste qui apparaît dans la sortie de apt-rdepends

2 commentaires

Je pense que c'est aussi une approche viable, mais cela semble plus lent et plus de travail que le déborphane. Y a-t-il un problème avec l'utilisation de Deborphan que APT-RdePendends résout?


IIRC, deborphan fait simplement une liste de packages installés qui n'en ont rien dépencé d'eux. Cela peut ne pas être ce que vous voulez (voir le commentaire d'Eric ci-dessus sur deborphan éventuellement des paquets manquants). Si vous avez des problèmes, j'ai mentionné apt-rdepends car vous pouvez toujours obtenir une liste complète de tous les packages installés des deux machines, supprimez les packages communs aux listes et examiner les packages restants avec apt-rdepends pour générer la liste la plus courte possible des packages qui recréeront votre package actuel sur la deuxième machine. Cela devrait également être facilement scriptable.



1
votes

Qu'en est-il de cela:

#!/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


0 commentaires