Créer un Miroir des dépôts d'Ubuntu
Rédigé par lkiefer - - 3 commentairesMise à 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:
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.0Pour 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-serverIl 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 MASQUERADEPour 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...).
#1 - Touriste a dit :