web-dev-qa-db-fra.com

Comment fonctionne apt-get?

D'accord, je comprends comment je peux utiliser apt-get {install|upgrade|remove} mypackages pour installer, mettre à niveau ou supprimer les fichiers binaires ainsi que leurs fichiers de données de configuration et leurs dépendances (en fait, remove ne supprimera les fichiers binaires que si des indicateurs supplémentaires sont fournis).

Je ne cherche pas comment il est utilisé car le man le décrit, mais de haut niveau ce qu'il fait. Mon objectif final est de créer un moyen pour moi d'installer et de gérer des logiciels personnalisés (créés par un fichier make) sur plusieurs machines distantes, et j'ai besoin d'en savoir plus sur le processus. Si les réponses à cette question sont basées sur la distribution utilisée, veuillez adapter Debian.

En plus du fonctionnement général, 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 (c'est-à-dire que le référentiel apt peut être hébergé sur redhat)?
  3. Comment les emplacements d'installation des fichiers sont-ils spécifiés? Est-ce spécifié par le .deb fichier?
  4. Comment une machine distante accède-t-elle au référentiel? Est-ce seulement ftp (s) ou http (s)?
  5. La machine qui héberge le référentiel exécute-t-elle un logiciel spécial (comme gitlab pour un référentiel git), ou s'agit-il simplement d'un système de fichiers structuré?
34
user1032531

Vous devez jeter un coup d'œil à https://wiki.debian.org/Packaging - le tutoriel sur l'emballage vous aidera beaucoup, ainsi que des parties du nouveau guide du responsable.

Quant à vos questions, dans l'ordre:

  1. Le référentiel contient des fichiers "liste". Par exemple .., http://http.us.debian.org/debian/dists/stretch/main/binary-AMD64/Packages.xz . apt-get update té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 tas de métadonnées et une URL relative pour trouver le .deb sur. (Ce sont des fichiers en texte clair lisibles par l'homme, vous pouvez donc simplement les consulter).

  2. Le système d'exploitation n'a pas d'importance. Vous pouvez l'héberger sur Windows, si vous le souhaitez. (Eh bien, vous auriez peut-être des problèmes avec les noms de fichiers que Windows n'aime pas.) (Voir aussi # 4 et # 5).

  3. Oui, c'est à l'intérieur du fichier deb. Un fichier deb est en fait une archive (utilisant 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 l'intégrité même sans HTTPS. Les miroirs Debian utilisent principalement HTTP, pas HTTPs. (Quelques-uns prennent également en charge HTTPS pour la confidentialité).

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

Un aperçu rapide et de haut niveau de la façon dont apt-get interagit avec une source de package:

  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
    

    deb dit que c'est une source pour obtenir les fichiers .deb (binaires); puis il y a le préfixe 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-architecture est AMD64. apt-get peut maintenant construire les URL à partir desquelles il va être téléchargé, en combinant le préfixe URL, le mot "dists", la suite, le composant et l'architecture. Ensuite, il s'attaque à quelques noms de fichiers fixes, comme "Packages.xz". Cela donne l'URL ci-dessus (en # 1). Il y a quelques autres fichiers avec des noms/chemins définis, comme le fichier Release http://http.us.debian.org/debian/dists/stretch/Release et sa signature (idem avec. gpg en annexe). Ce sont tous des fichiers de texte brut (éventuellement compressés). Le fichier de version contient des sommes de contrôle pour d'autres fichiers que apt-get va télécharger, comme Packages.xz.

  3. Le fichier Packages.xz répertorie tous les packages de cette suite/nom de code/architecture. Il donne également le chemin d'accès où se trouve ce fichier; par exemple pool/main/0/0ad/0ad_0.0.21-2_AMD64.deb.

  4. Lorsque vous demandez à apt-get de télécharger un package, il utilise cet emplacement + l'URL de base pour télécharger le package, de sorte que le package se trouve à 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 source au lieu de binary-AMD64. C'est utilisé pour votre deb-src entrées; il contient des informations sur les packages source (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): diffère entre les différentes versions du fichier Packages.xz; traductions des descriptions de paquetages, une liste complète de chaque fichier installable et à quel paquetage il appartient (Contents-AMD64.gz, utilisé par exemple par apt-file, pas par apt-get) etc. Ceux-ci ne sont probablement pas pertinents pour vous, 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 préviens que c'était un choix 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 synchroniser sur le serveur Web de votre choix.

47
derobert