Créer un miroir local Debian/Ubuntu

 

J'installe beaucoup de machines virtuelles avec les xen-tools sur mon serveur xen. Les xen-tools font un debootstrap d'une Debian/Ubuntu à partir des dépôts. J'installe aussi assez régulièrement sur ces machines virtuelles des applications qui demandent beaucoup de dépendances. Je vis dans un petit village, et donc ma ligne ADSL n'est pas très rapide. J'avais donc besoins de mettre en place un miroir des principales distributions que j'utilise au quotidien. Je commence ici par du Debian/Ubuntu car ce sont les distributions que j'utilise le plus, Debian en premier pour mes serveurs et Ubuntu pour mes postes bureautique, bien que petit à petit je test de plus en plus Ubuntu en serveur. Je verrais plus tard pour rajouter des miroirs Centos, Fedora, etc ...

Mise en place du miroir

Préparer de la place

La première chose à prendre en considération c'est que tout cela prends beaucoup d'espace disque. J'ai de la chance d'avoir deux disque de 1To sous la main donc ce n'est pas un problème pour moi. Il faut compter les besoins suivants, pour les architectures i386 et amd64 : 44G    be.archive.ubuntu.com 48G    ftp.fr.debian.org 5,5G    security.debian.org 255M    volatile.debian.org 5,4G    www.backports.org NB : j'ai téléchargé les miroirs Ubuntu à partir de la Belgique car les Français ne voulaient pas fonctionner.

Installer apt-mirror

# apt-get install apt-mirror

Par défaut apt-mirror va télécharger les fichiers dans le répertoire /var/spool/apt-mirror. Si ce n'est pas le répertoire pour lequel vous avez préparer de la place, il va falloir recréer la même arborescence que celui-ci. Par exemple moi je me suis créé un disque lvm que j'ai monté sur le répertoire /var/miroir.

# mkdir -p /var/miroir/{mirror,skel,var}
# cp /var/spool/apt-mirror/var/clean.sh /var/miroir/var/
# chown -R apt-mirror.apt-mirror /var/miroir/

 

Paramétrage

On édite le fichier /etc/apt/mirror.list :

############# config ##################
#
set base_path    /var/miroir
set mirror_path  $base_path/mirror
set skel_path    $base_path/skel
set var_path     $base_path/var
set cleanscript $var_path/clean.sh
set defaultarch  i386
set nthreads     20
set _tilde 0
#
############# end config ##############

# Repository for Debian Lenny
deb http://ftp.fr.debian.org/debian lenny main contrib non-free
deb-src http://ftp.fr.debian.org/debian lenny main contrib non-free

# Debian Security
deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main

# Debian Volatile
deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

# Debian backports
deb http://www.backports.org/debian lenny-backports main contrib non-free
deb-src http://www.backports.org/debian lenny-backports main contrib non-free

# Repository for Ubuntu karmic
deb http://be.archive.ubuntu.com/ubuntu karmic main restricted universe multiverse
deb http://be.archive.ubuntu.com/ubuntu karmic-updates main restricted universe multiverse
deb http://be.archive.ubuntu.com/ubuntu karmic-security main restricted universe multiverse
deb http://be.archive.ubuntu.com/ubuntu karmic-backports main restricted universe multiverse

Pour télécharger les miroirs i386 et amd64 je n'ai pas trouvé d'autre moyen que de faire deux fichiers de configuration en faisant varier la variable defaultarch. Je me retrouve donc avec un fichier mirror.list_i386 et un fichier mirror.list_amd64. Reste à mettre cela dans nos tâches cron :

00 23 * * * /usr/bin/apt-mirror /etc/apt/mirror.list_i386
00 23 * * * /usr/bin/apt-mirror /etc/apt/mirror.list_amd64

Une fois les téléchargements terminés (5 nuits au total pour moi), il va falloir mettre à disposition ces miroirs pour nos machines locales.

Mise à disposition du miroir

On va mettre nos miroirs à disposition via le protocole http. Pour cela on va installer apache :

# apt-get install apache2

puis on modifie le vhost :

...
Alias /debian /var/miroir/mirror/ftp.fr.debian.org/debian
 <Directory /var/miroir/mirror/ftp.fr.debian.org/debian>
 Options +Indexes +SymlinksIfOwnerMatch
 IndexOptions NameWidth=* +SuppressDescription
 </Directory>

 Alias /security-debian /var/miroir/mirror/security.debian.org
 <Directory /var/miroir/mirror/security.debian.org>
 Options +Indexes +SymlinksIfOwnerMatch
 IndexOptions NameWidth=* +SuppressDescription
 </Directory>

 Alias /debian-volatile /var/miroir/mirror/volatile.debian.org/debian-volatile
 <Directory /var/miroir/mirror/volatile.debian.org/debian-volatile>
 Options +Indexes +SymlinksIfOwnerMatch
 IndexOptions NameWidth=* +SuppressDescription
 </Directory>

 Alias /debian-backports /var/miroir/mirror/www.backports.org/debian
 <Directory /var/miroir/mirror/www.backports.org/debian>
 Options +Indexes +SymlinksIfOwnerMatch
 IndexOptions NameWidth=* +SuppressDescription
 </Directory>

 Alias /ubuntu /var/miroir/mirror/be.archive.ubuntu.com/ubuntu
 <Directory /var/miroir/mirror/be.archive.ubuntu.com/ubuntu>
 Options +Indexes +SymlinksIfOwnerMatch
 IndexOptions NameWidth=* +SuppressDescription
 </Directory>
...

Et un petit reload d'Apache pour remettre tout cela en route.

Côté client

On paramètre maintenant nos machines qui vont utiliser ce miroir en modifiant notre fichier /etc/apt/sources.list :

deb http://192.168.1.202/debian/ lenny main
deb-src http://192.168.1.202/debian/ lenny main

deb http://192.168.1.202/security-debian lenny/updates main contrib non-free
deb-src http://192.168.1.202/security-debian lenny/updates main contrib non-free

deb http://192.168.1.202/debian-volatile lenny/volatile main
deb-src http://192.168.1.202/debian-volatile lenny/volatile main

deb http://192.168.1.202/debian-backports lenny-backports main contrib non-free
deb-src http://192.168.1.202/debian-backports lenny-backports main contrib non-free

On mêt à jour la base de données :

# apt-get update

Si vous obtenez une erreur de keyring pour le dépôt debian-backports :

# apt-get install debian-backports-keyring

Et voilà de quoi accélérer mes déploiements de machines virtuelles .. et réelles.