Objectif

Un dépôt est un serveur qui contient des paquets logiciels ou librairies. Un dépôt permet de réaliser des installations et des mises à jour simplement via Internet et de disposer des dernières versions des logiciels. Un miroir local est une copie conforme des dépôts Débian en… « local ». Ces dépôts peuvent être les dépôts officiellement maintenus par Debian, ou des dépôts de contributeurs et/ou non-officiels.

J’ai mis en place un dépôt local sur notre réseau, afin de disposer d’un miroir des dépôts Débian qui sera accessible à l’ensemble de nos serveurs, quelles que soit la version de Debian installée. Les serveurs du réseau local n’auront plus besoin d’aller sur Internet pour récupérer les paquets d’installation ou de mises à jour, puisqu’ils les récupèreront directement sur le miroir local.

Le déploiement d’un dépôt sur notre réseau local répondait à plusieurs contraintes et objectifs :

  • Dans le cadre d’une sécurisation de notre réseau, nous allons brider les accès extérieurs pour nos serveurs. Il est donc nécessaire de disposer d’une solution pour continuer à pouvoir télécharger les paquets et les mises à jour.
  • Limiter la consommation de bande passante sur le lien IP.
  • Disposer d’un « dépôt » figé pour l’ensemble de nos serveurs Débian.
  • Télécharger les paquets plus rapidement.

La méthode décrite ci-dessous, n’est pas la méthode officielle de création et de mise à jour d’un miroir. Mais il s’agit d’une méthode simple à mettre en œuvre et à utiliser pour un dépôt local.

Biblio

Pour la création de cette documentation, j’ai retrouvé de la documentation sur différents sites. Voici les principaux sites fournissant une documentation riche et intéressante. Elles concernent d’une part les informations pour créer des miroirs locaux, et d’autre part la mise à jour des systèmes à partir de ces dépôts.

Documentations sur la création de miroir locaux :

Documentation pour la mise à jour de distributions :

Installation du miroir

La mise en place du dépôt local, il faut un serveur Debian, à jour, avec un espace disque suffisant et d’un accès à Internet avec une bonne bande passante.

Il faut installer les paquets apache2 et apt-mirror pour installer le repository.

root@depot:~# apt-get update
root@depot:~# apt-get install apt-mirror

Il faut ensuite créer l’arborescence où les fichiers du dépôt seront copiés. J’ai choisi de créer un dossier au nom explicite dans l’arborescence « /var/ ».Dans ce répertoire, il y a trois nouveaux dossiers à créer : « mirror, skel et var ».

root@depot:~# cd /var/
root@depot:/var# mkdir debian-mirror
root@depot:/var# cd debian-mirror/
root@depot:/var/debian-mirror# mkdir mirror skel var


Configuration apt-mirror


Édition du fichier de configuration de apt-mirror

Il faut ensuite éditer le fichier de configuration pour configurer le dépôt local qui sera créé en tant que miroir des dépôts officiels. Le fichier de configuration d’apt-mirror est « /etc/apt/mirror.list ». Le fichier est composé de trois parties :

  • Définition des options de l’application apt-mirror
  • Liste des dépôts à synchroniser
  • Une option de « nettoyage ».
root@depot:/var# vi /etc/apt/mirror.list


Configuration apt-mirror

Dans la première section il faut définir le dossier, et son arborescence, où seront copiés l’ensemble des fichiers des dépôts.

Ensuite, dans la seconde section, il faut définir le type d’architecture pour le(s)quel(s) on souhaite créer le dépôt. Sur notre réseau l’ensemble de nos serveurs ont une architecture de type i386, il n’est donc pas nécessaire de récupérer les versions de Debian pour les autres types d’architecture.

Enfin, dans la troisième section, il faut définir le nombre de thread simultanés pour le téléchargement des fichiers du dépôt. Le nombre de thread est à moduler en fonction des performances de l’accès Internet

############# config ##################

set base_path    /var/debian-mirror
set mirror_path  $base_path/mirror
set skel_path    $base_path/skel
set var_path     $base_path/var
# set cleanscript $var_path/clean.sh
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set defaultarch i386
set nthreads 20
set _tilde 0

############# end config ##############


Définition des dépôts à synchroniser

Comme sur le réseau, il y a encore des serveurs qui tournent sur différentes versions de Debian (Etch, Lenny et Squeeze), il a fallut définir les dépôts pour ces trois distributions.

#############ETCH ##############
deb http://archive.debian.org/debian/ etch contrib main non-free
deb-src http://archive.debian.org/debian/ etch contrib main non-free

#############LENNY ##############
deb http://ftp.fr.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ lenny main contrib non-free
deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free
deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

#############SQUEEZE ##############
deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
deb http://www.debian-multimedia.org squeeze main non-free
deb-src http://mirror.home-dn.net/debian-multimedia squeeze main
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free
deb http://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free


Activation des scripts de nettoyage

Il est possible d’activer un script de nettoyage après la synchronisation des dépôts .

clean http://security.debian.org/
clean http://volatile.debian.org/debian-volatile
clean http://ftp.fr.debian.org/debian/


Création du dépôt


Synchronisation des dépôts

La commande apt-mirror lance la synchronisation des dépôts.

root@depot:/var/debian-mirror# apt-mirror
Downloading 66 index files using 4 threads...
Begin time: Tue Mar 15 11:35:44 2011
[4]...	[3]... [2]... [1]... [0]...
End time: Tue Mar 15 11:35:50 2011
Proceed indexes: [SSSPPP]
62.0 GiB will be downloaded into archive
Downloading 73537 archive files using 4 threads...
Begin time: Tue Mar 15 11:36:03 2011


Synchronisation des dépôts

Maintenant que les fichiers sont bien copiés sur le dépôt, il faut le rendre accessible aux serveurs du réseau. Lors d’une mise à jour ou une installation, la récupération des paquets se fait par http, ou éventuellement par TFP. Il faut donc déployer un serveur Web pour permettre l’accès au dépôt.

Si cela n’a pas encore déjà été fait, il faut donc installer un serveur apache.

root@depot:/# aptitude install apache2

En faisant au plus simple, il suffit de déclarer la racine de l’arborescence à utiliser pour le nouveau site web. La configuration se fait sur le fichier « /etc/apache2/sites-enabled/000-default ».

Dans la première section du fichier, il faut déclarer l’arborescence du site Web.

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/debian-mirror
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/debian-mirror/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

Après avoir sauvegardé les modifications, il faut relancer le serveur apache.

root@depot:/# /etc/init.d/apache2 reload

On peut vérifier que le site est bien en accessible en se connectant au serveur via un navigateur.


Utilisation du dépôt local


Configuration des sources

Il faut maintenant modifier le fichier des sources à utiliser par aptitude pour télécharger les paquets d’installation et de mises à jour, en éditant le fichier sources.list.

deb01:~# vi /etc/apt/sources.list

Il faut commenter toutes les entrées correspondants à des dépôts sur Internet et saisir les nouveaux dépôts locaux.

deb http://10.100.0.98/debian/mirror/ftp.fr.debian.org/debian/ squeeze main contrib non-free
deb-src http://10.100.0.98/debian/mirror/ftp.fr.debian.org/debian/ squeeze main contrib non-free
deb http://10.100.0.98/debian/mirror/security.debian.org/ squeeze/updates main contrib non-free
deb-src http://10.100.0.98/debian/mirror/security.debian.org/ squeeze/updates main contrib non-free
deb http://10.100.0.98/debian/mirror/ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free
deb-src http://10.100.0.98/debian/mirror/ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free
deb http://10.100.0.98/debian/mirror/www.debian-multimedia.org squeeze main non-free
deb-src http://10.100.0.98/debian/mirror/www.debian-multimedia.org squeeze main


Mises à jour des paquets

Il ne reste maintenant qu’à lancer l’update sur le serveur client pour mettre à jour les index des parquets disponibles.

deb:~# apt-get update
deb:~# aptitude update

L’update terminée, il est possible de lancer ensuite un upgrade pour lancer la mise à jour des paquets installés, ou un dist-upgrade pour mettre à la jour la distribution installée.

deb:~# apt-get upgrade
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
...
Les paquets suivants seront mis à jour :
exim4 exim4-base exim4-config exim4-daemon-light linux-image-2.6.26-2-686 linux-libc-dev tzdata
7 mis à jour, 0 nouvellement installés, 0 à enlever et 6 non mis à jour.
Il est nécessaire de prendre 23,7Mo dans les archives.
Après cette opération, 877ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ?


Mise à jour de la distribution

Il est aussi possible de lancer la mise à jour de la distribution installée (ici une Lenny). On commence par lancer un update, puis on lance l’upgrade de la distribution.

deb:~# apt-get update
…
deb:~# cat /etc/debian_version
5.0.8
deb:~# apt-get dist-upgrade
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Calcul de la mise à jour... Fait
...
6 mis à jour, 2 nouvellement installés, 2 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 1133ko dans les archives.
Après cette opération, 36,9ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ?

Il faut ensuite éditer le ficher de sources pour que les nouveaux dépôts utilisés soient ceux de squeeze.

deb:~# vi /etc/apt/sources.list
deb http://fronto/mirror/ftp.fr.debian.org/debian/ squeeze main contrib non-free
deb-src http://fronto/mirror/ftp.fr.debian.org/debian/ squeeze main contrib non-free

Et il faut à nouveau relancer un apt-get udpate pour télécharger la liste des paquets de la nouvelle version un apt-get dist-upgrade pour lancer la mise à jour. Il est possible qu’il faille relancer la commande plusieurs fois, jusqu’à ce que la mise à jour soit réalisée sans erreurs. L’ensemble de la msie à jour peut prendre un certain temps.

deb:~# apt-get update
Réception de : 1 http://depot squeeze Release.gpg [1671B]
Ign http://depot squeeze/main Translation-fr
Ign http://depot squeeze/contrib Translation-fr
Ign http://depot squeeze/non-free Translation-fr
Réception de : 2 http://depot squeeze Release [69,3kB]
Réception de : 3 http://depot squeeze/main Packages [8631kB]<
Réception de : 4 http://depot squeeze/contrib Packages [65,6kB
Réception de : 5 http://depot squeeze/non-free Packages [131kB]
Réception de : 6 http://depot squeeze/main Sources [4822kB]
Réception de : 7 http://depot squeeze/contrib Sources [40,0kB]
Réception de : 8 http://depot squeeze/non-free Sources [74,3kB]
13,8Mo réceptionnés en 7s (1922ko/s)
Lecture des listes de paquets... Fait
deb:~#
deb:~# cat /etc/debian_version
5.0.8
deb:~# apt-get dist-upgrade
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Calcul de la mise à jour... Fait
Les paquets suivants seront ENLEVÉS :
libept0 libxcb-xlib0 mysql-server mysql-server-5.0
Les NOUVEAUX paquets suivants seront installés :
…
241 mis à jour, 75 nouvellement installés, 4 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 198Mo dans les archives.
Après cette opération, 153Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ?
...
198Mo réceptionnés en 25s (7826ko/s)
...
deb-Nessus:~# apt-get update
...
deb:~# apt-get upgrade
Lecture des listes de paquets... Fait<
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
deb:~# cat /etc/debian_version
6.0

La mise s'est bien déroulée, le serveur est maintenant sur la distribution Lenny. A noter que le téléchargement des paquets nécessaires à cette mise à jour a duré 25 secondes pour 198 Mo à télécharger.


Configuration spécifique du dépôt multimédia

La mise des paquets du dépôt multimédia nécessite de mettre à jour la clé PGP pour ce dépôt. L'opération est à réaliser sur les serveurs qui doivent récupérer des paquets sur le dépôt multimédia.

A la fin de l'exécution de la commande « aptitude update »; un message d'erreur indique une erreur PGP.

deb-Nessus:~# aptitude update
...
199 o téléchargés en 0s (911 o/s)
W: Erreur de GPG : http://10.100.0.98 squeeze Release : Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY 07DC563D1F41B907

Il est nécessaire d'installer cette clé à l'aide des commandes suivantes, en indiquant la clé fourni dans le message d'erreur. Ces commandes nécessitent que le serveur dispose d'un accès à Internet.

deb-Nessus:~# gpg --keyserver pgpkeys.mit.edu --recv-key 07DC563D1F41B907
gpg: requête de la clé 1F41B907 du serveur hkp pgpkeys.mit.edu
gpg: clé 1F41B907: clé publique « Christian Marillat <marillat@debian.org> » importée
gpg: aucune clé de confiance ultime n'a été trouvée
gpg: Quantité totale traitée: 1
gpg: importée: 1
deb-Nessus:~# gpg -a --export 07DC563D1F41B907 | apt-key add -
OK
deb-Nessus:~#