Maintenir un miroir Debian/Ubuntu

Avantages

Contraintes

Il faut avoir une connection Internet correcte (256kbps minimum), stable, du courant la nuit et un disque dur d'au moins 60Go :

Attention : sur une bande passante moyenne, commencer un miroir à partir de rien n'est absolument pas raisonnable. Il faut commencer avec une archive de base qui sera soit un miroir assez récent obtenu chez un collègue (sur un disque dur USB2 par exemple), soit un ensemble de cédéroms ou dévédéroms (opération assez complexe, voir en bas de la page).

L'outil : debmirror

  1. Installer le logiciel prévu pour faire des miroirs :

    # aptitude install debmirror
  2. Ecrire un ou des scripts de mise à jour des miroirs (par exemple dans /usr/local/bin/miroirs-debian) : voir des exemples ci-dessous
  3. Tester votre/vos script(s) en les lançant à la main
  4. Si tout va bien, le placer en cron avec par exemple :

# fichier /etc/cron.d/miroir-debian-ubuntu
# Lancement toutes les nuits à 2h du matin, par l'utilisateur "miroir" créée spécifiquement
0 2 * * * miroir /usr/local/bin/miroirs-debian
# 3 heures ensuite, on lance le miroir d'Ubuntu
0 5 * * * miroir /usr/local/bin/miroirs-ubuntu

Scripts pour Debian et Ubuntu

Un script pour faire ou mettre à jour un miroir Debian :

# Repertoire cible et site source (prendre le plus proche au sens réseau Internet)
LOCALDEST=/srv/www/miroirs/debian
SERVSOURCE=ftp.fr.debian.org

# Choisir les options pour la création du miroir : 
#     man debmirror  
# et/ou  
#     debmirror --help

debmirror $LOCALDEST --host=$SERVSOURCE \
        --arch=i386 --nosource --method=rsync \
        --root=:debian --dist=etch \
#        --debug --progress # décommenter pour déboguer

debmirror $LOCALDEST-security --host=security.debian.org \
        --arch=i386 --nosource --method=rsync \
        --root=:debian-security --dist=etch/updates \
#        --debug --progress # décommenter pour déboguer

exit 0

Pour Ubuntu Feisty (actuel) et Gutsy (à prévoir pour décembre 2007) :

# Repertoire cible et site source (prendre le plus proche au sens réseau Internet)
LOCALDEST=/srv/www/miroirs/ubuntu
SERVSOURCE=fr.archive.ubuntu.com

# Choisir les options pour la création du miroir : 
# lire "man debmirror" et/ou "debmirror --help"

/usr/bin/debmirror $LOCALDEST --host=$SERVSOURCE \
        --arch=i386 --root=:ubuntu --nosource \
        --ignore-release-gpg --timeout=3600 --method=rsync \
        --dist=feisty,feisty-updates,feisty-backports,feisty-security,gutsy,gutsy-updates,gutsy-backports,gutsy-security \
        --section=main,restricted,multiverse,universe \
#        --debug --progress # décommenter pour déboguer


exit 0

Vérifier la place occupée par section

Voici un petit script permettant de calculer la place utilisée par section d'archive.

/!\ Attention : vu que tout est mis en vrac dans un pool, il se base sur les informations déclarées dans les fichier Packages.

# taille-miroir.sh - script de vérification de taille de miroir
# Copyright ©2008  Agence universitaire de la Francophonie
# Licence : GPL version 2
# Auteur : Progfou <jean-christophe.andre@auf.org>, Mai.2008
#
# Usage : taille-miroir.sh [sous-dossier [dist [section [arch]]]]
# Exemple : taille-miroir.sh ubuntu intrepid
#
DIR="/srv/www/miroirs"
SUBDIR="$1"
DIST="$2"
SECTION="$3"
ARCH="$4"

cd "$DIR" || exit 1
find "${SUBDIR:-.}" -name dists -printf "%h\n" | egrep -v '/.temp(/|$)' |
while read dir
do
  dir="${dir#./}"
  printf "* Taille pour $dir :\n"
  find "$dir/dists" -name Packages -printf "%P\n" |
  while read path
  do
    dist="${path%%/*}" ; path="${path#*/}"
    [ "$DIST" ] && [ "${dist:0:${#DIST}}" != "$DIST" ] && continue
    test -d "$dir/dists/$dist" -a ! -L "$dir/dists/$dist" || continue
    file="${path##*/}" ; path="${path%/*}"
    arch="${path##*/}" ; section="${path%/*}"
    [ "$SECTION" ] && [ "$section" != "$SECTION" ] && continue
    [ "$ARCH" ] && [ "$arch" != "$ARCH" ] && continue
    size=$(awk 'BEGIN{s=0}/^Size:/{s+=$2}END{print int(s/1024/1024)}' $dir/dists/$dist/$section/$arch/$file)
    printf ". %-20s %-30s %10s : %5s Mio\n" "$dist" "$section" "$arch" "$size"
  done | sort
done
exit 0

Débuter un miroir à partir des cédéroms

En cours de migration de : http://tech.auf/wiki/MiroirDebian

Pour aller plus loin : http://tech.auf/wiki/BAP:Miroirs