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.
supposez que je doive installer le paquet A. deb et cela dépend du paquet B. deb et nouveau paquet B. deb dépend du Paquet C. deb.
j'ai besoin de télécharger tous les paquets dépendants récursifs afin qu'ils puissent être installés sur une autre machine sans accès internet.
Merci.
4 réponses
pour une raison quelconque apt-rdepends
n'a pas fonctionné pour moi (lors de la recherche du paquet" docker-engine", il a manqué la dépendance sur libltdl7
qui a été introduit avec docker-engine 1.11.1-0
).
donc j'ai trouvé la suite de commande suivante.
liste récursive des dépendances
$ apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends <your-package-here> | grep "^\w" | sort -u
(vous devez évidemment changer <your-package-here>
à la fin de la ligne avec le paquet que vous voulez analyser)
la clé ici est l'option --recurse
. Malheureusement, vous ne pouvez pas spécifier le contenu que vous voulez (ou je n'ai pas trouvé le chemin) donc vous devez désactiver toutes les dépendances indésirables pour garder seulement les "dépendances". C'est un peu verbeux et difficile à retenir!
De l'apt-cache de la page de manuel:
par défaut les depends et rdepends impriment toutes les dependencies
téléchargez ces dépendances
afin de télécharger ces dépendances, lancez la commande suivante qui les téléchargera dans le répertoire de travail courant:
$ apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends <your-package-here> | grep "^\w" | sort -u)
si vous souhaitez installer ces dépendances
cela élargit légèrement la question posée, mais il semble correspondre à intention de la question.
vous avez besoin de construire le index de la juste téléchargé paquet. Ceci est fait à partir du même dossier où tout .DEB a été téléchargé:
$ dpkg-scanpackages . | gzip -9c > Packages.gz
alors il suffit de copier ce dossier (tous .deb + les paquets.gz file) au système cible qui n'a pas accès à Internet et ajoute le dossier à la liste des sources 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 paquet (Docker dans mon exemple) et ses dépendances:
$ sudo apt-get install docker-engine
vous pouvez utiliser apt-rdepends
pour obtenir toutes les dépendances pour un paquet récursivement. Et en transmettant le résultat à grep, vous ne pouvez avoir que les noms de paquets 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 paquets en utilisant apt-get download $package
et les installer hors ligne sur votre machine.
comme midihenry a souligné-installer le paquet apt-rdepends et ensuite exécuter ce
$ apt-rdepends gcc | awk ' ~ /^Depends:/{print }' | xargs apt-get download
cette ligne obtiendra toutes les dépendances récursivement et, en regardant la deuxième pipe, va télécharger tous les paquets par nom à partir du stdio, qui est ce que la ligne -
awk ~ /^Depends:/{print }
ne. imprime les noms des paquets. Si vous exécutez ces commandes additivement, vous verrez ce que je veux dire.
si vous voulez seulement 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
évidemment, remplacez package
par le nom du paquet que vous souhaitez consulter.