Comment apt-get fonctionne vraiment?


34

OK, je comprends comment je peux utiliser apt-get {install|upgrade|remove} mypackagespour installer, mettre à niveau ou supprimer des fichiers binaires, ainsi que leurs fichiers de données de configuration et leurs dépendances (en fait, removeles fichiers binaires ne seront supprimés que si des indicateurs supplémentaires sont fournis).

Je ne cherche pas à savoir comment il est utilisé comme mandécrit ici, mais à haut niveau ce qu'il fait. Mon objectif final est de créer un moyen pour moi d’installer et de gérer un logiciel personnalisé (créé par un fichier make) sur plusieurs ordinateurs distants, et j’ai besoin d’approfondir mes connaissances du processus. Si les réponses à cette question sont basées sur la distribution utilisée, veuillez l’adapter à Debian.

En plus de savoir comment cela fonctionne, j'ai les questions spécifiques suivantes:

  1. Comment le client qui accède au référentiel apt garde-t-il une trace des fichiers?
  2. Le référentiel doit-il être hébergé sur le même système d'exploitation (le référentiel apt peut-il être hébergé sur redhat)?
  3. Comment les emplacements pour installer les fichiers sont-ils spécifiés? Est-ce spécifié par le .debfichier?
  4. Comment une machine distante accède-t-elle au référentiel? Est-ce juste ftp (s) ou http (s)?
  5. La machine hébergeant le référentiel utilise-t-elle un logiciel spécial (tel que gitlab pour un référentiel git) ou s'agit-il simplement d'un système de fichiers structuré?

Réponses:


47

Vous devez consulter https://wiki.debian.org/Packaging - le tutoriel d’emballage qui s’y trouve vous aidera beaucoup, ainsi que certaines parties du guide du nouveau responsable.

En ce qui concerne vos questions, dans l'ordre:

  1. Le référentiel contient des fichiers "list". Par exemple, http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz . apt-get updatetélécharge ces fichiers de liste et les stocke dans /var/lib/apt/lists. Les fichiers de liste répertorient tous les packages, y compris un ensemble de métadonnées et une URL relative permettant de rechercher le fichier .deb. (Ce sont des fichiers en texte brut lisibles par l’homme, vous pouvez donc les consulter).

  2. OS n'a pas d'importance. Vous pouvez l'héberger sur Windows si vous le souhaitez. (Eh bien, vous pourriez avoir des problèmes avec les noms de fichiers que Windows n’aime pas.) (Voir aussi les n ° 4 et 5).

  3. Oui, c'est dans le fichier deb. Un fichier deb est en réalité une archive (utiliser ar). À l'intérieur se trouvent des fichiers tar; l'un d'eux est (essentiellement) extrait vers /.

  4. C'est juste HTTP (ou HTTPS, ou FTP, ou ... apt-get supporte beaucoup de protocoles). Rien de spécial, cependant. Notez qu'il existe des fichiers Release, signés avec gpg, qui garantissent une intégrité même sans HTTPS. Les miroirs Debian utilisent principalement HTTP, pas HTTP. (Quelques-uns supportent également HTTPS pour des raisons de confidentialité).

  5. C'est juste un système de fichiers structuré.

Voici un aperçu rapide et détaillé de la manière dont apt-get interagit avec une source de paquet:

  1. Vous configurez les sources à consulter dans votre fichier sources.list. Considérez une ligne comme:

    deb http://http.us.debian.org/debian/ stretch main
    

    debdit que ceci est une source pour obtenir des fichiers .deb (binaires); il y a ensuite le préfixe d'URL, la suite / release ("stretch") et le composant ("main").

  2. apt-get a une liste d'architectures, il l'obtient de dpkg. Disons dpkg --print-architectureest amd64. apt-get peut maintenant construire les URL à partir desquelles il va télécharger, en combinant le préfixe d'URL, le mot "dists", la suite, le composant et l'architecture. Ensuite, il pointe sur quelques noms de fichiers fixes, tels que "Packages.xz". Cela donne l'URL ci-dessus (dans # 1). Il existe encore quelques fichiers avec des noms / chemins définis, comme le fichier de publication http://http.us.debian.org/debian/dists/stretch/Release et sa signature (identique, avec .gpg ajouté). Ce sont tous des fichiers texte brut (éventuellement compressés). Le fichier de version contient des sommes de contrôle pour d’autres fichiers qu’apt-get va télécharger, tels que Packages.xz.

  3. Le fichier Packages.xz répertorie tous les packages de cette suite / nom de code / architecture. Il donne également le chemin où ce fichier est situé; par exemple pool/main/0/0ad/0ad_0.0.21-2_amd64.deb.

  4. Lorsque vous demandez à apt-get de télécharger un paquet, il utilise cet emplacement + l'URL de base pour le télécharger. Ce paquet se trouve donc à l' adresse http://http.us.debian.org/debian/pool/main/0/0ad. /0ad_0.0.21-2_amd64.deb

  5. L'autre répertoire intéressant est à la sourceplace de binary-amd64. C'est utilisé pour vos deb-srcentrées; il contient des informations sur les paquets sources (et est par ailleurs assez similaire).

  6. Il y a d'autres choses (toutes facultatives, je crois) qui peuvent faire partie du référentiel (c'est-à-dire disponibles via HTTP): diffs entre différentes versions du fichier Packages.xz; traductions des descriptions de paquet, une liste complète de chaque fichier installable et le paquet auquel il appartient (Contents-amd64.gz, utilisé par exemple par apt-fichier, pas par apt-get), etc. Ceci ne vous concerne probablement pas, mais vous pouvez tous les voir en parcourant http://http.us.debian.org/debian/dists/stretch/ ; la plupart d'entre eux sont des fichiers en texte brut.

Tous ces fichiers sont en texte brut. Ils peuvent, en théorie, être créés à la main. En pratique, tout le monde utilise l'un de ces outils de génération de référentiel . Ici - et je vous avertis que ce choix a été fait il y a longtemps, donc peut-être obsolète - nous utilisons mini-dinstall. La sortie de ces outils sont des fichiers ordinaires ou, au pire, des liens symboliques. Vous pouvez les resynchroniser sur le serveur Web de votre choix.


Bat-moi à elle ;-). unix.stackexchange.com/q/285635/86440 couvre l'aspect intégrité des choses (point 4). Le support FTP côté miroir a été désactivé récemment par l'IIRC.
Stephen Kitt

En ce qui concerne le point 2, les états debian.org/doc/manuals/distribute-deb/… sont différents. Merci
user1032531

En ce qui concerne le point 5, quel est l'intérêt de wiki.debian.org/DebianRepository/…
user1032531 le

1
@ user1032531 # 2. Il est préférable de créer des paquets sur Debian. Mais votre serveur Web peut être n'importe quoi. (En règle générale, vous créez le package sur votre hôte de génération, éventuellement même la totalité de la structure du référentiel, puis vous le téléchargez sur le serveur Web.) # 5. Ces outils vous aident à construire le système de fichiers structuré, y compris tous les fichiers de listes, les fichiers de version signés, etc. (ils sont probablement aussi plus faciles à exécuter sur Debian).
derobert

2
Les paquets @FaheemMitha (d'une certaine compression, apt moderne préfère .xz) sont définitivement téléchargés et aboutissent /var/lib/apt/lists/. Le contenu est téléchargé par apt-file et auto-apt.
derobert
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.