Créer un Miroir des dépôts d'Ubuntu

Rédigé par lkiefer - - 3 commentaires

Mise à jour de l'article le 17/11/2012
Modification du fichier mirror.list (section netinstall)


Les distributions GNU/Linux utilisent pour la plupart un gestionnaire de paquets. C'est ce logiciel qui est chargé de l'installation, la désinstallation et des mises à jour de l'ensemble des logiciels du système d'exploitation, en allant chercher les paquets nécessaires sur Internet. Son utilisation permet de garder son système sain et à jour.

Dans certains cas, la nécessité d'avoir une connexion Internet pour utiliser le gestionnaire de paquets peut être gênante:
- absence de connexion Internet
- débit insuffisant, limitations imposées par le FAI...
- beaucoup d'ordinateurs à installer ou mettre à jour (multiplication des téléchargements)

Participant bientôt à une "Install Party", je suis dans le dernier cas. Le débit étant limité, je souhaiterai que les ordinateurs à installer téléchargent les paquets depuis un ordinateur présent sur place, plutôt que d'encombrer la connexion Internet. Sur doc.ubuntu-fr.org est proposée une configuration assez simple, qui est à privilégier pour une utilisation personnelle. J'ai choisi une configuration différente: le fichier sources.list ne sera pas modifié (parce que la manipulation n'est pas aisée pour de simples utilisateurs). De plus, il n'est pas possible de modifier ce fichier durant l'installation du système.

La configuration que je souhaite mettre en place ressemblerait donc à cela:

Schéma réseau

Configuration du serveur

Sommaire:
Configuration de la connexion réseau
Copie des dépôts avec apt-mirror
Configuration d'un serveur DHCP
Activation du routage
Configuration DNS
Configuration du serveur HTTP
Test et conclusion


Le serveur est un ordinateur sur lequel est installé Debian Squeeze, disposant de deux cartes réseau. Les deux cartes réseau permettent de séparer les ordinateurs de démonstration et les ordinateurs à installer dans deux sous-réseaux (le serveur aura également le rôle de routeur). Pour ces derniers, les adresses des dépôts Ubuntu redirigeront vers le serveur local. Si on ne possède pas deux cartes réseau, on peut utiliser à la place un routeur matériel correctement configuré.

Les détails de configuration donnés ici peuvent bien-sûr s'adapter à d'autres distributions, en particulier celles dérivées de Débian, comme Ubuntu.

Configuration de la connexion réseau

Pour connaître le nom des cartes réseau, utiliser la commande ifconfig. Chez moi, comme dans la plupart des cas, ce sera eth0 et eth1.

La carte reliée au modem/routeur devra recevoir une adresse automatiquement par celui-ci. Pour l'autre carte, nous choisirons un autre sous-réseau peu utilisé, par exemple 10.10.100.0/24 (attention à choisir un réseau privé). Le serveur aura donc deux adresses ip, une sur chaque réseau. La configuration réseau se fait dans le fichier /etc/network/interfaces, voici un exemple de configuration:


# L'interface loopback, par défaut, ne surtout pas supprimer
auto lo
iface lo inet loopback

# Obtenir une adresse automatiquement sur eth0
allow-hotplug eth0
iface eth0 inet dhcp

# Configuration d'une adresse statique sur eth1
auto eth1
iface eth1 inet static
address 10.10.100.230
netmask 255.255.255.0
Pour que le système prenne en compte les modifications sans avoir à redémarrer la machine, lancer les commandes:

La commande ifdown désactive la connexion réseau. N'exécutez pas cette commande si vous n'avez pas d'accès physique au serveur pour rétablir la connexion

# ifdown eth0
# ifdown eth1
# ifup eth0
# ifup eth1

Copie des dépôts avec apt-mirror

Le logiciel apt-mirror va nous permettre de dupliquer les dépôts de la distribution. Pour l'installer:

# aptitude update && aptitude install apt-mirror

Le signe # indique que la commande qui suit est à exécuter avec les droits d'administrateurs; les commandes précédées du signe $ sont à exécuter en tant que simple utilisateur. Dans ce cas, ces signes ne doivent pas être recopiés.


On choisira ensuite un répertoire où copier les fichiers, dans lequel on créera trois sous-répertoires (prévoir l'espace nécessaire à la copie des dépôts), par exemple:


$ mkdir /home/utilisateur/mon_beau_miroir
$ cd /home/utilisateur/mon_beau_miroir
$ mkdir mirror skel var

La configuration du logiciel se fait avec le fichier /etc/apt/mirror.lst. C'est dans celui-ci qu'il faut entrer la liste des dépôts à dupliquer. Cette liste se fait à la manière du fichier sources.list. Souhaitant créer un miroir pour Ubuntu 12.04, voici mon fichier de configuration:

#Répertoire qui contiendra les fichiers
set base_path /home/utilisateur/mon_beau_miroir
set mirror_path $base_path/mirror
set skel_path $base_path/skel
set var_path $base_path/var
set cleanscript $var_path/clean.sh
#architecture par défaut si non précisé
set defaultarch i386
set nthreads 4
set tilde 0 

# Voir http://help.ubuntu.com/community/UpgradeNotes pour savoir comment mettre
# à niveau vers la dernière version de la distribution.
deb http://fr.archive.ubuntu.com/ubuntu/ precise main restricted
deb-amd64 http://fr.archive.ubuntu.com/ubuntu/ precise main restricted

## Corrections des bugs majeurs survenus après la sortie officielle de la
## distribution.
deb http://fr.archive.ubuntu.com/ubuntu/ precise-updates main restricted
deb-amd64 http://fr.archive.ubuntu.com/ubuntu/ precise-updates main restricted

## N.B. les logiciels de ce dépôt son ENTIÈREMENT NON SUPPORTÉS par l'équipe
## d'Ubuntu. Ces logiciels ne sont pas vérifiés ou corrigés par l'équipe 
## de sécurité d'Ubuntu.
deb http://fr.archive.ubuntu.com/ubuntu/ precise universe
deb-amd64 http://fr.archive.ubuntu.com/ubuntu/ precise universe

deb http://fr.archive.ubuntu.com/ubuntu/ precise-updates universe
deb-amd64 http://fr.archive.ubuntu.com/ubuntu/ precise-updates universe

## N.B. les logiciels de ce dépôt son ENTIÈREMENT NON SUPPORTÉS par l'équipe
## d'Ubuntu, et peuvent ne pas être sous licence libre. Ces logiciels ne sont
## pas vérifiés ou corrigés par l'équipe de sécurité d'Ubuntu.
deb http://fr.archive.ubuntu.com/ubuntu/ precise multiverse
deb-amd64 http://fr.archive.ubuntu.com/ubuntu/ precise multiverse

deb http://fr.archive.ubuntu.com/ubuntu/ precise-updates multiverse
deb-amd64 http://fr.archive.ubuntu.com/ubuntu/ precise-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.

## N.B. Les logiciels de ce dépôt n'ont pas été autant testés que ceux contenus
## dans la parution principale, mais ils incluent de nouvelles versions de certaines
## applications qui peuvent procurer des fonctions utiles. Ces logiciels ne sont
## pas vérifiés ou corrigés par l'équipe de sécurité d'Ubuntu.
deb http://fr.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse
deb-amd64 http://fr.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu precise-security main restricted
deb-amd64 http://security.ubuntu.com/ubuntu precise-security main restricted

deb http://security.ubuntu.com/ubuntu precise-security universe
deb-amd64 http://security.ubuntu.com/ubuntu precise-security universe

deb http://security.ubuntu.com/ubuntu precise-security multiverse
deb-amd64 http://security.ubuntu.com/ubuntu precise-security multiverse

## Ces logiciels ne font pas partie d'Ubuntu, mais sont proposés par Canonical
## et les éditeurs respectifs.
deb http://archive.canonical.com/ubuntu precise partner
deb-amd64 http://archive.canonical.com/ubuntu precise partner

## Ces logiciels ne font pas partie d'Ubuntu, mais sont proposés
## par des développeurs tiers souhaitant diffuser leurs derniers logiciels.
deb http://extras.ubuntu.com/ubuntu precise main
deb-amd64 http://extras.ubuntu.com/ubuntu precise main

## Fichiers de l'installeur internet (netinstall, mini.iso)
deb http://fr.archive.ubuntu.com/ubuntu precise              main/debian-installer restricted/debian-installer universe/debian-installer multiverse/debian-installer
deb http://fr.archive.ubuntu.com/ubuntu precise-updates      main/debian-installer restricted/debian-installer universe/debian-installer
deb http://fr.archive.ubuntu.com/ubuntu precise-backports    main/debian-installer
deb http://fr.archive.ubuntu.com/ubuntu precise-security     main/debian-installer restricted/debian-installer universe/debian-installer
deb http://archive.ubuntu.com/ubuntu precise-proposed     main/debian-installer restricted/debian-installer universe/debian-installer

deb-amd64 http://archive.ubuntu.com/ubuntu precise              main/debian-installer restricted/debian-installer universe/debian-installer multiverse/debian-installer
deb-amd64 http://archive.ubuntu.com/ubuntu precise-updates      main/debian-installer restricted/debian-installer universe/debian-installer
deb-amd64 http://archive.ubuntu.com/ubuntu precise-backports    main/debian-installer
deb-amd64 http://archive.ubuntu.com/ubuntu precise-security     main/debian-installer restricted/debian-installer universe/debian-installer
deb-amd64 http://archive.ubuntu.com/ubuntu precise-proposed     main/debian-installer restricted/debian-installer universe/debian-installer


## Suppression des fichiers obsolètes lors des mises à jour du miroir
clean http://fr.archive.ubuntu.com/ubuntu precise
clean http://security.ubuntu.com/ubuntu precise-security
clean http://archive.canonical.com/ubuntu precise
clean http://extras.ubuntu.com/ubuntu precise

Une fois votre configuration effectuée, il reste à copier les dépôts. Prévoir plusieurs heures, en fonction de votre connexion internet: le volume du téléchargement est de 85Gio pour la configuration proposée. La commande à lancer est:

$ apt-mirror

Pour mettre à jour votre miroir, il suffira de relancer cette commande


Si vous lancez cette commande depuis une connexion distante (par ssh), il est vivement conseillé d'utiliser un multiplexeur de terminal, tel screen. Sans cela, si vous fermez la connexion, la copie des dépôts est stoppée

Configuration d'un serveur DHCP

Pour que les ordinateurs reliés à la carte eth1 aient une adresse IP attribuée automatiquement, il faut un serveur DHCP. Pour l'installer:

# aptitude install isc-dhcp-server
Il faut ensuite configurer le serveur DHCP pour que les ordinateurs aient une adresse ip comprise dans le même sous-réseau que la carte eth1. La configuration se fait dans le fichier /etc/dhcp/dhcpd.conf, voici un exemple:
# Mode de renouvellement du bail
ddns-update-style none;

# Ce serveur est celui par défaut pour ce réseau, activer l'option ci-dessous
authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;


# Configuration du sous-réseau 10.10.100.0/24
# 100 adresses disponibles, de 10.10.100.50 à 10.10.100.150
subnet 10.10.100.0 netmask 255.255.255.0 {
  range 10.10.100.50 10.10.100.150;
  option domain-name-servers 10.10.100.230, 89.2.0.2;
  option routers 10.10.100.230;
  option broadcast-address 10.10.100.255;
  default-lease-time 600;
  max-lease-time 7200;
}

La ligne option domain-name-servers 10.10.100.230, 89.2.0.2; correspond au serveur DNS primaire (qui sera cet ordinateur) et au serveur de secours (dans le cas présent celui de Numéricable, libre à vous d'en choisir un autre, ou de ne pas en attribuer).

Relancer le démon DHCP:

/etc/init.d/isc-dhcp-server restart

Si la connexion réseau n'est pas correctement configurée et fonctionnelle, le serveur DHCP ne pourra pas être lancé.


Vous pouvez déjà tester la connexion: branchez la carte eth0 au modem/routeur, et la carte eth1 à votre ordinateur personnel (avec un câble croisé, ou via un switch). Le serveur devrait obtenir une adresse via DHCP (lancer la commande ifconfig eth0 pour vérifier), ainsi que l'ordinateur personnel. Cependant, celui-ci ne peut pas encore accéder à Internet: les paquets ne passent pas d'une carte réseau à une autre. Pour cela, il faut activer le routage sur le serveur.

Activation du routage

Éditer le fichier /etc/sysctl.conf, et enlever le '#' devant la ligne net.ipv4.ip_forward=1. Pour que cette action soit prise en compte immédiatement, vous pouvez lancer cette commande:

# echo 1 > /proc/sys/net/ipv4/ip_forward

Il faut encore indiquer au pare-feu de laisser passer les paquets provenant du réseau 10.10.100.0/24, cela ce fait avec cette commande:

# iptables -t nat -A POSTROUTING -s 10.10.100.0/24 -j MASQUERADE
Pour que cette commande soit lancée à chaque démarrage du serveur, il faut la rajouter au fichier /etc/rc.local. La fin de ce fichier sera donc comme ceci:
iptables -t nat -A POSTROUTING -s 10.10.100.0/24 -j MASQUERADE &
exit 0

Le & en fin de ligne signifie que son exécution ne bloque pas les autres commandes du fichier (les commandes s’exécutent en parallèle, non pas à la suite). exit 0 est à conserver à la fin du fichier

À ce stade, un ordinateur connecté au serveur doit pouvoir accéder à internet

Configuration DNS

Installer le serveur DNS:

# aptitude install bind9

La configuration se passe ensuite dans le dossier /etc/bind. Éditer le fichier named.conf.local pour y ajouter quatre zones:

zone "archive.ubuntu.com" {
       type master;
       file "/etc/bind/db.archive.ubuntu.com";
       forwarders{};
};
zone "extras.ubuntu.com" {
       type master;
       file "/etc/bind/db.extras.ubuntu.com";
       forwarders{};
};
zone "security.ubuntu.com" {
       type master;
       file "/etc/bind/db.security.ubuntu.com";
       forwarders{};
};
zone "archive.canonical.com" {
       type master;
       file "/etc/bind/db.archive.canonical.com";
       forwarders{};
};

Ces quatre zones correspondent aux domaines que nous voulons gérer (en fonction du fichier mirror.list). Pour chaque zone, il faut créer un fichier de configuration:

# touch /etc/bind/db.archive.ubuntu.com
# touch /etc/bind/db.extras.ubuntu.com
# touch /etc/bind/db.security.ubuntu.com
# touch /etc/bind/db.archive.canonical.com

Le fichier db.archive.ubuntu.com est à renseigner comme ceci:

$TTL    86400
@ IN SOA miroir.debian. root.miroir.debian. 2012092200 86400 3600 2419200 86400;

;** Définit le serveur qui gère le domaine
archive.ubuntu.com.      NS      miroir.debian.  ;Nom du serveur

;** Les lignes suivantes définissent la table entre les noms et les IP
archive.ubuntu.com.                  A       10.10.100.230
*.archive.ubuntu.com.               A       10.10.100.230

Dans ce fichier, miroir.debian. est le nom de mon serveur. Il sera à remplacer par le votre, que vous pouvez trouver dans le fichier /etc/hostname (c'est également le nom qu'on voit s'afficher dans un terminal, après le '@'. Attention à laisser un point à la fin de ce nom, il fait référence à la "racine DNS".
Le chiffre 2012092200 est un numéro à incrémenter à chaque modification, de telle sorte que d'éventuels serveurs esclaves sachent si la configuration a été modifiée (une date écrite à l'envers fait très bien l'affaire). Les autres valeurs peuvent être laissées telles qu'elles.
Le dépôt archive.ubuntu.com possède différents miroirs répartis sur la planète (par exemple fr.archive.ubuntu.com), c'est pourquoi il nous faut ajouter la ligne pour *.archive.ubuntu.com, qui sera probablement utilisé sur les machines à installer.

Voici pour le fichier db.extras.ubuntu.com:

$TTL    86400
@ IN SOA miroir.debian. root.miroir.debian. 2012092200 86400 3600 2419200 86400;

;** Définit le serveur qui gère le domaine
extras.ubuntu.com.       NS      miroir.debian.  ;Nom du serveur

;** Les lignes suivantes définissent la table entre les noms et les IP
extras.ubuntu.com.     A       10.10.100.230

Le fichier db.security.ubuntu.com:

$TTL    86400
@ IN SOA miroir.debian. root.miroir.debian. 2012092200 86400 3600 2419200 86400;

;** Définit le serveur qui gère le domaine
security.ubuntu.com.       NS      miroir.debian.  ;Nom du serveur

;** Les lignes suivantes définissent la table entre les noms et les IP
security.ubuntu.com.     A       10.10.100.230

Le fichier db.archive.canonical.com:

$TTL    86400
@ IN SOA miroir.debian. root.miroir.debian. 2012092200 86400 3600 2419200 86400;

;** Définit le serveur qui gère le domaine
security.ubuntu.com.       NS      miroir.debian.  ;Nom du serveur

;** Les lignes suivantes définissent la table entre les noms et les IP
archive.canonical.com.     A       10.10.100.230

Dans le fichier named.conf.options, il faut correctement renseigner la section "forwarders" avec les adresses ip des serveurs DNS de votre fournisseur d'accès à Internet, ou autre... Ce sera ces serveurs qui seront interrogés si lors d'une requête pour une adresse qui n'est pas gérée pas notre serveur. Exemple avec les serveus DNS de Numéricable:

options {
   directory "/var/cache/bind";

   forwarders {
      89.2.0.1;
      89.2.0.2;
   };

   auth-nxdomain no;    # conform to RFC1035
   listen-on-v6 { any; };
};

Pour que les modifications prennent effet, relancer le serveur DNS:

/etc/init.d/bind9 restart

On peut maintenant tester le serveur avec l'outil dig:

dig @10.10.100.230 fr.archive.ubuntu.com

La section "answers" nous dira si le résultat est bon:

;; ANSWER SECTION:
archive.ubuntu.com.	86400	IN	A	10.10.100.230

Si un poste client est relié au serveur, on peut également lancer un ping depuis celui-ci:

ping fr.archive.ubuntu.com

Configuration du serveur HTTP

Pour l'instant, les fichiers qu'apt-mirror a téléchargés ne sont pas encore accessibles pour les postes clients. Pour cela, j'ai choisi d'utiliser le serveur HTTP Apache. Commençons par l'installer.

# aptitude install apache2

Par défaut, Apache rend accessible tout ce qui se trouve dans le répertoire /var/www. Pour ne pas modifier cette configuration classique, nous allons faire un lien symbolique du répertoire que nous voulons partager:

# ln -s /home/utilisateur/mon_beau_miroir/mirror /var/www

Le dossier /var/www/mirror contient quatre dossiers, correspondants aux quatre serveurs renseignés dans /etc/apt/mirror.list. Lorsqu'un ordinateur client veut accéder à une adresse gérée par notre serveur DNS, il faut qu'Apache sache vers quel dossier rediriger cet ordinateur. Cela se fait en créant un nouveau fichier (par exemple ubuntu.conf) dans le dossier /etc/apache2/sites-enabled, contenant ceci:

<VirtualHost *:80>
DocumentRoot /var/www/mirror/fr.archive.ubuntu.com
ServerName fr.archive.ubuntu.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/mirror/fr.archive.ubuntu.com
ServerName archive.ubuntu.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/mirror/security.ubuntu.com
ServerName security.ubuntu.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/mirror/extras.ubuntu.com
ServerName extras.ubuntu.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/mirror/archive.canonical.com
ServerName archive.canonical.com
</VirtualHost>

Il faut une section VirtualHost par adresse. Ainsi, il faut penser aux miroirs officiels de archive.ubuntu.com susceptibles d'être utilisés lors de l'install party, c'est pourquoi j'ai ajouté la section pour fr.archive.ubuntu.com.
Relancer le serveur:

# /etc/init.d/apache2 restart

Test du serveur et conclusion

Le serveur est maintenant fonctionnel, il ne reste plus qu'à le tester.
Déconnecter le serveur du modem-routeur, et lancer des mises à jour ou des installations à partir d'un poste client connecté uniquement au serveur. Si tout les installations fonctionnent, c'est que le serveur est fonctionnel (du moins pour les adresses interrogées, et selon la configuration du client)

# apt-get update
# apt-get upgrade
# apt-get install votre_logiciel

Les ordinateurs clients n'ont ainsi pas besoin de configuration particulière: il suffit de les brancher derrière de notre serveur. Quelques remarques tout de même:
- Les ordinateurs avec un fichier sources.list customisés ne sont pas forcément tous supportés (utilisation de miroirs...).
- Il faut que les ordinateurs aient la même version du système d'exploitation que celui de notre miroir. Notre miroir n'est cependant pas obligé de se limiter à une seule version, si il dispose de l'espace disque nécessaire.
- L'utilisation du serveur conjointement à un CD d'installation minimal, améliore les temps d'installation (paquets déjà à jour, téléchargements plus rapides que la lecture d'un CD...).

3 commentaires

#1  - Touriste a dit :

Je n'ai ni le savoir, ni l'occasion de tester pareil tutoriel, mais il est d'une rare qualité et cela mérite d'être dit. La présentation est simple, claire et le choix des couleurs est homogène. Vivement les prochains !

#2  - newic a dit :

salut, ton guide est vraiment parfait. On peu venir voir ca à la prochaine install partie ? dans quelle région ca se passe ?

Bravo vraiment très bon guide détaillé ca donne envit de tester mais les 85giga annoncé me font un peu je pensais qu'un mirroir pouvait constituer l'équivalent en gigas de plusieurs cd/dvd tout au plus.

#3  - lkiefer a dit :

Merci :)
Ça se passe en Lorraine, bien sûr tous le monde peux venir, en espérant que tu aies la chance d'habiter dans les environs.
http://jdl-sarrebourg.fr/doku.php
Pour cette journée il y a aussi un autre membre qui ramène un serveur PXE pour fournir les images d'installation, les deux serveurs se complètent.

La taille du miroir dépend de ce que tu dupliques: 32 et 64 bits? Dépôts tiers? Plusieurs versions?
Ça peux vite faire beaucoup. Mais comparé au nombre de logiciels (dont les jeux) que cela représente, c'est pas tant que ça.
Si tu veux juste tester, tu peux te restreindre à une seule architecture, un dépôt, et une seule section.

Fil RSS des commentaires de cet article

Écrire un commentaire

Les commentaires sont modérés avant d'être postés. Les commentaires à vocation publicitaire, ou comportant un lien vers un site non personnel, ne seront pas publiés

Quelle est la troisième lettre du mot nshl ?