Télécharger un paquet Debian et toutes ces dépendances

Published: 20-12-2014

Updated: 26-06-2017

By: Maxime de Roucy

tags: deb debian

Comment télécharger un paquet Debian et ces dépendances. Par exemple pour mettre à jour un dépot reprepro ou pour installer un paquet sur une machine ne disposant pas de connexion internet.

Paquet non installé

PACKAGE="…"
apt-get --print-uris --yes install "$PACKAGE" | grep ^\' | cut -d\' -f2 > downloads.list

La commande n’installera pas le paquet, elle sauvegardera juste les url.

Les paquets listés sont ceux qui ne sont pas installés, ça ne liste pas toutes les dépendances.

Paquet installé

Pour avoir la liste des url des paquets installé ; par exemple pour être sûr de pouvoir reconstruire une plateforme identique après changement des repos.

Installation de apt-rdepends

apt install apt-rdepends

On récupère la liste de tous les paquets listé dans la base dpkg avec leurs version exacte. Il n’est pas nécessaire de ne prendre que les paquets installé, ce filtrage se fera plus tard via le join.

TMPDIR=`mktemp -d`
dpkg-query -f '${Package} ${Version}\n' -W | sort > "${TMPDIR}/dpkg-list"

On récupère la liste les dépendances du paquet (de façon récursive ; on a toutes les dépendances).

PACKAGE="…"
apt-rdepends $PACKAGE 2>/dev/null | grep -P '^\w' | sort > "${TMPDIR}/rdepends-list"

On fait une jointure des deux listes pour obtenir la liste des dépendance du paquet, avec leurs versions.

join -j 1 "${TMPDIR}/dpkg-list" "${TMPDIR}/rdepends-list"

On format cet output et on récupère la list des urls de téléchargement des paquets :

join -j 1 "${TMPDIR}/dpkg-list" "${TMPDIR}/rdepends-list" | tr ' ' = | xargs apt-get --print-uris --yes --reinstall -o 'dir::cache::archives=/tmp/non-existant-directory' install | grep ^\' | cut -d\' -f2 > downloads.list

Notes

On peut remplacer apt-get --print-uris … par apt-get download pour téléchargé les paquet dans le répertoire courant.

Pour téléchargé les url listées dans downloads.list :

wget --input-file downloads.list