Un mémo sur comment créer un serveur miroir local sous Debian.
Pour ce tuto, je ne vais pas utiliser apt-mirroir ni debmirror mais simplement rsync, wget et comme serveur web Nginx.
De plus, mon miroir local sera dédié pour les distributions et en versions stables de Debian, Ubuntu et Proxmox avec Ceph (dans le cas de Ceph, j’utilise la dernière version en date disponible pour Proxmox : Ceph-Squid).
Préparer l’environnement
- Mettre à jour le système :
apt update && apt full-upgrade -y
apt install wget rsync nginx -y
mkdir -p /srv/mirrors/{debian,ubuntu,proxmox,ceph}
chown -R www-data:www-data /srv/mirrors chmod -R 755 /srv/mirrors
Synchroniser les miroirs Debian, Ubuntu et Proxmox
- Miroir Debian :
- Créer le script suivant pour synchroniser Debian :
nano /usr/local/bin/sync-debian.sh
- Le contenu du script :
#!/bin/bash rsync -avz --delete \ --exclude "testing" \ --exclude "unstable" \ --exclude "experimental" \ --exclude "non-free-firmware" \ rsync://deb.debian.org/debian/ \ /srv/mirrors/debian/
chmod +x /usr/local/bin/sync-debian.sh
- Créer le script suivant pour synchroniser Ubuntu :
nano /usr/local/bin/sync-ubuntu.sh
#!/bin/bash rsync -avz --delete \ --exclude "dists/focal/" \ --exclude "dists/jammy/" \ --exclude "dists/kinetic/" \ --exclude "dists/lunar/" \ --exclude "dists/mantic/" \ --exclude "dists/devel/" \ rsync://archive.ubuntu.com/ubuntu/ \ /srv/mirrors/ubuntu/
chmod +x /usr/local/bin/sync-ubuntu.sh
- Créer le script suivant pour synchroniser Proxmox :
nano /usr/local/bin/sync-proxmox.sh
#!/bin/bash wget -m -np -nH --cut-dirs=1 -P /srv/mirrors/proxmox http://download.proxmox.com/debian/pve/
chmod +x /usr/local/bin/sync-proxmox.sh
nano /usr/local/bin/sync-ceph.sh
#!/bin/bash wget -m -np -nH --cut-dirs=1 -P /srv/mirrors/ceph http://download.proxmox.com/debian/ceph-squid/
- Explication des options :
- -m : Active le mode miroir.
- -np : Empêche la navigation vers les répertoires parents.
- -nH : Désactive la création d’un dossier avec le nom du serveur.
- –cut-dirs=1 : Ignore les premiers répertoires pour correspondre à la structure locale.
- -P : Définit le dossier de destination local.
chmod +x /usr/local/bin/sync-ceph.sh
Planifier la synchronisation automatique
crontab -e
0 2 * * * /usr/local/bin/sync-debian.sh 0 3 * * * /usr/local/bin/sync-ubuntu.sh 0 4 * * * /usr/local/bin/sync-proxmox.sh 0 5 * * * /usr/local/bin/sync-ceph.sh
Configurer le serveur web
nano /etc/nginx/sites-available/mirrors
server { listen 80; server_name mirrors.local; root /srv/mirrors; index index.html; location /debian/ { alias /srv/mirrors/debian/; autoindex on; } location /ubuntu/ { alias /srv/mirrors/ubuntu/; autoindex on; } location /proxmox/ { alias /srv/mirrors/proxmox/; autoindex on; } }
ln -s /etc/nginx/sites-available/mirrors /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
Modification des fichiers sources.list des clients
Il ne reste que la modification des fichiers sources.list
sur l’ensemble des serveurs.
Pour ce faire, modifier l’url par l’IP du serveur miroir local pour tous les dépôts.
Afin de déployer les modifcations de chaque serveur, je vous propose d’utiliser Ansible :
ansible-playbook -i inventory.yml update_sources_grouped.yml
Les playbooks Ansible sont disponible ici -> https://github.com/freddL/playbook_add_mirror_local/