Table des matières

Mise en place d'un miroir de paquets

Ce document essaie de décrire la configuration des différents outils permettant la mise en place d'un dépôt local de paquets pour APT sur votre système.

Introduction

Il existe de nombreux cas où vous souhaiteriez pouvoir installer des paquets Debian sans devoir passer par Internet, ni par vos trop nombreux cédéroms. Pour cela il existe différents outils pour permettre à l'utilisateur de recréer une arborescence partielle ou complète sur votre disque dur. La mise en place d'un dépôt local de paquets a certains avantages suivant le type de connexion que vous possédez, par exemple :

Il existe deux types de logiciels pour créer un dépôt de paquets Debian. Les logiciels de réplication de miroir Debian et les logiciels orientés réseaux pour créer un serveur mandataire (« proxy ») de paquets Debian. La mise en place d'un dépôt local de paquets peut nécessiter une grande capacité d'espace disque selon le type de miroir que vous voulez faire, miroir des paquets installés ou miroir de l'arborescence complète. En effet, l'arborescence complète des paquets binaires d'un miroir officiel représente environ 10 Go de données. Il est donc conseillé d'utiliser une partition séparée pour ne pas avoir à retélécharger l'arborescence en cas de crash du système.

Nous verrons donc les possibilités offertes et la configuration des différents outils existants.

Miroir local de paquets

apt-move

apt-move est l'un des programmes de création de miroir local les plus complets. Il se configure simplement à l'aide d'options de configuration positionnées dans son fichier de configuration /etc/apt-move.conf.

Options du fichier de configuration

Le fichier de configuration de apt-move est une suite de paires clé=valeur. Les options de configuration sont les suivantes :

APTSITES="ftp.de.debian.org nonus.debian.org"

Il existe une pseudo-valeur /all/ pour indiquer à apt-move de synchroniser tout les sites présents dans le /etc/apt/sources.list.

Commandes de base

apt-move fournit un dizaine de commandes toutes plus ou moins utiles. Voici une description des commandes qui me paraissent les plus utiles :

Si vous voulez en savoir plus sur apt-move, regardez sa documentation dans /usr/share/doc/apt-move/ ou bien sa page de manuel.

debmirror

Debmirror est un script Perl destiné à reproduire un miroir Debian officiel. Il permet de répliquer l'arborescence des binaires et des sources du référentiel. Ce script n'utilise pas encore de fichier de configuration, cependant un rapport de bogue a été ouvert afin d'apporter cette fonctionnalité, Vous pouvez jeter un oeil sur le bogue numéro #244023.

Ce logiciel comporte quelques fonctionnalités intéressantes comme :

Étant donné que debmirror n'utilise pas, pour le moment, de fichier de configuration, nous verrons son fonctionnement à travers des exemples. Voici notre premier exemple :

# debmirror --progress -m --passive -h ftp.de.debian.org -e ftp -d sarge --getcontents /mirror

Cette commande vous permet de créer un miroir de la distribution sarge dans le répertoire /mirror par ftp depuis l'hôte défini par l'argument ftp.de.debian.org de l'option -h. La plupart des options suivantes sont assez faciles à deviner :

Cette commande fera donc un miroir des sections main, contrib et non-free de la distribution sarge des paquets sources et des paquets binaires. Si vous ne voulez pas des paquets sources, il vous suffit de passer en paramètre l'option –nosource.

Supposons maintenant que vous ne vouliez inclure que les sections main et contrib, mais aussi que vous ne souhaitez pas inclure les sections gnome et KDE parce que votre ordinateur n'est pas assez puissant pour supporter ces environnements. Il est très simple d'arriver à ceci en utilisant debmirror, il vous suffira d'ajouter à l'exemple précédent les paramètres suivants :

  1. s main -s contrib –exclude-deb-section=“gnome|kde”

Il est possible d'effectuer cette commande sur un miroir déjà présent.

Nous avons vu précédemment que l'on pouvait ne télécharger que certaines branches de l'arborescence (ex. : main) ou que certaines sections (ex. : doc, devel, etc.). Il est possible d'affiner plus en détail ce que nous ne voulons pas télécharger à l'aide de l'option –exclude, cette option se présente sous la forme –exclude=expression. Cette option peut être utilisée plusieurs fois. Supposons que vous n'êtes pas programmeur et que vous ne vouliez pas des fichiers d'en-tête des bibliothèques ou de certains logiciels, vous pouvez simplement lancer la commande suivante :

$ debmirror --progress -m --passive -h ftp.de.debian.org -e ftp -d sarge --getcontents --exclude=".*-dev.*" /home/moi/mirror/

Vous obtiendrez alors, un dépôt de paquet identique à ceux utilisés par APT mais dépouillés de tous les paquets contenant la chaîne -dev.

Une fois votre miroir présent sur votre disque dur, il se peut que vous ayez besoin de le mettre à jour de temps en temps pour être sûr d'avoir les dernières versions des logiciels présents. La mise à jour de votre dépôt peut être faite de manière très simple avec debmirror en lançant la commande suivante :

$ debmirror --progress --md5sums -h ftp.de.debian.org -e rsync -r :debian -d sarge --getcontents /home/moi/mirror/

Cette commande n'ira télécharger que les paquets modifiés depuis votre dernière mise à jour. L'utilisation de la méthode rsync permet d'économiser la bande passante, car il n'est pas nécessaire de télécharger à nouveau l'intégralité du miroir, il ne téléchargera que les fichiers qui sont différents de ceux que vous avez dans votre dépôt.

Il est aussi possible d'utiliser la méthode rsync pour créer votre dépôt local.

Voilà un bref aperçu des possibilités offertes par debmirror, il est beaucoup plus flexible au niveau des exclusions des paquets qu'apt-move, je vous renvoie à sa page de manuel si vous voulez en savoir davantage sur ce logiciel.

Serveur mandataire

apt-proxy

apt-proxy est structuré de telle manière qu'un sous-répertoire du cache corresponde à un miroir. Toutefois il est possible d'utiliser plusieurs miroirs pour chaque répertoire du cache. Cela signifie que certaines sources sont accessibles a partir de plusieurs adresses, apt-proxy peut utiliser plusieurs adresses différentes si les référentiels sont rigoureusement identiques comme par exemple dans le cas de miroirs officiels Debian. Cet outil possède un autre avantage, c'est qu'il gère autant les sources HTTP que FTP ou rsync. apt-proxy fournit également un outil d'importation de paquets nommé apt-proxy-import.

Si vous utilisez la version d'apt-proxy qui est en unstable regardez directement la section intitulée “Migration d'une version 1.3.x vers une version 1.9.x”.

Configuration du serveur

apt-proxy est un programme qui utilise le super-démon Internet inetd. Pour installer apt-proxy, il vous suffit de lancer la commande :

# apt-get install apt-proxy

Lors de la configuration du paquet, le script de post-installation insère la ligne suivante dans le fichier /etc/inetd.conf :

9999 stream tcp nowait.400 aptproxy /usr/sbin/tcpd /usr/sbin/apt-proxy -l /var/log/apt-proxy.log

Pour les utilisateurs de xinetd cela nécessite un peu de configuration. Tout d'abord, vous devrez exécuter la commande suivante :

# echo "9999 stream tcp nowait.400 aptproxy /usr/sbin/tcpd /usr/sbin/apt-proxy -l /var/log/apt-proxy.log" | itox

Récupérez la sortie de cette commande et mettez-la dans un fichier /etc/xinetd.d/aptproxy. Le fichier ressemblera à ceci pour le moment :

service 9999
{
   socket_type     = stream
   protocol        = tcp
   wait            = no
   user            = aptproxy
}

Modifiez la ligne service 9999 pour qu'elle devienne service apt-proxy. À ce stade, apt-proxy ne fonctionnera toujours pas avec xinetd, car xinetd utilise le fichier /etc/services pour connaître les services connus et notre apt-proxy n'y figure pas. Pour le rajouter, exécutez simplement cette commande en tant que root :

# echo -e "apt-proxy\t9999/tcp" >> /etc/services

Maintenant, que apt-proxy est reconnu par xinetd, rajoutez l'option -daemon_dir dans le fichier /etc/default/xinetd dans la variable XINETD_OPTS. Après toutes ces modifications, on commence à voir le bout de la configuration avec xinetd. Il ne reste plus qu'à modifier le fichier /etc/xinetd.d/aptproxy pour y rajouter les lignes suivantes avant l'accolade fermante :

disable     = no
port        = 9999
server      = /usr/sbin/apt-proxy
server_args = -l /var/log/apt-proxy.log

Voilà ce à quoi doit ressembler le fichier de configuration pour xinetd :

service aptproxy
{
    socket_type = stream
    protocol    = tcp
    wait        = no
    user        = aptproxy
    disable     = no
    port        = 9999
    server      = /usr/sbin/apt-proxy
    server_args = -l /var/log/apt-proxy.log
}

Après tout ceci, votre apt-proxy est prêt à être utilisé avec xinetd.

Le fichier de configuration d'apt-proxy se nomme /etc/apt-proxy/apt-proxy.conf, il contient une suite de variables et de « backend » (NdA : Si quelqu'un a une bonne définition de backend en français ;-)). Un backend se présente sous la forme suivante :

add_backend /debian/                  \
    $APT_PROXY_CACHE/debian/          \
    http://SERVEUR_UN/debian/         \
    ftp://SERVEUR_DEUX/debian/        \
    +SERVEUR::debian/

Un « backend » est un répertoire dans lequel les paquets téléchargés sur les serveurs SERVEUR_UN, SERVEUR_DEUX ou SERVEUR seront placés et ordonnés comme sur les serveurs utilisés. Vous pouvez mettre par backend autant de serveurs que vous le souhaitez et ce avec divers protocoles tels que rsync, http ou ftp. La première ligne définit le nom d'un nouveau backend, il sera utilisé dans le fichier de sources APT du client. La seconde ligne indique le chemin absolu vers le répertoire où apt-proxy stockera les fichiers. Les lignes suivantes définissent les serveurs à utiliser pour rechercher les paquets demandés par le client. Les serveurs sont interrogés comme suit : si une ligne contient un « + » apt-proxy interrogera ce serveur en priorité pour récupérer les fichiers de contrôle utilisé par APT. En ce qui concerne les paquets, apt-proxy interrogera séquentiellement les serveurs listés s'ils ne sont pas déjà dans le cache d'apt-proxy. Voici maintenant quelques exemples de backends utiles :

# Serveur principal
add_backend /debian/                    \
    $APT_PROXY_CACHE/debian/            \
    ftp://ftp.de.debian.org/debian/     \
    http://ftp.uk.debian.org/debian/    \
    +ftp.us.debian.org::debian/
# Debian non-US
add_backend /non-US/                            \
    $APT_PROXY_CACHE/non-US/                    \
    http://non-us.debian.org/                   \
    http://ftp.de.debian.org/debian-non-US/     \
    http://ftp.uk.debian.org/debian-non-US/     \
    +ftp.de.debian.org::debian-non-US/
# Pour les mises à jour de sécurité de woody
add_backend /security/          \
    $APT_PROXY_CACHE/security/  \
    http://security.debian.org

<note>Notez bien les « \ » terminaux au niveau des backends et des serveurs, ils sont très importants. Un oubli peu empêcher le fonctionnement d'apt-proxy. apt-proxy étant un script shell, il est possible d'effectuer une boucle sur plusieurs backends dans le fichier de configuration. On évite donc de perdre de l'espace, en voici un exemple :

for i in debian non-US security openoffice ; do
    add_backend /$i/            \
      $APT_PROXY_CACHE/$i/      \
      http://hôte:9999/$i/
done

Le fichier /etc/apt-proxy/apt-proxy.conf définit aussi quelques variables, voici les plus intéressantes :

Définit le répertoire de cache d'apt-proxy.

Définit le nombre de jours de conservation d'un .deb lorsqu'un nouveau existe.

Cette variable indique le nombre de jours entre deux vérifications des .deb peu utilisés et/ou obsolètes.

Définit le nombre maximum de versions à conserver.

Migration d'une version 1.3.x vers une version 1.9.x

La distribution unstable fournit désormais une version d'apt-proxy réécrite en python (la 1.9.15 à l'heure où j'écris ces lignes). Cette version tourne en tant que service à part entière et n'utilise plus inetd. Pour le moment les versions 1.9.x d'apt-proxy utilisent un fichier de configuration (ie. /etc/apt-proxy/apt-proxy-v2.conf) différent de celui des versions 1.3.x (ie. /etc/apt-proxy/apt-proxy.conf). Cela vous permettra, si vous conservez le paquet de la version 1.3.x, de revenir à la version précédente sans aucun problème.

Les versions 1.9.x ne fournissent pour le moment pas la méthode de récupération des fichiers Packages par rsync, vous devrez donc désactiver cette fonctionnalité dans le fichier de configuration apt-proxy-v2.conf. Pour migrer vers les versions 1.9.x d'apt-proxy, il existe un script de conversion appelé apt-proxy-v1tov2 et fourni dans le paquet. Exécutez ensuite les commandes suivantes en tant que superutilisateur :

# cp /etc/apt-proxy/apt-proxy-v2.conf /etc/apt-proxy/apt-proxy-v2.conf.bak
# apt-proxy-v1tov2 > /etc/apt-proxy/apt-proxy-v2.conf

Éditez ensuite le fichier /etc/apt-proxy/apt-proxy-v2.conf généré par le script apt-proxy-v1tov2 pour commenter éventuellement les lignes faisant référence au backend rsync.

Une fois le fichier de configuration modifié, il faut désactiver le service dans inetd ou xinetd. Pour désactiver ce service avec inetd, il suffit de rajouter un « # » au début de la ligne :

9999 stream tcp nowait.400 aptproxy /usr/sbin/tcpd /usr/sbin/apt-proxy -l /var/log/apt-proxy.log

Pour xinetd, il suffit de changer la ligne :

disable = no

en :

disable = yes

Redémarrez ensuite inetd ou xinetd en utilisant la commande suivante :

# /etc/init.d/inetd restart

Remplacez simplement inetd par xinetd si vous utilisez xinetd.

Configuration des clients

Pour configurer les clients, il vous suffit d'insérer dans votre sources.list une ligne de cette forme :

deb http://ip_du_serveur:9999/backend distrib section ...

Insérer autant de lignes que vous avez de « backends ».

apt-proxy-import

La commande apt-proxy-import est un script qui vous permet d'importer des paquets Debian dans le cache de votre mandataire apt (par défaut dans /var/cache/apt-proxy/). Pour cela, il vous suffit de mettre à jour les fichiers Packages.gz de votre cache en faisant :

# apt-get update

puis de lancer la commande suivante :

# apt-proxy-import /chemin/vers/le/répertoire/a/mettre/en/cache/

Pour le cache d'APT, il s'agira du répertoire /var/cache/apt/archives/.

apt-cacher

apt-cacher n'est pas un véritable proxy pour paquets Debian. Il utilise le protocole HTTP par l'intermédiaire du serveur Apache pour répondre aux requêtes d'envoyées par APT et wget pour télécharger les paquets sur les miroirs. La configuration des clients et du serveur est relativement simple.

Configuration du serveur

Pour installer apt-cacher, exécuter la commande suivante en tant que root :

# apt-get install apt-cacher

Une fois installé, vous pouvez consulter la configuration à partir de votre navigateur à l'adresse http://localhost:3142/apt-cacher/ si vous êtes sur la machine où est installé apt-cacher ; sur les clients, cette page est accessible par http://ip_du_serveur:3142/apt-cacher/. Il existe une variable qui permet à apt-cacher de générer des rapport d'utilisation journaliers et accessibles en ligne à http://ip_du_serveur:3142/apt-cacher/report. Cette variable se nomme : generate_reports. Par défaut, elle est positionnée à 0. Je vous laisse le soin de regarder les autres options de configuration dans le fichier de configuration /etc/apt-cacher/apt-cacher.conf.

Configuration des clients

La configuration des clients est simple, prenons par exemple cette ligne du fichier /etc/apt/sources.list :

  deb http://ftp.de.debian.org/debian/ unstable main contrib non-free

Cette ligne récupère tous les paquets Debian des sections, main, contrib et non-free sur le serveur ftp.de.debian.org. Pour pouvoir utiliser apt-cacher il vous suffit de de modifier la ligne ci-dessus comme ceci :

 deb http://ip_du_serveur:3142/apt-cacher/ftp.de.debian.org/debian/ unstable main contrib non-free

Répétez cette opération, pour toutes les sources que vous souhaitez conserver dans le cache.

Conclusion

Il existe de nombreuses solutions pour vous faire un miroir local de paquets, chacune d'entre elles a ses avantages et ses inconvénients. Il existe bien sûr d'autres possibilités comme apt-ftparchive ou rsync cependant ces logiciels nécessitent une configuration qui est relativement complexe pour la plupart des utilisateurs. Les logiciels vus dans cette documentation facilitent la réplication des dépôts officiels de paquets Debian.

Tous ces logiciels ont leurs avantages et leurs inconvénients, apt-move et est très avantageux lorsque vous souhaitez faire une copie des dépôts présents dans votre /etc/apt/sources.list tandis que debmirror est utile lorsque vous souhaitez n'avoir que l'archive Debian officielle.