Debmirror
Debmirror permet de réaliser un miroir des dépôts Debian en utilisant le protocole Rsync à l'image de Ftpsync. La différence majeure qui le distingue de celui-ci est sa capacité à sélectionner les branches à synchroniser. Il n'est donc pas destiné à faire un miroir complet du dépôt distant (même s'il le permet tout à fait). L'outil est plus adapté à la mise à disposition des paquets nécessaires au fonctionnement des machines de votre réseau local. Il leur permettra d'avoir accès aux paquets dont elles ont besoin sans avoir à interroger de serveur sur Internet. De par sa capacité à discriminer les branches à copier, il est plus économe en espace disque ainsi qu'en bande passante lors des opérations de synchronisation. À titre d'exemple, voici la place occupée par le résultat de ce document au 29/12/2020 :
root@debmirror:~# du -hs /var/www/dépôts/* 152G /var/www/dépôts/debian 11G /var/www/dépôts/debian-security
Installation et préparation
Comme à notre habitude lors de la mise en place de ce type d'outil, nous mettrons à disposition les paquets téléchargés via Apache2 et automatiserons la synchronisation avec Cron.
Préparation de l'environnement
Installation des dépendances
apt install --no-install-recommends apache2 debmirror debian-keyring cron
Création d'un utilisateur dédié à la synchronisation
useradd --system --home-dir /var/www/dépôts/ --user-group debmirror
Création des répertoires d'accueil
mkdir -p /var/www/dépôts/{debian,debian-security} /var/log/debmirror/
Configuration d'Apache
Création de l'hôte virtuel
vim /etc/apache2/sites-available/debmirror.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/dépôts/
<Directory />
Options FollowSymLinks
AllowOverride none
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error-debmirror.log
CustomLog ${APACHE_LOG_DIR}/access-debmirror.log combined
</VirtualHost>
Désactivation de l'hôte virtuel par défaut
a2dissite 000-default.conf
Activation du nouveau et rechargement du service
a2ensite debmirror.conf systemctl reload apache2.service
Configuration de debmirror
L'outil a besoin d'un fichier de configuration par dépôt à synchroniser. Nous en créerons donc deux : un pour le dépôt debian, l'autre pour debian-security, le tout en amd64. Je ne synchroniserai que les branches main, contrib, non-free et main/debian-installer pour le premier dépôt ainsi que buster/updates pour le deuxième.
vim /usr/local/bin/debmirror_debian
#!/bin/bash
# Définition des variables pour Debian
hote="ftp.fr.debian.org"
racine="debian/"
methode="rsync" # au choix ftp|http|https|rsync
distributions="buster,buster-updates,sid"
sections="main,contrib,non-free,main/debian-installer"
# « main/debian-installer » de « section »
# permet une installation de la distribution via un démarrage PXE.
cible="/var/www/dépôts/debian/"
architecture="amd64" # ajouter d'autres architectures séparées par des virgules si nécessaire
# « i386,amd64 »
# Commande pour synchroniser le miroir avec Debian
/usr/bin/debmirror --nosource --passive --method="${methode}" \
--root="${racine}" --dist="${distributions}" --host="${hote}" \
--section="${sections}" --arch="${architecture}" "${cible}" \
--getcontents --keyring /usr/share/keyrings/debian-archive-keyring.gpg \
--i18n --postcleanup --progress --rsync-extra=doc,tools --diff=none > /var/log/debmirror/debmirror.$(date +%u).log
# Commande pour obtenir le sous répertoire "installer-amd64" (facultatif). Je n'ai pas trouvé une autre façon de faire...
rsync -a "${hote}"::debian/dists/buster/main/installer-amd64 "${cible}"/dists/buster/main/
vim /usr/local/bin/debmirror_debian-security
#!/bin/bash
# Définition des variables pour Debian
hote="security.debian.org"
racine="debian-security"
methode="rsync"
distributions="buster/updates"
sections="main,contrib,non-free"
cible="/var/www/dépôts/debian-security/"
architecture="amd64"
# Commande pour synchroniser le mirroir avec Debian
/usr/bin/debmirror --nosource --passive --method="${methode}" \
--root="${racine}" --dist="${distributions}" --host="${hote}" \
--section="${sections}" --arch="${architecture}" "${cible}" \
--getcontents --keyring /usr/share/keyrings/debian-archive-keyring.gpg \
--i18n --postcleanup --progress --diff=none > /var/log/debmirror/debmirror-security.$(date +%u).log
Attribution des droits
chmod ug+x /usr/local/bin/debmirror_debian /usr/local/bin/debmirror_debian-security chown -R debmirror:debmirror /var/www/dépôts /var/log/debmirror /usr/local/bin/debmirror_debian*
Synchronisation du miroir
Il convient désormais de lancer une synchronisation. Prennez en compte que cette étape va prendre un certain temps au vu de la quantité de données à rappatrier. Sachez également que le serveur ftp.fr.debian.org limite les téléchargements aux environs de 10Mo/s.
Dépôt debian
su - debmirror -c '/usr/local/bin/debmirror_debian'
Dépôt debian-security
su - debmirror -c '/usr/local/bin/debmirror_debian-security'
Automatisation
Afin de maintenir un miroir à jour, la mise en place d'une synchronisation automatique et périodique s'impose. Les dépôts Debian se répliques quatres fois par jours. Nous en ferrons de même.
Création de la crontab
crontab -e -u debmirror
00 4,10,16,22 * * * usr/local/bin/debmirror_debian 2>&1 10 4,10,16,22 * * * /usr/local/bin/debmirror_debian-security 2>&1