Comment sont organisés les fichiers d'un dépôt Ubuntu ? Quels sont les fichiers importants dans un dépôt ? Que se passe-t-il lorsqu'un dépôt est incohérent, cassé ou en cours de synchronisation ?
Réponses
Trop de publicités?Joao a répondu à la seconde moitié de ma question, j'ai donc enquêté sur la première moitié par moi-même. Au niveau de la racine, il y a quatre répertoires et un fichier.
root
| -- dists
| -- pool
| -- indices
| -- project
| -- ls-lr.gz
(De même, dans mon repo de collège, seules les deux premières entrées étaient présentes. Donc les 3 dernières semblent être non essentielles au fonctionnement du repo).
Le dossier ls-lr.gz
contient la sortie de la ls -lr
telle qu'exécutée sur le répertoire racine du référentiel.
El dists
semble contenir la plupart des métadonnées, y compris le fichier packages.gz (qui contient la liste des paquets) et Release.gpg/Release qui signe le paquet. (Merci à Joao pour l'info)
El pool
contient les fichiers .deb proprement dits. L'organisation est la suivante /pool/[section]/[letter]/[group]/packagename.deb
. Ainsi, l'emplacement réel du paquet Python-subversion est le suivant /pool/main/s/subversion/python-subversion_1.3.2-3ubuntu2%7edapper1_amd64.deb
car subversion est le groupe du paquet Python-subversion, et s est la première lettre de subversion.
El projects
semble contenir quelques fichiers détaillant comment le miroir a été synchronisé avec le dépôt original.
El indices
contient de nombreux fichiers, pour la plupart vides. Les fichiers non vides semblent fournir des métadonnées supplémentaires pour les paquets.
Selon la ligne deb de votre source apt, apt va chercher :
- http://archive.ubuntu.com/ubuntu/dists/release/Release
- http://archive.ubuntu.com/ubuntu/dists/release/Release.gpg
- http://archive.ubuntu.com/ubuntu/dists/maverick/COMPONENT/binary-ARCH/Packages.gz
Il vérifie si le fichier Release.gpg est une signature valide pour le fichier Release, et si le contenu du fichier Packages.gz correspond à la somme de contrôle d'intégrité présente dans le fichier Release. S'il y a un désaccord, un échec de l'intégrité de la signature du référentiel est signalé.
Le nom du fichier du paquet demandé est déterminé à partir du contenu de Packages.gz récupéré précédemment. Il est téléchargé, et la somme de contrôle de son contenu doit correspondre à celle de Packages.gz, sinon un échec d'intégrité est signalé.
Votre dernière question ne concerne pas la structure du miroir en soi, mais la synchronisation du miroir, qui dépend du processus de mise en miroir. Il est possible de synchroniser en utilisant un emplacement temporaire sans rompre l'intégrité de l'archive pendant la synchronisation. Je ne suis pas sûr que tous les miroirs Ubuntu le fassent.