Debian sarge : créer un miroir local

Le but est d'accélérer l'installation et/ou la mise-à-jour de machines sous Debian GNU/Linux. Ce miroir fournit les paquetages de base, ceux des mises-à-jour de sécurité, ceux de Christian Marillat et enfin ceux de Blackdown pour Java.

Outils utilisés

Toute la configuration se fait sur une machine en Debian Sarge (appelée mirror-srv). Nous avons besoin d'un serveur Apache (apache2 ici), de debmirror, de cron et logrotate ; les deux derniers sont installés par défaut.

Apache2

On commence par installer ce serveur, via la méthode habituelle :

# apt-get install apache2

Dans le fichier /etc/apache2/sites-available/[mon-site|default], on rajoute la définition du répertoire de stockage des miroirs :

#
# Raccourci vers les miroirs locaux
#
Alias /mirrors /var/mirrors

#
# Repertoire des miroirs locaux
#
<Directory /var/mirrors>
AllowOverride None
Options -Indexes
deny from all
allow from [mon-sous-reseau]
</Directory>

Il suffit ensuite d'activer le site, en éditant le fichier de démarrage par défaut d'apache2 (/etc/default/apache2) pour mettre la variable NO_START à 0, et lançant le service :

# /etc/init.d/apache2 start

debmirror

debmirror est disponible via la méthode habituelle :

# apt-get install debmirror

Le fichier de configuration /etc/debmirror.conf que j'utilise est le suivant. Pour l'explication des valeurs, voir la page de manuel de debmirror, très facile à lire. L'idée générale est que je prends tous les paquets via http, et ne prend que ceux pour architecture i386, sans les sources ; les autres spécifications (site de téléchargement, sections et distribution) seront indiquées au lancement de debmirror.

# /etc/debmirror.conf
# Output options
$verbose=1;
$progress=0;
$debug=0;

# Download options
# $host="ftp.fr.debian.org";
# $user="anonymous";
$remoteroot="";
$download_method="http";
# @dists="sarge";
# @sections="main,main/debian-installer,contrib,non-free";
@arches="i386";
# @extra_dirs="";
# @ignores="";
# @excludes="";
# @includes="";
# @excludes_deb_section="";
# @limit_priority="";
$skippackages=0;
$getcontents=0;
$do_source=0;
$max_batch=0;

# Security/Sanity options
$ignore_release_gpg=1;
$ignore_release=0;
$check_md5sums=0;
$ignore_small_errors=0;

# Cleanup
$cleanup=1;
$post_cleanup=0;

# Locking options
$timeout=300;

# Rsync options
$rsync_batch=200;
$rsync_options="-aIL --partial";

# FTP/HTTP options
$passive=0;
# $proxy="";

# Dry run
$dry_run=0;

# The config file must return true or perl complains.
# Always copy this.
1;

J'ai ensuite écrit un petit script, que j'appelle tous les jours par cron. Ce script va lancer la replication des paquets de base de sarge, des mises-à-jour de sécurité, de C. Marillat et enfin de Blackdown pour Java. À chaque lancement, debmirror va lire les valeurs par défaut dans /etc/debmirror.conf, et les arguments supplémentaires indiquent les variations selon les sites sources. J'ai appelé ce script mirror.sarge, et l'ai placé dans /root/bin, avec les droits d'éxéction. Son contenu est le suivant :

#!/bin/sh

set -x

#
# Standard mirror
#
debmirror -v \
        --host=ftp.fr.debian.org                \
        --root="/debian"                        \
        --dist="sarge"                          \
        --section="main,main/debian-installer,contrib,non-free" \
        /var/mirrors/debian


#
# debian-security
#
debmirror -v \
        --host=security.debian.org              \
        --dist="sarge/updates"                  \
        --section="main,contrib,non-free"       \
        /var/mirrors/debian-security


#
# debian-marillat
#
debmirror -v \
        --host=www.debian-multimedia.org	\
        --dist="sarge"                         \
        --section="main"                        \
        /var/mirrors/debian-marillat

#
# debian-java
#
debmirror -v    \
        --host=mirrors.ibiblio.org              \
        --root="pub/mirrors/blackdown/debian/"  \
        --dist="sarge"                          \
        --section="non-free"                    \
        /var/mirrors/debian-java

Cron

Pour le lancement automatique par cron, j'ai créé un répertoire de traces spécifique /var/log/mirror, et j'ai rajouté la ligne suivante dans la crontab de root :

0 8 * * *       /root/bin/mirror.sarge > /var/log/mirror/sarge.log 2>&1

logrotate

Enfin, pour la rotation des traces quotidiennes, avec conservation pendant une semaine, j'ai créé le fichier /etc/logrotate.d/mirror, avec le contenu suivant :

/var/log/mirror/*.log {
        daily
        missingok
        rotate 7
        compress
        notifempty
        sharedscripts
}

Utilisation sur les postes "clients"

Sur les postes clients, pour utiliser ces miroirs, il suffit de placer les lignes suivantes dans /etc/apt/sources.list :

# mirrored sources
deb http://mirror-srv/mirrors/debian sarge main contrib non-free
deb http://mirror-srv/mirrors/debian-security sarge/updates main contrib non-free
deb http://mirror-srv/mirrors/debian-marillat stable main
deb http://mirror-srv/mirrors/debian-java sarge non-free

Dernière modification : Saturday January 31, 2009, Nicolas KOWALSKI


Valid HTML 4.0! Valid CSS!