Je recherchais un outil capable de facilement récupérer des paquets (binaires ou sources) Debian provenant de dépôts multiples (architectures ou distributions). Il me semblait qu'il n'y avait rien capable de me satisfaire aujourd'hui. Puis, je me suis rappelé de la puissance des fichiers de configuration d'apt. Finalement, apt répond parfaitement à mes besoins.

Il est possible de spécifier des options de configuration sur la ligne de commande. Il suffit de modifier Dir pour que apt utilise un autre répertoire comme racine. L'option Dir::State::status est particulière car c'est un chemin absolu. Nous devons la modifier aussi:

apt-get -o Dir=/tmp/woody-ppc -o Dir::State::status=/tmp/woody-ppc/dpkg_lib/status update

Vu que je ne souhaite pas avoir une arborescence complète, j'ai aussi modifier les autres chemins afin d'avoir une arborescence moins profonde:

apt-get -o Dir=/tmp/woody-ppc -o Dir::State::status=/tmp/woody-ppc/dpkg-lib/status Dir::Etc=etc -o Dir::State=apt-lib -o Dir::Cache=apt-cache update

Apt ne fonctionnera pas si les répertoires n'existent pas:

mkdir -p /tmp/woody-ppc/etc
mkdir -p /tmp/woody-ppc/apt_lib/lists/partial
mkdir -p /tmp/woody-ppc/apt_cache/archives/partial
mkdir -p /tmp/woody-ppc/dpkg_lib
touch /tmp/woody-ppc/dpkg_lib/status

Et bien entendu, il nous faut un fichier /tmp/woody-ppc/etc/sources.list valable:

cat << EOF > /tmp/woody-ppc/etc/sources.list
deb http://archive.debian.org/debian/ woody contrib main non-free
deb http://archive.debian.org/debian/ woody contrib main non-free
EOF

Enfin, l'option APT::Architecture nous permet d'obtenir les paquets d'une autre architecture:

apt-get -o Dir=/tmp/woody-ppc -o Dir::State::status=/tmp/woody-ppc/dpkg_lib/status Dir::Etc=etc -o Dir::State=apt_lib -o Dir::Cache=apt_cache -o APT::Architecture=ppc update

J'ai créé un fichier de configuration pour abréger cette ligne. Il me suffit maintenant de faire:

apt-get -c woody-ppc.conf update

Pour résumer, pour gérer un nouveau repository, je fais:

mkdir -p /tmp/woody-ppc/etc
mkdir -p /tmp/woody-ppc/apt-lib/lists/partial
mkdir -p /tmp/woody-ppc/apt-cache/archives/partial
mkdir -p /tmp/woody-ppc/dpkg-lib
touch /tmp/woody-ppc/dpkg-lib/status
cat << EOF > woody-ppc.conf
APT::Architecture "ppc"; 
Dir "/tmp/woody-ppc/";
Dir::Etc "etc/";
Dir::State "apt_lib/";
Dir::Cache "apt_cache/";
# We need absolute path there
Dir::State::status "/tmp/woody-ppc/dpkg_lib/status";
EOF
cat << EOF > /tmp/woody-ppc/etc/sources.list
deb http://archive.debian.org/debian/ woody contrib main non-free
deb http://archive.debian.org/debian/ woody contrib main non-free
EOF

puis,

# Vérifier la configuration
apt-config -c woody-ppc.conf dump
# Mettre à jour la liste de paquets
apt-get -c woody-ppc.conf update
# Quelle version de bash y avait-il en woody?
apt-cache -c woody-ppc.conf show bash
# Recupération d'une binaire de bash pour ppc
apt-get -c woody-ppc.conf install --download-only bash
apt-get -c woody-ppc.conf install --print-uris bash
# Bon départ pour porter le bash de woody sur une autre distribution
apt-get -c woody-ppc.conf source bash