it-swarm.com.de

Wie funktioniert apt-get wirklich?

Okay, ich verstehe, wie ich apt-get {install|upgrade|remove} mypackages Verwenden kann, um Binärdateien sowie deren Konfigurationsdatendateien und Abhängigkeiten zu installieren, zu aktualisieren oder zu entfernen (tatsächlich entfernt remove die Binärdateien nur, wenn zusätzliche Flags bereitgestellt werden ).

Ich suche nicht danach, wie es verwendet wird, wie das man dies beschreibt, sondern auf hohem Niveau, was es tut. Mein Endziel ist es, ein Mittel zu schaffen, mit dem ich eine benutzerdefinierte Software (die von einer make-Datei erstellt wurde) auf mehreren Remotecomputern installieren und verwalten kann. Außerdem muss ich mehr über den Prozess erfahren. Wenn die Antworten auf diese Frage auf der verwendeten Distribution basieren, passen Sie diese bitte an Debian an.

Neben der allgemeinen Funktionsweise habe ich folgende spezifische Fragen:

  1. Wie verfolgt der Client, der auf das apt-Repository zugreift, die Dateien?
  2. Muss das Repository auf demselben Betriebssystem gehostet werden (d. H. Kann das apt-Repository auf redhat gehostet werden)?
  3. Wie werden die Speicherorte für die Installation von Dateien angegeben? Wird dies in der Datei .deb Angegeben?
  4. Wie greift ein Remotecomputer auf das Repository zu? Ist es nur ftp (s) oder http (s)?
  5. Auf dem Computer, auf dem sich das Repository befindet, wird spezielle Software ausgeführt (z. B. Gitlab für ein Git-Repository), oder handelt es sich nur um ein strukturiertes Dateisystem?
34
user1032531

Sie müssen einen Blick auf https://wiki.debian.org/Packaging werfen. Das dortige Verpackungs-Tutorial hilft Ihnen sehr, ebenso wie Teile des neuen Wartungshandbuchs.

Zu Ihren Fragen in der Reihenfolge:

  1. Das Repository enthält "Listendateien". Zum Beispiel http://http.us.debian.org/debian/dists/stretch/main/binary-AMD64/Packages.xz . apt-get update Lädt diese Listendateien herunter und speichert sie in /var/lib/apt/lists. In den Listendateien werden alle Pakete aufgelistet, einschließlich einer Reihe von Metadaten und einer relativen URL, unter der die .deb gefunden werden kann. (Es handelt sich um von Menschen lesbare Klartextdateien, sodass Sie sie sich einfach ansehen können.).

  2. Betriebssystem spielt keine Rolle. Sie können es unter Windows hosten, wenn Sie möchten. (Nun, Sie könnten Probleme mit Dateinamen haben, die Windows nicht mag.) (Siehe auch Nr. 4 und Nr. 5).

  3. Ja, es befindet sich in der Deb-Datei. Eine Deb-Datei ist eigentlich ein Archiv (mit ar). Darin befinden sich einige Teerdateien; einer von ihnen wird (im Wesentlichen) nach / extrahiert.

  4. Es ist nur HTTP (oder HTTPS oder FTP oder ... apt-get unterstützt viele Protokolle). Nichts Besonderes. Beachten Sie, dass es mit gpg signierte Release-Dateien gibt, die die Integrität auch ohne HTTPS garantieren. Debian-Spiegel verwenden meistens HTTP, keine HTTPs. (Einige unterstützen HTTPS auch aus Gründen der Vertraulichkeit).

  5. Es ist nur ein strukturiertes Dateisystem.

Ein kurzer Überblick auf hoher Ebene über die Interaktion von apt-get mit einer Paketquelle:

  1. Sie konfigurieren, welche Quellen in Ihrer Datei sources.list angezeigt werden sollen. Betrachten Sie eine Zeile wie:

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

    deb sagt, dass dies eine Quelle für gettings .deb (binäre) Dateien ist; Dann gibt es das URL-Präfix, Suite/Release ("Stretch") und Komponente ("Main").

  2. apt-get hat eine Liste von Architekturen, die von dpkg stammt. Angenommen, dpkg --print-architecture Ist AMD64. apt-get kann jetzt die URLs erstellen, von denen es tatsächlich heruntergeladen wird, indem das URL-Präfix, die Word-Dists, die Suite, die Komponente und die Architektur kombiniert werden. Dann werden einige feste Dateinamen wie "Packages.xz" angeheftet. Das gibt die URL oben (in # 1). Es gibt einige weitere Dateien mit definierten Namen/Pfaden, wie die Release-Datei http://http.us.debian.org/debian/dists/stretch/Release und ihre Signatur (gleich, mit. gpg angehängt). Dies sind alles (möglicherweise komprimierte) Nur-Text-Dateien. Die Release-Datei enthält Prüfsummen für andere Dateien, die apt-get herunterladen wird, wie z. B. Packages.xz.

  3. Die Datei Packages.xz listet alle Pakete in dieser Suite/Codename/Architektur auf. Es gibt auch den Pfad an, in dem sich diese Datei befindet. zum Beispiel pool/main/0/0ad/0ad_0.0.21-2_AMD64.deb.

  4. Wenn Sie apt-get bitten, ein Paket herunterzuladen, verwendet es diesen Speicherort + die Basis-URL, um das Paket herunterzuladen, sodass sich das Paket unter http://http.us.debian.org/debian/pool/main) befindet /0/0ad/0ad_0.0.21-2_AMD64.deb

  5. Das andere interessante Verzeichnis ist source anstelle von binary-AMD64. Das wird für Ihre deb-src Einträge verwendet; Es enthält Informationen zu Quellpaketen (und ist ansonsten ziemlich ähnlich).

  6. Es gibt einige andere Dinge (alle optional, glaube ich), die Teil des Repositorys sein können (d. H. Über HTTP verfügbar sind): Unterschiede zwischen verschiedenen Versionen der Packages.xz-Datei; Übersetzungen von Paketbeschreibungen, eine vollständige Liste aller installierbaren Dateien und des Pakets, zu dem sie gehören (Contents-AMD64.gz, verwendet von z. B. apt-file, nicht von apt-get) usw. Diese sind für Sie wahrscheinlich nicht relevant. Sie können sie jedoch alle sehen, indem Sie sich umschauen http://http.us.debian.org/debian/dists/stretch/ ; Die meisten davon sind Nur-Text-Dateien.

Alle diese Dateien sind Klartext. Sie können theoretisch von Hand erstellt werden. In der Praxis verwendet jeder eines dieser Tools zur Repository-Generierung . Hier - und ich warne davor, dass dies eine Entscheidung war, die vor langer Zeit getroffen wurde und daher möglicherweise veraltet ist - verwenden wir Mini-Dinstall. Die Ausgabe dieser Tools sind normale Dateien oder im schlimmsten Fall Symlinks. Sie können sie mit einem beliebigen Webserver synchronisieren.

47
derobert