Comment créer un dépôt miroir Debian ?

par Korben -

Bon, les dépôts sous Debian, vous connaissez. Vous faites un update, ça les synchronise, puis après vous installez vos logiciels ou vous faites un upgrade pour les mettre à jour.

Mais maintenant, imaginons que vous ayez plus de 2000 machines sous Linux à mettre à jour en même temps. Difficile de saturer la connexion réseau pour aller taper sur les serveurs de dépôts officiels. Et un peu con aussi de récupérer 2000 fois la même donnée.

Et je ne vous parle pas des machines en réseau local uniquement qui n’ont pas accès à Internet. Donc pas de possibilité d’être mise à jour aussi simplement.

Heureusement, il est possible de créer ce qui s’appelle un dépôt miroir, c’est-à-dire un clone des dépôts dont vous avez besoin pour vous en servir en local et ainsi éviter de pourrir votre bande passante.

Pour info, le miroir complet pour Debian représente environ 1,3 To et pour Debian Security, 137 Go.

On va commencer par installer Apache2 ou nginx comme ceci via un terminal :

apt install apache2 (ou nginx)

On installe aussi Git et rsync

apt install git rsync

Puis créez un dossier miroir dans le répertoire /var/www/

sudo mkdir /var/www/miroir

Puis créez un utilisateur nommé “miroir” qui sera utilisé uniquement pour faire tourner le script du dépôt :

adduser --disabled-password miroir

Donnez les droits d’appartenance à l’utilisateur miroir sur le dossier /var/www/miroir :

sudo chown -R miroir /var/www/miroir/

Ensuite, connectez-vous en tant que cet utilisateur miroir avec la commande

sudo su miroir

Ensuite le but de la manoeuvre consiste à cloner le repo de Debian.

Rendez-vous dans le home de votre user miroir :

cd /home/miroir

Clonez le git des sources de l’outil archvsync de Debian

git clone https://salsa.debian.org/mirror-team/archvsync.git

Placez vous ensuite dans le répertoire d’archvsync :

cd /home/miroir/archvsync/

Puis copiez le fichier de config du miroir proposé par défaut en lui donnant un nouveau nom comme ftpsync-debian-main.conf et/ou ftpsync-debian-security.conf si vous voulez cloner les 2 repos de Debian, à savoir le principal et le security. Pour ma part, dans ce tuto, mes captures écrans et mes lignes de commande ne seront que pour debian-security, mais vous avez compris le concept.

cp etc/ftpsync.conf.sample etc/ftpsync-debian-security.conf

Editez ensuite le fichier :

nano etc/ftpsync-debian-security.conf

Dans ce fichier, donnez un nom d’hôte dans le paramètre MIRRORNAME. Dans le paramètre TO, mettez le chemin vers votre www/miroir utilisé par votre serveur Apache2 ou Nginx.

Dans RSYNC_HOST, mettez l’URL du dépôt officiel de Debian que vous souhaitez cloner. Moi, j’ai mis celui pour la France : http://ftp.fr.debian.org/

Dans RSYNC_PATCH mettez le chemin vers le dépôt qui vous intéresse… donc au choix debian, ou debian-security. Si vous voulez faire les 2, il faudra créer 2 fichiers de config séparés.

Le reste, on s’en cogne sauf pour ARCH_INCLUDE dans lequel vous pouvez indiquer les architectures qui vous intéressent, donc dans mon cas, uniquement amd64. Mais vous pouvez aussi rajouter i386 si vous avez des machines plus anciennes.

Une fois que c’est fait, on va cloner le dépôt pour avoir notre miroir en local avec la commande suivante (avec debian-main ou debian-security selon ce dont vous avez besoin) :

bin/ftpsync sync:archive:debian-security

La synchro en locale sera plus ou moins en fonction de votre connexion réseau, mais sachez-le, c’est long quand même.

Ensuite, on va configurer un vhost pour Apache. Ceux qui ont nginx, normalement, vous savez faire. Mettez vous en root pour faire ça.

cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/repo.gouw.fr.conf

Puis éditez votre fichier de conf :

nano /etc/apache2/sites-available/repo.gouw.fr.conf

Et ajoutez-y le ServerName qui va bien. Vous pouvez reprendre la conf ci-dessous :

<virtualhost>
ServerName repo.gouw.fr
ServerAlias repo
ServerAdmin admin@gouw.fr
DocumentRoot /var/www/miroir
<directory></directory>
Options FollowSymLinks
AllowOverride none
Order allow,deny
Allow from all

</virtualhost>

Puis activez ce vhost avec la commande :

a2ensite repo.gouw.fr.conf

Et rechargez Apache :

systemctl reload apache2

Bon, vopilà, vous avez un repo qui est synchronisé, mais chez Debian, ça va vite alors si vous voulez un dépôt constamment synchronisé, il faudra créer une petite règle dans la crontab de votre serveur pour le mettre à jour régulièrement, disons pourquoi pas chaque jour à 4h, 10h, 16 et 22h. 4 fois, car les dépôts Debian officiels sont mis à jour 4 fois par jour.

En tant qu’utilisateur miroir, lancez la commande :

crontab -e

Puis dedans, on met ceci :

0 4,10,16,22 * * * /home/miroir/bin/ftpsync sync:archive:debian-security 2>&1

Si vous synchronisez également le debian-main, mettez aussi ceci :

0 5,11,17,23 * * * /home/miroir/bin/ftpsync sync:archive:debian-main 2>&1

Ensuite, pour vos machines clients, il suffira d’aller dans le répertoire sources.list et de remplacer le dépôt officiel par le vôtre :

nano /etc/apt/sources.list

Comme c’est fait sur cette capture écran.

Et voilà c’est terminé ! Et si l’envie vous prend de dépasser le stade miroir local et de proposer un miroir à la communauté, vous pouvez le faire référencer officiellement ici.

Merci à Johnny pour les explications et à la communauté Twitch pour l’accompagnement psychologique lors de cette opération.