Monter son propre miroir XCP-ng

Comme vous l'avez vu sur Twitter, je suis devenu officiellement miroir d'XCP-ng il y a quelques jours ! J'ai assez galéré pour le mettre en place, vu qu'il existe peu de tuto pour monter son propre miroir pour ses projets préférés. Du coup, je me suis dit que j'allais vous partager comment j'ai monté ce miroir, ainsi que la configuration à mettre en place. C'est parti !
Note: Ce tuto est spécifique à l'installation d'un miroir XCP-ng, mais la base reste la même quelle que soit la distribution. ;)

Prérequis

  • Une VM sous Debian 11, avec assez d'espace disque pour contenir tous les fichiers que vous allez synchroniser (Pour XCP-ng, le repo fait aux alentours des 50Go).
  • Une IPv4 et une IPv6.
  • Un nom de domaine ou un sous domaine pointant vers les IPs que vous avez choisi ci-dessus.
  • Un café.
  • Un peu de patience !

Installation des paquets

Pour que votre miroir puisse parler aux autres, il vous faudra installer apache2 ou nginx pour la partie HTTP(S), et rsync pour la synchronisation des fichiers.

apt install apache2 rsync

ou

apt install nginx rsync

Préparation du miroir

On va d'abord créer un dossier qui contiendra le miroir. Les bonnes pratiques voudraient que le dossier soit crée sur un volume différent de celui qui contient le / pour éviter de saturer toute la machine en cas de saturation du dossier.

mkdir /mirroir/xcp-ng

On va faire ensuite la première synchronisation dans le dossier fraichement créé :

rsync -rlptv --delete-delay --progress  updates.xcp-ng.org::repo/ /mirroir/xcp-ng

La première synchronisation va prendre un peu de temps selon votre connexion internet. C'est le moment d'aller faire un café !

Configuration de l'HTTP(S)

On va ensuite configurer le vhost apache2 qui nous permettra d'accéder au miroir en HTTP

emacs /etc/apache2/sites-enabled/000-default.conf                              

<VirtualHost *:80>
        ServerName xcpng-mirror.as208069.net
        ServerAdmin noc@as208069.net
        DocumentRoot /mirror/xcp-ng
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined                   
</VirtualHost>

systemctl restart apache2

Pensez à changer le ServerName et à le remplacer par votre nom de domaine.

Si vous utilisez nginx, voici la configuration:

 emacs /etc/nginx/sites-enabled/default

server {
        server_name xcpng-mirror.as208069.net;

         location /{
           root /mirror/xcp-ng;
           index index.html;
           autoindex on;
           autoindex_format html;
           autoindex_localtime on;
        }
        listen 80;
        listen [::]:80;
}

systemctl restart nginx

Pour la partie HTTPS, je vais utiliser certbot, qui va configurer automatiquement le vhost pour supporter l'HTTPS

apt install certbot python3-certbot-apache
certbot --apache

ou

apt install certbot python3-certbot-nginx
certbot --nginx

Certbot va s'occuper de générer le certificat, puis va configurer le vhost 000-default-le-ssl.conf
Ne configurez pas la redirection automatique HTTP vers HTTPS.

cat /etc/apache2/sites-enabled/000-default-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
	ServerName xcpng-mirror.as208069.net
	ServerAdmin noc@as208069.net
	DocumentRoot /mirror/xcp-ng
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLCertificateFile /etc/letsencrypt/live/xcpng-mirror.as208069.net/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/xcpng-mirror.as208069.net/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Si vous utilisez let's encrypt pour votre certificat, et en particulier pour un miroir XCP-ng, il y a une modification de configuration à faire, suite à l'expiration d'un certificat root. Je vous invite à suivre ce lien et à appliquer le workaroud: https://xcp-ng.org/docs/mirrors.html#extra-steps-for-mirrors-using-let-s-encrypt-certificates

Configuration de rsync:

La configuration du serveur rsync se fait dans le fichier /etc/rsyncd.conf:

uid = nobody
gid = nogroup

pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log

[xcp-ng]
path = /mirror/xcp-ng
comment = "Ataxya's repo for XCP-ng"
read only = yes
list = yes
timeout = 600
hosts allow = *

Pensez à changer le path vers le dossier qui contient les fichiers de votre miroir.

Une fois la configuration faite, vous pouvez redémarrer rsync

systemctl restart rsyncd

Pour que les utilisateurs du miroir puissent faire la syncronisation, il faut changer les droits sur votre dossier miroir :

chown -R nobody:nogroup /mirror/xcp-ng/

Vous pouvez tester si votre configuration fonctionne avec la commande suivante :

rsync rsync://votredomaine.tld/xcp-ng

Configuration de la cron

Pour que votre miroir soit continuellement à jour, il faut créer une tâche cron qui va chercher les fichiers mis à jour. Dans mon cas, je lance la synchronisation toutes les heures :

crontab -e

#A la fin du fichier, ajoutez

0 * * * * rsync -rlptv --delete-delay updates.xcp-ng.org::repo/ /mirror/xcp-ng/

#Pensez à mettre un retour à la ligne à la fin du fichier

Votre miroir est désormais prêt à être utilisé !

Si vous souhaitez, vous aussi, monter votre miroir XCP-ng, je vous invite à lire le lien suivant :

https://xcp-ng.org/docs/mirrors.html#mirrors

La liste des miroirs déjà présents est ici: https://mirrors.xcp-ng.org/?mirrorstats

Si vous voulez savoir quel miroir est le plus proche, vous pouvez regarder ici : https://mirrors.xcp-ng.org/8/8.2/base/x86_64/repodata/repomd.xml.asc?mirrorlist&http=1

Mon miroir sera-t-il le plus proche de vous ? :D


À bientôt pour un nouvel article !

Afficher les commentaires