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 :

  • l'installation de paquets sur un ordinateur portable n'ayant pas accès à Internet, ni aucun cédérom ;
  • l'économie de bande passante sur une connexion ADSL ;
  • la possibilité de ne pas avoir à insérer à chaque fois un cédérom pour installer un paquet ;
  • la possibilité d'utiliser ce dépôt local de paquets pour un parc de machines ;
  • conserver les mises à jour faites auparavant en cas de réinstallation.

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 : Cette option définie la liste des sites à synchroniser dans le miroir local séparés par un espace et entre ””. Voici un exemple de positionnement de cette variable :
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.

  • LOCALDIR : La variable LOCALDIR indique l'emplacement du miroir local sur votre machine, par défaut elle est positionnée à /mirrors/debian.
  • DIST : Cette variable indique la version par défaut de la distribution à synchroniser, par défaut elle est positionnée à stable.
  • PKGTYPE : Cette variable définit le type de paquets à télécharger. Trois valeurs sont possibles : binary, source ou both. La valeur par défaut est binary.
  • FILECACHE : Cette variable définit le répertoire du cache de paquets binaires utilisé par APT. Par défaut elle est définie à /var/cache/apt/archives.
  • LISTSTATE : Cette variable définit le répertoire du cache de fichiers Packages de APT. Par défaut, elle est positionnée à /var/lib/apt/lists.
  • DELETE : Cette variable indique à apt-move s'il faut ou non effacer les paquets obsolètes.
  • MAXDELETE : Cette variable indique le pourcentage maximum de fichiers à effacer pendant l'exécution.
  • COPYONLY : Cette variable indique si apt-move doit seulement copier les paquets dans le cache de APT vers le miroir local.
  • PKGCOMP : Cette variable indique si les fichiers Packages doivent être compressés ou pas. Par défaut, cette variable est positionnée à gzip ; si vous ne voulez pas que ces fichiers soient compressés, possitionnez-la à « none ».
  • CONTENTS : Cette variable booléenne permet à apt-move de générer un fichier Contents.gz qui liste tous les fichiers présents dans les paquets.

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 :

  • delete : Cette commande vous permet de supprimer de votre miroir tous les paquets obsolètes, c'est à dire tous les paquets qui ont une version supérieure dans votre miroir.
  • packages : Cette commande parmet de regénérer les fichiers Packages.gz et Sources.gz de votre miroir local.
  • update : Cette commande met à jour votre miroir local en déplaçant les paquets contenu dans le répertoire de la variable FILECACHE dans votre miroir.
  • mirror : Cette commande permet de réaliser un miroir complet de tous les paquets présents sur les différentes sources de votre /etc/apt/sources.list.
  • sync : Cette commande permet de synchroniser votre miroir local avec tous les paquets installés sur votre système.
  • exclude : Cette commande vous permet d'afficher les paquets reconnus par les motifs contenus dans le fichier $LOCALDIR/.exclude.

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 :

  • la duplication de l'arborescence de plusieurs versions de Debian ;
  • la possibilité de faire un miroir pour plusieurs architectures ;
  • exclure une section complète de l'archive (par ex. oldlibs) ;
  • la vérification des sommes md5 des fichiers télécharger afin de s'assurer de l'intégrité des fichiers.

É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 :

  • -m est utilisé pour vérifier les sommes de contrôle md5 ;
  • –progress affiche à l'écran une barre de progression composée de « # » ;
  • -e définit la méthode pour télécharger les paquets, ici par ftp ;
  • -d définit la distribution cible, elle peut être utilisée plusieurs fois ;
  • –getcontents indique à debmirror de télécharger le fichier Contents.gz qui liste le contenu de tous les paquets dans le répertoire /mirror .

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 :

  • APT_PROXY_CACHE

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

  • CLEANUP_DAYS

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

  • CLEAN_SWEEP

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

  • MAX_VERSIONS

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.

 
paquets/mise-en-place-d-un-miroir-de-paquets.txt · Dernière modification: 11/12/2010 15:21 par orgrim