Debian - Dépôt Approfondissements
Un article de Wiki.OmBreNoiRe.net.
Il n'est pas du tout nécessaire de lire les lignes qui vont suivre pour utiliser GenDepot.sh !
Néanmoins, si vous souhaitez comprendre comment fonctionne les différents fichiers générés et si vous même avez quelques problèmes, il est très probable que vous trouviez votre réponse ci-dessous !Sommaire |
Introduction
Lors de l'écriture du script GenDepot.sh j'ai rencontré quelques problèmes que j'ai fort heureusement résolu en comprenant plus en profondeur le fonctionnement des différents fichiers (Packages*, Release*, Sources*, Sources.list) et bien évidemment apt-ftparchive.
Si vous rencontrez l'une de ses erreurs car vous tentez de faire un dépôt personnel sans GenDepot.sh voilà qui pourra vous aider. A défaut, je vous conseil tout de même mon script qui aura l'avantage de vous faire gagner du temps :)
Syntaxe du fichier sources.list
La syntaxe du man nous dit :
deb uri distribution [component1] [component2] [...]
La partie deb
deb pouvant être deb ou deb-src en fonction du type de paquet (binaire ou source)
La partie uri
uri pouvant être :
- http://debian.mondomaine.net[/]
- http://www.mondomaine.net/cequejeveux[/]
- http://www.cequejveux.net/truc[/]
Le [/] représente un slash (/) terminal facultatif, exemple http://debian.mondomaine.net/ le mettre ou non aura aucunes conséquences.
La partie distribution [component1] [component2] [...]
2 cas de figure pour distribution :
- distribution SANS slash (/) terminal (le cas du dépôt standard)
Cela peut être le nom d'une distribution, par exemple etch, stable, unstable : dans ce cas le dépôt est sous forme standard (tel que généré par reprero) avec cette arborescence très particulière où distribution est un sous répertoire de uri/dists/.
Vous pouvez si vous le souhaitez faire un dépôt avec votre propre distribution, mais dans ce cas avec cette syntaxe il faudra ajouter un sous-répertoire à uri/dists/ du nom de cette distribution.
Puis vous spécifier les [component1] [component2] [...] et pour chacun des components, il doit exister un sous-répertoire dans uri/pool/ et dans uri/dists/votredistribution/, en notant que uri/pool/nom_component contiendra les paquets et uri/dists/nom_component/ les indexes Release*, Packages*, Sources*
deb http://http.us.debian.org/debian stable main contrib non-free deb http://security.debian.org/ etch/updates main contrib
- distribution AVEC slash (/) terminal (le cas du dépôt non-standard personnel)
Le fait d'ajouter un slash (/) à la fin de la distribution a de grandes conséquences, car cela signifie que l'on indique le répertoire où se trouve les indexes directement.
On ne peut pas mettre de [component1] [component2] [...] après une distribution terminant par un slash (/).
Ainsi si l'on inscrit ces lignes dans le fichier /etc/apt/sources.list :
deb http://mondepot.net/debian etch/ deb http://debian.autredepot.org/etch/6wall ./
Avec deb http://mondepot.net/debian etch/, on indique que les indexes sont dans http://mondepot.net/debian/etch/. Avec deb http://debian.autredepot.org/etch/6wall ./, on indique que les indexes sont dans deb http://debian.autredepot.org/etch/6wall/.
Et l'on verra que deb http://debian.autredepot.org/etch/6wall ./ et deb http://debian.autredepot.org etch/6wall ne sont pas toujours équivalents en fonction des indexes !
Les fichiers indexes
Ce sont les fichiers récupéré par un aptitude update, ils permettent d'indiquer quels sont les paquets disponibles sur le serveur.
Les fichiers Packages*
Le fichier Packages contient les informations sur les paquets binaires .deb. Ces informations sont extraites du .deb, à part la ligne Filename: etch/postfix-vda/postfix-pcre_2.3.8-2+vda0_i386.deb est spécifique au dépôt (du moins le chemin). qui est fonction de la commande apt-ftparchive.
Exemple de fichier Packages :
Package: postfix-pcre Priority: extra Section: mail Installed-Size: 100 Maintainer: LaMont Jones <lamont@debian.org> Architecture: i386 Source: postfix Version: 2.3.8-2+vda0 Depends: libc6 (>= 2.3.6-6), libpcre3 (>= 4.5), postfix, postfix (= 2.3.8-2+vda\ 0) Filename: etch/postfix-vda/postfix-pcre_2.3.8-2+vda0_i386.deb Size: 37874 MD5sum: 81e800b4c421d7e48005ca3339aeda54 SHA1: 99a0b23e0dcf68a7e7a50507f869fddb0f622f03 SHA256: 1d237b5d9e5893b19418f27c66746b6351558cf29de9634825530ecca29ff381 Description: PCRE map support for Postfix Postfix is Wietse Venema's mail transport agent that started life as an alternative to the widely-used Sendmail program. Postfix attempts to be fast, easy to administer, and secure, while at the same time being [...]
Et c'est comme ça, pour chaque fichier .deb, c'est ce fichier que va lire aptitude pour gérer les dépendances, etc...
Pour générer les fichiers Packages*, on utilise le programme apt-archive de la manière suivante :
user@monordi:~$ zcat /var/www/depot/etch/Packages.gz | bzip2 > /var/www/depot/etch/Packages.bz2 user@monordi:~$ zcat /var/www/depot/etch/Packages.gz > /var/www/depot/etch/Packages
Plusieurs remarques :
- Avec ces commandes vous allez donc générer les fichiers Packages.gz, Packages.bz2 et Packages. Il est dit que Packages.bz serait suffisant, mais beaucoup conseil de générer les trois.
- Dans le fichier qui va être généré par les commandes plus haut, le chemin après Filename: sera relatif à /var/www/depot/, c'est pourquoi si le paquet postfix-pcre_2.3.8-2+vda0_i386.deb se trouve dans /var/www/depot/etch/postfix-vda/, le chemin sera Filename: etch/postfix-vda/postfix-pcre_2.3.8-2+vda0_i386.deb
- Le chemin contenu dans Filename: etch/postfix-vda/postfix-pcre_2.3.8-2+vda0_i386.deb est ajouté à la partie uri du fichier /etc/apt/sources/list, par exemple si le fichier contient deb http://debian.mondomaine.net etch/, aptitude ira chercher les paquets binaires à l'adresse http://debian.mondomaine.net/etch/postfix-vda/postfix-pcre_2.3.8-2+vda0_i386.deb
Les fichiers Sources*
Les fichiers Sources* sont l'équivalent des fichiers Packages* (même fonctionnement en tout point), mais pour les paquets sources (.dsc, .orig.tgz, ...).
Pour les générer on utilise la commande suivante :
user@monordi:~$ zcat /var/www/depot/etch/Sources.gz | bzip2 > /var/www/depot/etch/Sources.bz2 user@monordi:~$ zcat /var/www/depot/etch/Sources.gz > /var/www/depot/etch/Sources
Les remarques sont les mêmes qu'avec apt-ftparchive mais pour les Packages*
Le fichier Release.gpg
C'est la signature du fichier Release par la clé privée du propriétaire du dépôt. Elle assure que le fichier Release a bien été créé par le mainteneur du dépôt.
On le génère grâce à la commande suivante :
Le fichier Release
Prenons le fichier Release contenu dans le répertoire etch de mon dépôt pour illustrer ce qui va être la suite.
Architectures: i386 all source Components: main Date: Mon, 23 Jun 2008 23:52:23 UTC Label: debian.ombrenoire.net Origin: Debian - OmBreNoiRe.net Suite: etch MD5Sum: c57016ea29777aa68c8acb40a113aedc 1086 6wall/Packages d8eb5cd4e604b0951800d8092cf14d89 724 6wall/Packages.bz2 eb1bf0737b6c12318ad779729ee4637f 680 6wall/Packages.gz 716b856d0ce45ba8d694284c3f5f5de2 1532 6wall/Release 3840b62df3221e2a8fb8dc95dccbb0be 356 6wall/Sources 231d8a979ede516d022ac201b4fc1548 311 6wall/Sources.bz2 f027d611120992f6a528128eafb6e7f8 267 6wall/Sources.gz 29f34b0b92ca5ec92d337c83c2360a90 26821 Packages 5f59902f82756c92ac21d3a988fa0dd8 7493 Packages.bz2 a83521a19b6c91afa22e53d37c4ea124 7859 Packages.gz 4661907d13eaf11d06a444b9fdba6f9b 2280 Sources b3a1fcd515e46da16ef1b40d721451a0 1123 Sources.bz2 60578a7a40ccb609441a4df8ebfd434e 1002 Sources.gz 2bd58d731caf297c67a269c153faa21a 2620 apache2-mod-security/Packages 751c9525fc42cc18b8d8d1aa6bab9923 1262 apache2-mod-security/Packages.bz2 630e3001520e9247945f6246ec8c2159 1147 apache2-mod-security/Packages.gz 2c06f75a95c1e22329e8e7785cfd0d86 1532 apache2-mod-security/Release 48e5a7a7589cf85e992b06069909e09f 562 apache2-mod-security/Sources 2248e48fe96e429d50deac04a731bb83 399 apache2-mod-security/Sources.bz2 84d6fc6f367a3f8f713339ae641ddf5d 361 apache2-mod-security/Sources.gz [...]
La première partie contient les informations sur le dépôt :
- Architectures: i386 all source : L'architecture (non explorée, mais surement interprété)
- Components: main : Le component (non interprété dans le cas d'une distribution finissant par slash (/) dans /etc/apt/sources.list
- Date: Mon, 23 Jun 2008 23:52:23 UTC : La date de génération du fichier Release (non interprété)
- Label: debian.ombrenoire.net : L'adresse du dépôt (non interprété)
- Origin: Debian - OmBreNoiRe.net : La présentation sur le dépôt (non interprété)
- Suite: etch : la distribution (se réfère au paramètre distribution du fichier /etc/apt/sources.list
La deuxième partie contient le checksum MD5, puis SHA1 et enfin SHA256 : ce sont des signatures suivant des algorithmes permettant d'identifier un fichier (si le fichier est modifié son checksum aussi). Ce checksum est établi pour TOUS les fichiers Release*, Packages*, Sources* du répertoire courant (où est crée le fichier Release) et ses sous-répertoires (récursif).
Pour générer ce fichier, on utilise encore le programme apt-archive, qui va nécessité dans ce cas d'un petit fichier de configuration :
APT::FTPArchive::Release {
Origin "Debian - MonDomaine.Net";
Label "debian.mondomaine.net";
Suite "etch";
Architectures "i386 all source";
Components "main";
}Plusieurs remarques :
- /var/www/depot/etch est le répertoire où l'on créé le fichier Release
- la ligne correspondante dans /etc/apt/sources.list sera deb http://debian.mondomaine.net etch/
ou deb http://debian.mondomaine.net/etch/ ./
- cette commande est lancé après la génération des fichiers Packages* et Sources* (et si besoin des Release*, Packages*, Sources* des sous-répertoires)
- Si vous mettez deb http://debian.mondomaine.net truc/, il FAUT que votre fichier apt-ftparchive.conf contienne suite="truc".
- Si vous mettez deb http://debian.mondomaine.net/truc ./, vous mettez ce que vous voulez comme suite="mavie".
Cas pratiques
Afin de clarifier tout ça, un peu d'exemples !
Les 4 paramètres sur lesquels on va jouer sont :
- la ligne dans le fichier /etc/apt/source.list
- le champs suite="" du fichier apt-ftparchive.conf pour générer le fichier Release
- les champs rep_paquet et rep_racine des commandes
user@monordi:~$ zcat rep_paquet/Packages.gz | bzip2 > rep_paquet/Packages.bz2
user@monordi:~$ zcat rep_paquet/Packages.gz > rep_paquet/PackagesCe qui restera fixé dans tous les exemples:
- http://debian.mondomaine.net pointera TOUJOURS sur /var/www/depot
- l'arborescence simplifiée est la suivante :
/var/www/depot
|
|-/etch
|
|-/6wall
| |-6wall.deb
|
|-/postfix
|-/postfix.deb
Cas 1
On fait un dépôt et l'on souhaite accéder à tous le catalogue (6wall et postfix) en une ligne dans /etc/apt/source.list.
- Paramètres :
- /etc/apt/source.list : deb http://debian.mondomaine.net etch/
- apt-ftparchive.conf : suite="etch"
- rep_racine = /var/www/depot
- rep_paquet = /var/www/depot/etch
- Résultats :
- Filename: etch/postfix/postfix.deb
- aptitude update : OK
- aptitude install postfix : OK
Cas 2
Le même que le cas 1, mais en changeant la ligne dans le /etc/apt/source.list.
- Paramètres :
- /etc/apt/source.list : deb http://debian.mondomaine.net/etch ./
- apt-ftparchive.conf : suite="etch"
- rep_racine = /var/www/depot
- rep_paquet = /var/www/depot/etch
- Résultats :
- Filename: etch/postfix/postfix.deb
- aptitude update : OK
- aptitude install postfix : NOK
- Erreur renvoyée :
Erreur 404 not found http://debian.mondomaine.net/etch/etch/postfix/postfix.deb
Cas 3
Le même que le cas 2, mais en corrigeant rep_racine.
- Paramètres :
- /etc/apt/source.list : deb http://debian.mondomaine.net/etch ./
- apt-ftparchive.conf : suite="etch"
- rep_racine = /var/www/depot/etch
- rep_paquet = /var/www/depot/etch
- Résultats :
- Filename: ./postfix/postfix.deb
- aptitude update : OK
- aptitude install postfix : OK
Cas 4
Désormais, on donne accès à 6wall individuellement.
- Paramètres :
- /etc/apt/source.list : deb http://debian.mondomaine.net/etch/6wall ./
- apt-ftparchive.conf : suite="etch" ou suite="cequejeveux"
- rep_racine = /var/www/depot/etch/6wall
- rep_paquet = /var/www/depot/etch/6wall
- Résultats :
- Filename: etch/6wall/6wall.deb
- aptitude update : OK
- aptitude install 6wall : OK
Cas 5
Idem que cas 4 mais en changeant la ligne dans /etc/apt/source.list
- Paramètres :
- /etc/apt/source.list : deb http://debian.mondomaine.net etch/6wall/
- apt-ftparchive.conf : suite="etch"
- rep_racine = /var/www/depot/
- rep_paquet = /var/www/depot/etch/6wall
- Résultats :
- Filename: etch/6wall/6wall.deb
- aptitude update : NOK
- Erreur renvoyée :
W: Conflicting distribution: http://debian.mondomaine.net etch/6wall/ Release (expected etch/6wall but got )
Si vous n'aviez pas de fichier Release.gpg vous n'auriez pas d'erreur (à part celle de ne pas être un serveur sécurisé) !
Cas 5
Idem que cas 5 mais en changeant la ligne dans apt-ftparchive.conf
- Paramètres :
- /etc/apt/source.list : deb http://debian.mondomaine.net etch/6wall/
- apt-ftparchive.conf : suite="etch/6wall"
- rep_racine = /var/www/depot/
- rep_paquet = /var/www/depot/etch/6wall
- Résultats :
- Filename: etch/6wall/6wall.deb
- aptitude update : OK
- aptitude install 6wall : OK
Conclusion
Voilà j'espère que vous avez tout compris, en cas de besoin n'hésitez pas à me contacter !

