web-dev-qa-db-fra.com

Comment lister / télécharger les dépendances récursives d'un paquet Debian?

J'ai besoin de lister/télécharger toutes les dépendances récursives d'un paquet Debian.

Supposons que je doive installer le paquet a.deb et cela dépend du paquet b.deb et encore le paquet b.deb dépend du paquet c.deb.

J'ai besoin de télécharger tous les packages dépendants récursifs afin qu'ils puissent être installés sur une autre machine sans accès à Internet.

Merci.

31
Bharat Bhansali

Pour certaines raisons apt-rdepends n'a pas fonctionné pour moi (lors de la recherche du package 'docker-engine', la dépendance sur libltdl7 qui a été introduit avec docker-engine 1.11.1-0). UPD Censément dû au fait que apt-rdepends ne suit pas et ne répertorie pas les recommandations par défaut. Et ne suit pas les packages virtuels.

J'ai donc trouvé la suite de commandes suivante.

Liste récursivement des dépendances

$ apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances <your-package-here> | grep "^\w" | sort -u

(vous devez évidemment changer <your-package-here> en fin de ligne avec le package que vous souhaitez analyser)

La clé ici est le --recurse option. Malheureusement, vous ne pouvez pas spécifier le contenu que vous souhaitez (ou je n'ai pas trouvé le chemin), vous devez donc désactiver toutes les dépendances indésirables pour ne conserver que les "dépendances". C'est un peu bavard et difficile à retenir!

Depuis la page de manuel apt-cache:

Par défaut, depend et rdepends impriment toutes les dépendances

Téléchargez ces dépendances

Donc, pour télécharger ces dépendances, exécutez la commande suivante qui les téléchargera dans le répertoire de travail actuel:

$ apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances <your-package-here> | grep "^\w" | sort -u)

Facultativement, pour installer ces dépendances

Cela étend légèrement la question posée, mais elle semble correspondre à intention de la question.

Vous devez construire le index des packages que vous venez de télécharger. Cela se fait à partir du même dossier où tous les fichiers .deb ont été téléchargés:

$ dpkg-scanpackages . | gzip -9c > Packages.gz

Ensuite, copiez simplement ce dossier (tous .deb + le fichier Packages.gz) sur le système cible qui n'a pas accès à Internet et ajoutez le dossier à la liste source APT.

$ echo "deb file:<your folder here> ./" | Sudo tee -a /etc/apt/sources.list
$ Sudo apt-get update

Et voilà

Sur un système sans accès Internet, je peux installer un package (Docker dans mon exemple) et ses dépendances:

$ Sudo apt-get install docker-engine
47
Yann Vo

Vous pouvez utiliser apt-rdepends pour obtenir récursivement toutes les dépendances d'un package. Et en canalisant le résultat vers grep, vous ne pouvez avoir que les noms des packages et omettre les informations inutiles.

Exemple:

 $ apt-rdepends cowsay | grep -E '^[a-zA-Z0-9]'

Sortie:

cowsay
Perl
libbz2-1.0
libc6
libgcc1
gcc-4.9-base
multiarch-support
libdb5.3
libgdbm3
dpkg
liblzma5
libselinux1
libpcre3
tar
libacl1
libattr1
zlib1g
install-info
Perl-base
Perl-modules

Vous pouvez ensuite télécharger ces packages à l'aide de apt-get download $package et installez-les hors ligne sur votre ordinateur.

Par défaut, apt installe les recommandations, vous pouvez donc exécuter apt-rdepends ainsi:

apt-rdepends -f Depends,PreDepends,Recommends -s Depends,PreDepends,Recommends cowsay

Puisque apt-rdepends par défaut suit et affiche uniquement Depends, PreDepends.

7
Mehdi Yedes

Comme midihenry l'a souligné - installez le paquet apt-rdepends puis exécutez ce

$ apt-rdepends gcc | awk '$1 ~ /^Depends:/{print $2}' | xargs apt-get download

cette ligne obtiendra toutes les dépendances de manière récursive et, en regardant le deuxième canal, téléchargera tous les packages par nom depuis le stdio, ce qui est ce que la ligne -

awk $1 ~ /^Depends:/{print $2} Est-ce que. imprime les noms des packages. Si vous exécutez ces commandes de manière additive, vous verrez ce que je veux dire.

2
Evgeny Danilenko

Si vous souhaitez uniquement télécharger un paquet Debian, alors:

apt-get -d package

ou

apt-get download package

Sinon, si vous voulez juste une liste des dépendances d'un paquet:

apt-cache depends package

De toute évidence, remplacez package par le nom du package que vous souhaitez rechercher.

0
Oerd