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.
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.
$ 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
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)
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
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
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.
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.
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.