Wie funktioniert apt-get im Detail?

7

Ich arbeite derzeit mit Ubuntu und versuche, ein Debian-System auf einer VM zu installieren, was bedeutet, dass ich mich mit Paketen befassen muss. Da ich neu darin bin, habe ich im Web und insbesondere im Debian-Wiki viel darüber gelesen (Ubuntu-Wiki ist auch nützlich). Insbesondere habe ich gelernt, wie man ein lokales Repository erstellt und wie man die Datei sources.list richtig bearbeitet.

Ich habe jedoch noch einige Fragen zur Funktionsweise, Details, die ich im Web nicht finden konnte.

  • Erstens, wenn Sie ein Online-Repository verwenden. Ich habe verstanden, dass apt-get dem Link folgt, den Sie in der Datei source.list geschrieben haben, und nach einem Packages.gz-Archiv sucht. Was ich nicht verstehe ist, wie dieses einfache Archiv (das nur eine Liste installierbarer Pakete zu sein scheint ) die Installation des Pakets ermöglicht? Gibt Packages.gz passende Informationen darüber, wie Sie die .deb-Datei finden und dann mit der Installation fortfahren können? Oder ist es etwas anderes?

  • Zweitens über das Sources.gz-Archiv. Ich habe gelesen, dass es der Quellcode der in Packages.gz aufgeführten Pakete ist, ABER in den meisten Fällen wird er nicht benötigt. Also, wenn ich den Link zu diesem Sources.gz in meiner source.list-Datei hinzufüge, was gibt es mir wirklich? Was ist der Sinn davon?

  • Drittens über das lokale Repository; Dies hängt mit den vorherigen Fragen zusammen. Ich weiß, wie man ein lokales Repository mit .deb-Dateien erstellt, aber nehmen wir an, ich habe nur dieses Packages.gz-Archiv: Es wird nicht genug sein, oder? und wenn ich das Sources.gz-Archiv habe, wird es funktionieren?

  • Schließlich habe ich im Debian-Repository gesehen, dass es zusätzlich zum dist-Repository ein Pool-Repository mit viel .deb gibt. Ich kenne eine Möglichkeit, diese zu installieren (laden Sie die .deb und ihre Abhängigkeiten herunter, installieren Sie sie mit dpkg -i), aber gibt es eine einfachere Möglichkeit? Etwas Automatischeres, das die .deb online finden, ihre Abhängigkeiten finden und alles installieren könnte? (Genau wie apt-get do, aber soweit ich es verstanden habe, funktioniert apt-get nur mit den Archiven Packages.gz und Sources.gz, nicht direkt mit .deb)

Es tut mir leid, dass dies nicht wirklich eine Frage ist, sondern eine Liste von Fragen ^^, aber alles, was ich online gefunden habe, war meistens "Suche nach dem Paket und seiner Abhängigkeit im Online-Repository und Installation über dpkg", und ich würde es tun wie mehr Details darüber.

Ablia
quelle
2
Bitte nehmen Sie sich die Zeit, dies zu lesen und bearbeiten Sie die Frage anschließend.
Panki
1
getan (hoffentlich gut genug: /)
Ablia
Ja, gute Arbeit, vielen Dank! Es ist jetzt viel einfacher, Ihre Frage zu verstehen und zu beantworten.
Panki
Wenn Sie Ihr eigenes APT-Repository einrichten möchten, pflegen Sie diese Indexdateien nicht manuell. Verwenden Sie eines der Dutzend Tools zur Repository-Generierung .
200_erfolg

Antworten:

9
  1. Die Packages.gz enthält ein FilenameFeld mit einem Wert, der wahrscheinlich ungefähr so ​​aussieht pool/main/n/name-of-package/name-of-package_version_amd64.deb. Dies weist den Paketmanager an, diese URL zu überprüfen.
    Wenn Sie beispielsweise die folgende Zeile in Ihrer source.list (.d) haben:
    deb https://some-domain.com/some-url some-distribution main
    Sie haben die folgende Datei: https://some-domain.com/some-url/dists/some-distribution/main/binary- amd64 / Packages.gz
    Diese Datei wird referenziert pool/main/n/name-of-package/name-of-package_version_amd64.deb, sodass Ihr Paketmanager dies überprüft https://some-domain.com/some-url/pool/main/n/name-of-package/name-of-package_version_amd64.deb.

  2. Sources.gz funktioniert genauso, ist jedoch optional. Es funktioniert mit apt source, wodurch Sie die Quelle abrufen, wenn Sie sie selbst kompilieren möchten, anstatt die vorgefertigten Binärdateien zu verwenden.
    Dies ist vor allem für Systemadministratoren nützlich, die die genaue Version des von einer Distribution verwendeten Pakets patchen möchten, anstatt für Mitwirkende / Neugierige, die einfach auf die Homepage des Projekts gehen und dort die Build-Anweisungen befolgen.

  3. Wenn sich ein Paket im Poolverzeichnis der Distribution befindet, aber nicht in Packages.gz, befindet es sich höchstwahrscheinlich in einem anderen Package.gz. Beachten Sie, wie Sie mehrere Worte in einer typischen sources.listZeile:
    deb http://archive.ubuntu.com/ubuntu precise main universe multiverse
    main, universeund multiversehaben jeweils ihre eigene Packages.gzDatei. Möglicherweise müssen Sie einige aktivieren, da beispielsweise Debian non-freestandardmäßig deaktiviert ist. Einige Pakete sind jedoch immer noch nicht verfügbar (nicht einmal im Pool). Sie können nicht vertrauenswürdige Repositorys hinzufügen (z. B. PPAs unter Ubuntu), das fehlende Programm selbst verpacken (damit Sie und andere Personen ihren Paketmanager zum Verwalten dieses Programms verwenden können) oder es einfach selbst erstellen und installieren (Sie sollten das /usr/localPräfix verwenden Konflikte mit Ihrem Paketmanager vermeiden).

  4. Wenn ein neues (Version eines) Pakets angezeigt wird, wird die ReleaseDatei für die Distribution aktualisiert. Dies ermöglicht apt updatezu wissen, dass es erneut heruntergeladen werden muss Packages.gz.
Nathan Monfils
quelle
Vielen Dank! genau das brauchte ich! Noch eine Sache: Ist es in Ordnung, das Packages.gz-Archiv einer anderen Distribution zu meiner source.list hinzuzufügen? Zum Beispiel, wenn ich eine neue Version eines Pakets will, was in Debian 8 nicht verfügbar ist , aber in Debian 9, und ich will nicht alle die .deb - Dateien „per Hand“ schreiben, konnte ich nur noch hinzufügen http://ftp.debian.org/debian stretch main, so dass ich Zugriff auf alle Stretch-Pakete habe. Aber ist es sicher? (Ich denke, ich werde es auf einem VM versuchen: p)
Ablia
1
@Ablia Nein, es ist nicht sicher: Die Debian 9-Pakete werden für einen neueren Kernel und Bibliotheken erstellt und erfordern möglicherweise Einrichtungen, die nicht im Kernel und in den Bibliotheken von Debian 8 enthalten sind. Wenn Sie nach neueren Versionen von Paketen für Debian 8 suchen, können Sie die Backport- Repos ausprobieren .
cjs