Wie funktioniert apt-get wirklich?

34

Okay, ich verstehe, wie ich apt-get {install|upgrade|remove} mypackagesBinärdateien sowie deren Konfigurationsdatendateien und Abhängigkeiten installieren, aktualisieren oder entfernen kann (tatsächlich removewerden die Binärdateien nur entfernt, sofern keine zusätzlichen Flags bereitgestellt werden).

Ich suche nicht, wie es verwendet wird, wie es das manbeschreibt, 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, und ich muss mehr über den Prozess erfahren. Wenn die Antworten auf diese Frage darauf basieren, welche Distribution verwendet wird, passen Sie sie 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 (dh kann das Apt-Repository auf RedHat gehostet werden)?
  3. Wie werden die Speicherorte für die Installation der Dateien angegeben? Wird dies in der .debDatei angegeben?
  4. Wie greift ein Remote-Computer auf das Repository zu? Ist es nur ftp (s) oder http (s)?
  5. Ist der Rechner, auf dem das Repository gehostet wird, eine spezielle Software (wie gitlab für ein Git-Repository) oder handelt es sich nur um ein strukturiertes Dateisystem?
user1032531
quelle

Antworten:

47

Sie müssen einen Blick auf https://wiki.debian.org/Packaging werfen - das Paket-Tutorial dort wird Ihnen viel helfen, ebenso wie Teile des neuen Betreuerhandbuchs.

In Bezug auf Ihre Fragen, um:

  1. Das Repository enthält "List" -Dateien. ZB http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz . apt-get updateLä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 für Menschen lesbare Nur-Text-Dateien, Sie können sie sich also einfach ansehen.)

  2. Betriebssystem spielt keine Rolle. Sie könnten es auf Windows hosten, wenn Sie wollten. (Vielleicht haben Sie Probleme mit Dateinamen, die Windows nicht mag.) (Siehe auch Nr. 4 und Nr. 5).

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

  4. Es ist nur HTTP (oder HTTPS oder FTP oder ... apt-get unterstützt viele Protokolle). Nichts besonderes. Beachten Sie, dass es Release-Dateien gibt, die mit gpg signiert sind und die Integrität auch ohne HTTPS gewährleisten. Debian-Spiegel verwenden meistens HTTP, nicht HTTPs. (Einige unterstützen auch HTTPS für die Vertraulichkeit).

  5. Es ist nur ein strukturiertes Dateisystem.

Eine schnelle, allgemeine Übersicht über die Interaktion von apt-get mit einer Paketquelle:

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

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

    debsagt, dass dies eine Quelle für .deb-Dateien (Binärdateien) ist; dann gibt es das URL-Präfix, suite / release ("stretch") und component ("main").

  2. apt-get hat eine Liste von Architekturen, die von dpkg stammen. Sagen wir mal dpkg --print-architectureist amd64. apt-get kann nun die URLs erstellen, von denen es tatsächlich heruntergeladen werden soll, indem das URL-Präfix, das Wort "dists", die Suite, die Komponente und die Architektur kombiniert werden. Dann werden ein paar feste Dateinamen angehängt, wie "Packages.xz". Das gibt die URL oben (in # 1). Es gibt einige weitere Dateien mit definierten Namen / Pfaden, wie z. B. die Release-Datei http://http.us.debian.org/debian/dists/stretch/Release und deren Signatur (ebenfalls mit angefügtem .gpg). 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, z. B. Packages.xz.

  3. In der Datei Packages.xz werden alle Pakete in dieser Suite / Codename / Architektur aufgelistet . 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 zum Herunterladen eines Pakets auffordern, wird dieser Speicherort + die Basis-URL zum Herunterladen des Pakets verwendet, sodass sich das Paket unter http://http.us.debian.org/debian/pool/main/0/0ad befindet /0ad_0.0.21-2_amd64.deb

  5. Das andere interessante Verzeichnis ist sourcestatt binary-amd64. Dies wird für Ihre deb-srcEingaben verwendet. Es enthält Informationen zu Quellpaketen (und ist ansonsten ziemlich ähnlich).

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

Alle diese Dateien sind Klartextdateien. Sie können theoretisch von Hand erstellt werden. In der Praxis verwendet jeder Benutzer eines dieser Repository-Generierungstools . Hier - und ich warne davor, dass dies eine Entscheidung war, die vor langer Zeit getroffen wurde. Vielleicht ist sie veraltet - 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.

derobert
quelle
Schlagen Sie mich dazu ;-). unix.stackexchange.com/q/285635/86440 behandelt den Integritätsaspekt von Dingen (Punkt 4). Die FTP-Unterstützung auf der Spiegelseite wurde kürzlich für IIRC deaktiviert.
Stephen Kitt
In Bezug auf # 2 heißt es in debian.org/doc/manuals/distribute-deb/… anders. Vielen Dank
user1032531
In Bezug auf # 5, was ist der Sinn von wiki.debian.org/DebianRepository/…
user1032531
1
@ user1032531 # 2. Das Erstellen von Paketen erfolgt am besten unter Debian. Aber Ihr Webserver kann alles sein. (Normalerweise erstellen Sie das Paket auf Ihrem Build-Host, möglicherweise sogar auf der gesamten Repository-Struktur, und laden es dann auf den Webserver hoch.) # 5. Diese Tools helfen Ihnen beim Aufbau des strukturierten Dateisystems, einschließlich aller Listendateien, signierten Veröffentlichungsdateien usw. (Sie lassen sich wahrscheinlich auch am einfachsten unter Debian ausführen).
Derobert
2
@FaheemMitha Pakete (von etwas Komprimierung, moderne Apt bevorzugt .xz) wird definitiv heruntergeladen, landet in /var/lib/apt/lists/. Inhalte werden von apt-file und auto-apt heruntergeladen.
Derobert