Miroire local pour les dépôts Linux destiné à fournir des paquets, des mises à jour et des images ISO sur un réseau local https://cocoba.org/projets
  • Jinja 81.2%
  • Shell 13.5%
  • Dockerfile 5.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-15 23:31:50 +02:00
.vscode Don't know 2026-10-15 23:31:50 +02:00
ansible Fix path 2026-10-15 23:31:34 +02:00
ANSIBLE-OFFLINE.md Update doc 2026-09-27 14:52:53 +02:00
apt-mirror.conf Add files 2026-09-26 22:35:58 +02:00
cluster.yaml Improve role for voidlinux 2026-10-11 21:30:30 +02:00
Dockerfile Add files 2026-09-26 22:35:58 +02:00
LICENSE Initial commit 2026-09-26 19:58:35 +00:00
mirror.list Improve role for voidlinux 2026-10-11 21:30:30 +02:00
README.md Update doc. 2026-09-26 22:55:29 +02:00
xbps-mirror.sh Update doc. 2026-09-26 22:55:29 +02:00

Narcisse - Miroir local Linux

Narcisse est le dépôts Linux destiné à fournir des paquets, mises à jour et des images ISO sur un réseau local sans accès Internet.

Le serveur miroir dispose ponctuellement d'un accès Internet pour synchroniser les dépôts. Les machines du réseau local utilisent ensuite exclusivement ce serveur.

Le projet est destiné notamment à :

  • reconditionner des ordinateurs avec Linux Mint LMDE ;
  • installer et administrer des serveurs Debian ;
  • installer des environnements Kubernetes ;
  • disposer d'un dépôt Void Linux local ;
  • limiter les téléchargements Internet lors des ateliers et opérations de reconditionnement.

Le serveur est volontairement basé sur des composants simples et standards : apt-mirror, rsync, Nginx et cron.

Architecture

                         Internet
                            │
                            │
                    ┌───────▼────────┐
                    │ Serveur miroir │
                    │                │
                    │ apt-mirror     │
                    │ rsync          │
                    │ cron            │
                    │ nginx           │
                    └───────┬────────┘
                            │
                     réseau local
                            │
          ┌─────────────────┼─────────────────┐
          │                 │                 │
      PC à reconditionner  Serveurs       Cluster K8s
          │                 │                 │
       LMDE              Debian           Debian

Le serveur miroir est le seul équipement du réseau local qui a besoin d'un accès Internet.

Dépôts disponibles

Le miroir a vocation à fournir :

Distribution / dépôt Architecture Outil
Debian Trixie amd64 apt-mirror
Debian Security amd64 apt-mirror
Debian Updates amd64 apt-mirror
Debian Backports amd64 apt-mirror
Linux Mint LMDE amd64 apt-mirror
Kubernetes amd64 apt-mirror
Void Linux x86_64 rsync

Les architectures inutiles sont volontairement exclues afin de limiter l'espace disque et la durée des synchronisations.

Principe de fonctionnement

Le serveur miroir possède deux rôles distincts :

  1. synchroniser les dépôts depuis Internet ;
  2. servir les dépôts au réseau local.

La synchronisation et la distribution sont donc indépendantes.

Internet
   │
   ├── Debian ──────────────┐
   ├── Linux Mint LMDE ─────┤
   ├── Kubernetes ──────────┤──► miroir local
   └── Void Linux ──────────┘
                                  │
                                  ▼
                               Nginx
                                  │
                                  ▼
                            réseau local

Les clients n'ont pas besoin d'accéder directement aux serveurs Internet.

Arborescence

L'organisation prévue sur le serveur est :

/srv/mirror/
    ├── iso/
        ├──debian
        ├──lmde
        └── void/
    ├── mirror/
        ├── deb.debian.org/
        ├── security.debian.org/
        ├── packages.linuxmint.com/
        ├── pkgs.k8s.io/
        └── void/

Les chemins exacts peuvent évoluer en fonction de la configuration d'apt-mirror.

Void Linux est maintenu séparément car son système de paquets, xbps, n'utilise pas APT.

Logiciels utilisés

apt-mirror

apt-mirror est utilisé pour récupérer les dépôts APT.

Il permet notamment de conserver localement :

  • les paquets ;
  • les métadonnées APT ;
  • les signatures des dépôts ;
  • les différentes versions nécessaires aux installations et mises à jour.

Le miroir ne reconstruit ni ne modifie les paquets téléchargés.

rsync

Void Linux utilise xbps et n'est donc pas géré par apt-mirror.

Le dépôt Void est synchronisé avec rsync.

Nginx

Nginx fournit les fichiers du miroir en HTTP sur le réseau local.

Le serveur n'a pas besoin de générer dynamiquement du contenu.

Une configuration très simple suffit :

server {
    listen 80;
    server_name apt.local;

    root /srv/mirror;

    location / {
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
}

Le miroir est volontairement servi en HTTP sur le réseau local.

Cela ne désactive pas la vérification cryptographique des dépôts : APT et XBPS continuent à vérifier les signatures des dépôts et des paquets selon leurs mécanismes habituels.

Synchronisation

Les synchronisations sont exécutées périodiquement avec cron.

Ce choix est volontairement simple.

Debian fournit déjà une configuration cron avec apt-mirror. Il n'est donc pas nécessaire d'ajouter un systemd.timer uniquement pour planifier la synchronisation.

Les différents dépôts peuvent être synchronisés indépendamment :

cron
 ├── apt-mirror
 │    ├── Debian
 │    ├── LMDE
 │    └── Kubernetes
 │
 └── rsync
      └── Void Linux

Cette organisation privilégie la simplicité, la lisibilité et la facilité de maintenance.

Configuration APT

La configuration principale d'apt-mirror se trouve dans :

/etc/apt/mirror.list

Exemple de structure :

###############
# Général
###############

set base_path    /srv/mirror
set mirror_path  $base_path/mirror
set skel_path    $base_path/skel
set var_path     $base_path/var

set nthreads     10
set defaultarch  amd64


###############
# Debian
###############

deb [arch=amd64] http://deb.debian.org/debian trixie main contrib non-free non-free-firmware
deb [arch=amd64] http://deb.debian.org/debian trixie-updates main contrib non-free non-free-firmware
deb [arch=amd64] http://security.debian.org/debian-security trixie-security main contrib non-free non-free-firmware
deb [arch=amd64] http://deb.debian.org/debian trixie-backports main contrib non-free non-free-firmware


###############
# Linux Mint LMDE
###############

deb [arch=amd64] http://packages.linuxmint.com gigi main upstream import backport


###############
# Kubernetes
###############

# Configuration à adapter à la version Kubernetes souhaitée.


###############
# Nettoyage
###############

clean http://deb.debian.org/debian
clean http://security.debian.org/debian-security
clean http://packages.linuxmint.com

La configuration définit explicitement l'architecture amd64.

Attention : la configuration Kubernetes et les éventuelles modifications de dépôts LMDE doivent être vérifiées avant chaque changement de version majeure. Les dépôts tiers peuvent avoir une organisation différente de celle de Debian.

Synchronisation Void Linux

Void Linux est synchronisé séparément avec un script :

/usr/local/sbin/xbps-mirror

Le script doit synchroniser uniquement le dépôt nécessaire, par exemple :

/current

pour Void Linux x86_64 avec glibc.

Les dépôts musl, aarch64, debug et multilib ne sont pas synchronisés par défaut.

Ils pourront être ajoutés ultérieurement si un besoin apparaît.

Planification cron

Les tâches cron sont placées dans :

/etc/cron.d/

Par exemple :

/etc/cron.d/apt-mirror
/etc/cron.d/xbps-mirror

Une fréquence typique peut être :

# Synchronisation APT chaque nuit à 03:00
0 3 * * * root /usr/bin/apt-mirror

# Synchronisation Void à 04:00
0 4 * * * root /usr/local/sbin/xbps-mirror

Les horaires sont volontairement séparés afin d'éviter de lancer simultanément plusieurs synchronisations importantes.

La fréquence peut être adaptée à la capacité de la connexion Internet et à l'espace disque disponible.

Serveur HTTP

Le miroir est accessible sur le réseau local avec un nom tel que :

http://apt.local/

Le nom peut être fourni :

  • par le DNS local ;
  • par /etc/hosts ;
  • par le DNS du routeur ;
  • par un serveur DNS interne.

Pour un petit réseau, une entrée /etc/hosts peut suffire :

192.168.1.10    apt.local

Configuration d'un client Debian

Le client doit utiliser le miroir local au lieu des dépôts Internet.

Exemple :

Types: deb
URIs: http://apt.local/deb.debian.org/debian
Suites: trixie trixie-updates
Components: main contrib non-free non-free-firmware
Architectures: amd64

Types: deb
URIs: http://apt.local/security.debian.org/debian-security
Suites: trixie-security
Components: main contrib non-free non-free-firmware
Architectures: amd64

Types: deb
URIs: http://apt.local/deb.debian.org/debian
Suites: trixie-backports
Components: main contrib non-free non-free-firmware
Architectures: amd64

Puis :

apt update

Les paquets sont alors récupérés depuis le serveur local.

Installation d'un serveur Debian

Une installation Debian peut être réalisée à partir d'une ISO ou d'un support d'installation.

Une fois le système installé, la configuration APT est remplacée par celle du miroir local.

Par exemple :

apt update
apt install vim curl git

Les paquets sont téléchargés depuis :

http://apt.local/

et non depuis Internet.

Linux Mint LMDE

LMDE utilise Debian comme base et dispose également de ses propres dépôts Linux Mint.

Le miroir doit donc fournir les deux types de dépôts :

Linux Mint
     │
     └── packages.linuxmint.com

Debian
     │
     ├── deb.debian.org
     └── security.debian.org

Cela permet d'utiliser le serveur miroir pour installer et maintenir les machines LMDE sans accès Internet.

Kubernetes

Le dépôt Kubernetes est traité comme un dépôt APT supplémentaire.

L'objectif est notamment de pouvoir installer hors ligne les composants nécessaires à un nœud Kubernetes :

kubeadm
kubelet
kubectl

Le miroir APT ne fournit toutefois pas les images de conteneurs Kubernetes.

Ces images constituent un besoin distinct :

Dépôt APT
    │
    └── kubeadm / kubelet / kubectl

Registre OCI
    │
    └── images Kubernetes

Si l'objectif devient de construire un cluster Kubernetes totalement isolé d'Internet, un registre OCI local devra donc être ajouté au projet.

Void Linux

Void Linux utilise XBPS.

Les clients utiliseront le dépôt local, par exemple :

repository=http://apt.local/void/current

La configuration doit être placée dans :

/etc/xbps.d/

Après configuration :

xbps-install -S

permet de récupérer les métadonnées depuis le miroir local.

Vérification du miroir

Avant de considérer une synchronisation comme réussie, vérifier :

systemctl status nginx

Puis :

curl http://apt.local/

Pour Debian :

curl http://apt.local/deb.debian.org/debian/dists/trixie/Release

Pour Linux Mint :

curl http://apt.local/packages.linuxmint.com/dists/gigi/Release

Pour Kubernetes :

curl http://apt.local/pkgs.k8s.io/

Et pour Void :

curl http://apt.local/void/current/

Les chemins exacts doivent correspondre à l'arborescence effectivement créée par les outils de synchronisation.

Vérification côté client

Sur Debian ou LMDE :

apt update

Il faut vérifier que les téléchargements proviennent bien de :

apt.local

et non directement d'Internet.

Pour XBPS :

xbps-install -S

Puis vérifier le dépôt utilisé avec les outils XBPS.

Espace disque

Un miroir de distributions Linux peut rapidement occuper plusieurs centaines de Go.

L'espace nécessaire dépend notamment :

  • des architectures conservées ;
  • des composants Debian ;
  • des versions conservées ;
  • des dépôts Linux Mint ;
  • du dépôt Kubernetes ;
  • du dépôt Void ;
  • de l'évolution des distributions.

Le stockage doit donc être dimensionné avec une marge suffisante.

Pour ce projet, la priorité est donnée à amd64 uniquement afin de limiter l'espace consommé.

Sécurité

Le serveur miroir est destiné à un réseau local maîtrisé.

Il n'est pas prévu pour être exposé directement sur Internet.

Le serveur HTTP doit donc idéalement :

  • écouter uniquement sur le réseau local ;
  • ne pas être accessible depuis Internet ;
  • ne pas permettre l'écriture dans /srv/mirror via HTTP ;
  • servir les fichiers en lecture seule.

Les fichiers des dépôts sont récupérés depuis les dépôts officiels et les mécanismes de signature des distributions sont conservés.

Le miroir ne doit pas modifier les métadonnées ou les paquets téléchargés.

Philosophie du projet

Le projet privilégie volontairement :

  • KISS ;
  • des logiciels libres ;
  • des composants standards Debian/Linux ;
  • une configuration facilement lisible ;
  • peu de services ;
  • peu d'abstraction ;
  • une maintenance possible par plusieurs personnes ;
  • une consommation raisonnable d'espace disque et de bande passante.

Le miroir n'a pas vocation à devenir une infrastructure complexe de gestion de paquets.

Son objectif est simplement de fournir un accès local fiable aux dépôts nécessaires aux ateliers, au reconditionnement et à l'administration des machines.

Évolutions possibles

Les évolutions pourront être ajoutées en fonction des besoins réels :

  • registre OCI local pour les images Kubernetes ;
  • miroir d'ISO Debian / LMDE / Void ;
  • autres architectures ;
  • autres distributions ;
  • cache de paquets supplémentaires ;
  • supervision du serveur miroir ;
  • statistiques d'utilisation ;
  • DNS local dédié.

Ces fonctionnalités ne sont pas installées par défaut afin de conserver une infrastructure simple.

Licence

La configuration et les scripts spécifiques à ce projet sont distribués sous licence :

MIT