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 !