Créer un serveur miroir local sous Debian

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
  • Installer les outils nécessaires :
  • apt install wget rsync nginx -y
  • Créer des répertoires pour stocker les miroirs :
  • mkdir -p /srv/mirrors/{debian,ubuntu,proxmox,ceph}
  • Définir les permissions :
  • 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/
      
    • Donner les permissions d’exécution au script :
    • chmod +x /usr/local/bin/sync-debian.sh
  • Miroir Ubuntu :
    • Créer le script suivant pour synchroniser Ubuntu :
    • nano /usr/local/bin/sync-ubuntu.sh
    • Le contenu du script :
    • #!/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/
      
    • Donner les permissions d’exécution au script :
    • chmod +x /usr/local/bin/sync-ubuntu.sh
  • Miroir Proxmox et Ceph:
    • Créer le script suivant pour synchroniser Proxmox :
    • nano /usr/local/bin/sync-proxmox.sh
    • Contenu du script :
    • #!/bin/bash
      
      wget -m -np -nH --cut-dirs=1 -P /srv/mirrors/proxmox http://download.proxmox.com/debian/pve/
      
    • Donner les permissions d’exécution au script :
    • chmod +x /usr/local/bin/sync-proxmox.sh
    • Créer le script suivant pour synchroniser Ceph sur les dépots de Proxmox :
    • nano /usr/local/bin/sync-ceph.sh
    • Contenu du script :
      #!/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.
    • Donner les permissions d’exécution au script :
    • chmod +x /usr/local/bin/sync-ceph.sh

Planifier la synchronisation automatique

  • Configurer les tâches avec cron pour automatiser les synchronisations :
  • crontab -e
  • Ajouter les lignes suivantes :
  • 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

  • Créer un fichier de configuration Nginx :
  • nano /etc/nginx/sites-available/mirrors
  • Ajouter la configuration suivante :
  • 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;
        }
    }
    
  • Activer la configuration :
  • ln -s /etc/nginx/sites-available/mirrors /etc/nginx/sites-enabled/
  • tester la configuration :
  • nginx -t
  • Recharger la configuration de Nginx :
  • systemctl reload nginx
  • Tester l’accès au serveur web (exemple ici avec le miroir local pour Proxmox) :
  • 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/

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.