Debian-Depot-HOWTO

Aaron Isotton

Claas Felix Beyersdorf

Zusammenfassung

Dieses Dokument soll Ihnen vermitteln, was ein Depot ist, und wie Sie selbst ein eigenes aufbauen können.


Inhaltsverzeichnis

Einleitung
Copyright und Lizenz
Feedback
Begriffe die in diesem Dokument verwendet werden
Wie Depots arbeiten
Wie Sie ein Depot aufbauen
Automatische Depots
Triviale Depots
Erstellen der Index-Dateien
Die »Release«-Datei erstellen
Pools erstellen
Werkzeuge
Ein Depot benutzen
Siehe auch

Einleitung

Ein Debian-Depot ist eine Zusammenstellung von Debian-Paketen die in einer speziellen Verzeichnisstruktur organisiert sind. Diese Verzeichnisstruktur enthält auch einige zusätzliche Dateien, welche Indizes und Prüfsummen der Pakete beinhalten. Wenn ein Benutzer ein Depot zu seiner /etc/apt/sources.list-Datei hinzufügt, kann er auf einfache Weise die verfügbaren Pakete anschauen und installieren, genau wie bei den Paketen, die mit Debian geliefert werden.

Ein Depot kann online und offline (z.B. auf einer CD-ROM) sein. Der erste Fall ist allerdings häufiger.

Dieses Dokument erklärt, wie Debian-Depots arbeiten, wie sie erstellt werden und wie Sie sie richtig zur sources.list hinzufügen.

Das Originaldokument können Sie unter http://www.isotton.com/debian/docs/repository-howto/ finden.

Copyright und Lizenz

Copyright 2002–2003 Aaron Isotton Kopieren, Verbreiten und/oder Modifizieren ist unter den Bedingungen der GNU Free Documentation License, Version 1.1 oder einer späteren Version, veröffentlicht von der Free Software Foundation, erlaubt. Es gibt keine unveränderlichen Abschnitte, keinen vorderen Umschlagtext und keinen hinteren Umschlagtext.

Feedback

Rückmeldungen zu diesem Dokument sind sehr willkommen. Bitte senden Sie Ihre Ergänzungen, Kommentare und Kritiken an folgende E-Mail-Adresse: (auf Englisch).

Feedback zur Übersetzung schicken Sie bitte an .

Begriffe die in diesem Dokument verwendet werden

Distributionen

Die drei Debian-Distributionen: »Stable«, »Testing« und »Unstable«.

Index-Dateien

Die »Packages.gz«- und »Sources.gz«-Datei.

Wie Depots arbeiten

Ein Depot besteht eigentlich nur aus einem Verzeichnis mit einigen »*.deb«-Paketen und zwei speziellen Dateien: Packages.gz für die Binär- und Sources.gz für die Quellpakete.

Wenn Ihr Depot in der sources.list-Datei (dazu später mehr) korrekt eingetragen wurde, wird apt-get den Packages.gz-Index herunterladen, wenn die Binärpakete (mit dem deb-Schlüsselwort) aufgelistet werden, und Sources.gz für die Quellpakete (mit dem deb-src-Schlüsselwort).

Packages.gz enthält den Namen, die Version, die Größe, die Kurz- und Langbeschreibung und die Abhängigkeiten eines jeden Paketes und einige zusätzliche Informationen, welche für uns nicht von Interesse sind. Alle diese Informationen werden von den Debian-Paket-Verwaltern wie dselect oder aptitude aufgelistet (und benutzt).

Sources.gz enthält den Namen, die Version und die »Bau-Abhängigkeiten« (die das Paket zum Bauen benötigt) von jedem Paket (und auch einige Informationen die wieder nicht von Interesse für uns sind); diese Informationen werden von apt-get source und vergleichbaren Werkzeugen verwendet.

Es gibt noch eine optionale Release-Datei, welche einige Informationen über Ihr Depot enthält; diese wird für das so genannte Pinning (anheften) benutzt, ein interessanter Trick auf den ich in diesem Dokument nicht näher eingehen möchte. Sie können mehr über Pinning im APT-HOWTO nachlesen.

Sobald Sie Ihr Depot aufgebaut haben, können Sie alle Ihre Pakete zusammen mit denen von Debian auflisten und installieren. Wenn Sie ein Paket im Depot aktualisieren, wird es beim Benutzer aktualisiert, wenn dieser das Kommando apt-get update && apt-get upgrade ausführt. Für jeden Benutzer ist es leicht, sich eine kurze Beschreibung und andere wichtige Informationen über Ihre Pakete anzeigen zu lassen.

Aber es gibt noch mehr. Wenn richtig erstellt, kann das Depot verschiedene Pakete für jede unterstützte Distribution und jede der (zur Zeit elf) unterstützten Architekturen bereitstellen. apt wird automatisch das für den Rechner des Benutzers richtige Paket holen, ohne ihn über die anderen Architekturen zu informieren. Zusätzlich ist es Ihnen erlaubt, Ihre Pakete Gruppen zuzuordnen, genau wie die Debian-Pakete in main, non-free und contrib unterteilt sind. Wenn Ihre Software plattformübergreifend ist, werden Sie Paket-Depots lieben.

Wie Sie ein Depot aufbauen

Es gibt zwei Arten von Depots: Komplexere, bei denen der Benutzer nur den Basispfad zum Depot, die Distribution und die Komponenten die er möchte, angeben muss (apt holt automatisch die für die richtige Architektur gedachten Pakete, sofern verfügbar). Und einfachere, bei denen der Benutzer einen exakten Pfad angeben muss (und apt braucht keine Magie um herauszufinden, welches das richtige Paket ist). Die ersten sind ein wenig schwerer aufzusetzen aber leichter zu benutzen und sollten immer für komplexe und/oder plattformübergreifende Depots benutzt werden. Die zweiten sind leichter aufzusetzen, aber sollten nur für kleine oder »Einzel-Architektur«-Depots benutzt werden.

Obwohl das nicht wirklich richtig ist, nenne ich die ersten automatische Depots und die zweiten triviale Depots.

Automatische Depots

Die Verzeichnisstruktur von einem automatischen Depot mit den Standard-Debian-Architekturen und Komponenten sieht wie folgt aus:

Beispiel 1. Ein Standard-Debian-Depot

(Ihr Depot-Verzeichnisbaum)
|
+-dists
  |
  |-stable
  | |-main
  | | |-binary-alpha
  | | |-binary-arm
  | | |-binary-...
  | | +-source
  | |-contrib
  | | |-binary-alpha
  | | |-binary-arm
  | | |-binary-...
  | | +-source
  | +-non-free
  |   |-binary-alpha
  |   |-binary-arm
  |   |-binary-...
  |   +-source
  |
  |-testing
  | |-main
  | | |-binary-alpha
  | | |-binary-arm
  | | |-binary-...
  | | +-source
  | |-contrib
  | | |-binary-alpha
  | | |-binary-arm
  | | |-binary-...
  | | +-source
  | +-non-free
  |   |-binary-alpha
  |   |-binary-arm
  |   |-binary-...
  |   +-source
  |
  +-unstable
    |-main
    | |-binary-alpha
    | |-binary-arm
    | |-binary-...
    | +-source
    |-contrib
    | |-binary-alpha
    | |-binary-arm
    | |-binary-...
    | +-source
    +-non-free
      |-binary-alpha
      |-binary-arm
      |-binary-...
      +-source

Die freien Pakete kommen in main; die nicht-freien in non-free und die freien, die von einem nicht-freien Paket abhängen, kommen in contrib. Debian unterstützt momentan 11 Architekturen; ich habe die meisten davon aufgrund der Länge ausgespart.

Jedes binary-*-Verzeichnis enthält eine Packages.gz und eine optionale Release-Datei. Jedes source-Verzeichnis enthält eine Sources.gz und eine optionale Release-Datei. Beachten Sie, dass die Pakete nicht im selben Verzeichnis wie die Index-Dateien liegen dürfen, weil die Index-Dateien die Pfade zu den verschiedenen Paketen enthalten; in Wirklichkeit können sie überall sonst im Depot liegen. Dies macht es möglich, Pools zu erstellen.

Sie können so viele Distributionen und Gruppen anlegen und benennen, wie Sie wollen. Die von mir im Beispiel benutzten sind lediglich die, die von Debian verwendet werden. Sie können zum Beispiel die Distribution current und beta (anstelle von stable, testing und unstable) und die Gruppen foo, bar, baz und qux (anstelle von main, contrib und non-free) verwenden.

Obwohl Sie die Möglichkeit haben die Gruppen zu benennen wie Sie wollen, ist es erstmal eine gute Idee, die Standard-Distributionen von Debian zu benutzen, weil diese den Debian-Benutzern bekannt sind.

Triviale Depots

Triviale Depots bestehen aus einem Hauptverzeichnis und so vielen Unterverzeichnissen wie Sie wollen. Da der Benutzer den Pfad zum Hauptverzeichnis des Depots und den relativen Pfad vom Hauptverzeichnis zum Verzeichnis mit den Index-Dateien angeben muss, können Sie machen was Sie wollen (sogar alles in das Hauptverzeichnis des Depots packen. In dem Fall ist der relative Pfad sehr leicht „/“).

Beispiel 2. Ein triviales Depot mit zwei Unterverzeichnisen

(Ihr Depot-Verzeichnisbaum)
|
|-binary
+-source

Erstellen der Index-Dateien

dpkg-scanpackages generiert die Packages-Datei und dpkg-scansources die Sources-Datei.

Beide schicken ihre Ausgabe an stdout. Dadurch können Sie, zum Erstellen einer komprimierten Datei, ein Kommando wie dieses verwenden: dpkg-scanpackages Argumente | gzip -9c > Packages.gz.

Die zwei Werkzeuge arbeiten auf die selbe Weise; beide erhalten zwei Argumente (in Wirklichkeit sind es mehr, aber ich möchte hier nicht näher darauf eingehen; Sie können gerne die Handbuchseiten lesen, wenn Sie mehr wissen wollen). Als erstes das Verzeichnis in dem die Pakete liegen und das zweite ist die Überschreibdatei (override). Für einfache Depots brauchen wir keine Überscheibdateien, aber da es ein benötigtes Argument ist, geben wir einfach /dev/null an.

dpkg-scanpackages durchsucht die .deb-Pakete; dpkg-scansources durchsucht die .dsc-Dateien. Folglich ist es nötig die .orig.gz-, .diff.gz- und .dsc-Dateien an die selbe Stelle zu legen. Die .changes-Dateien werden nicht gebraucht.

Falls Sie ein »triviales Depot« wie das aus Beispiel 2, „Ein triviales Depot mit zwei Unterverzeichnisen“ haben, können Sie die zwei Index-Dateien wie folgt generieren:

$ cd mein-Depot
$ dpkg-scanpackages binary /dev/null | gzip -9c > binary/Packages.gz
$ dpkg-scansources source /dev/null | gzip -9c > source/Sources.gz

Wenn Sie ein komplexes Depot wie bei Beispiel 1, „Ein Standard-Debian-Depot“ haben, müssen Sie ein paar Skripte schreiben, um diesen Prozess zu automatisieren.

Sie können auch das Verzeichnispräfix-Argument der zwei Werkzeuge benutzen, um die Syntax ein wenig zu vereinfachen. Ich überlasse dies als Übung dem Leser. (Es ist in den Handbuchseiten dokumentiert).

Die »Release«-Datei erstellen

Wenn Sie dem Benutzer Ihres Depots erlauben wollen Pinning (Anheften) mit Ihrem Depot zu nutzen, müssen Sie eine Release-Datei in jedem Verzeichnis mit Index-Dateien hinzufügen. (Sie können mehr über Anheften im APT-HOWTO) erfahren.

Die Release-Dateien sind einfache und kurze Textdateien der folgenden Form:

Archive: Archiv
Component: Gruppe
Origin: Ihre Firma
Label: Debian-Depot Ihrer Firma
Architecture: Architektur
Archive

Der Name der Distribution von Debian zu der die Pakete in diesem Verzeichnis gehören (oder entwickelt wurden), z.B. stable, testing oder unstable.

Component

Die Gruppe der Pakete in diesem Verzeichnis, zum Beispiel main, non-free oder contrib.

Origin

Der Name des Paketautors.

Label

Ein angemessenes Kennzeichen für das Paket oder für Ihr Depot. Benutzen Sie Ihre Fantasie.

Architecture

Die Architektur der Pakete in diesem Verzeichnis, wie i386, sparc oder source.

Es ist wichtig Archive und Architecture korrekt anzugeben, da sie am meisten zum Anheften verwendet werden. Die anderen sind dagegen weniger wichtig.

Pools erstellen

Bei automatischen Depots wird das Veröffentlichen der Pakete in den verschiedenen Verzeichnissen schnell zu einer unmöglichen Aufgabe. Es ist außerdem eine große Verschwendung von Platz und Bandbreite, da es Pakete gibt (zum Beispiel Dokumentationspakete), welche für jede Architektur gleich sind.

In diesem Fall ist ein Pool eine mögliche Lösung. Ein Pool ist ein zusätzliches Verzeichnis im Hauptverzeichnis eines Depots, welches alle Pakete (die binären für alle Architekturen, Distributionen und Gruppen und alle Quellen) enthält. Durch eine Kombination von Überschreibdateien (welche nicht in diesem Dokument behandelt werden) und Skripten können viele Probleme vermieden werden. Ein schönes Beispiel für ein Pool-Depot ist das Debian-Depot selbst.

Pools sind nur für große Depots sinnvoll. Ich habe nie welche erstellt und werde wohl auch in naher Zukunft keine erstellen müssen, deshalb werde ich hier nicht beschreiben, wie Sie diese erstellen können. Wenn Sie meinen, dass ein Kapitel dazu ergänzt werden sollte, fühlen Sie sich frei eines zu verfassen und mich zu kontaktieren.

Werkzeuge

Es gibt verschiedene Werkzeuge, um die Erstellung eines Debian-Archivs zu automatisieren und vereinfachen. Ich habe die bekanntesten Werkzeuge hier aufgezählt.

apt-ftparchive wird benutzt, um eine Kollektion von Debian-Paketdateien in eine geeignete Archivhierarchie, wie die vom offiziellen Debian-Archiv, einzugliedern. Es ist ein Teil des apt-utils-Paketes.

apt-move wird benutzt um eine Kollektion von Debian-Paketdateien in eine geeignete Archivhierarchie, wie sie vom offiziellen Debian-Archiv verwendet wird, zu verschieben.

Ein Depot benutzen

Ein Depot zu benutzen ist sehr einfach, hängt aber davon ab, was für eine Art von Depot Sie erstellt haben: Binär- oder Quellpaket, automatisch oder trivial.

Jedes Depot bekommt eine Zeile in der sources.list; für ein binäres benutzen Sie das deb-Schlüsselwort und für ein Quellpaket benutzen Sie das deb-src-Schlüsselwort.

Jede Zeile gehorcht der folgenden Syntax:

deb|deb-src uri Distribution [Gruppe1] [Gruppe2] [...]

Die uri ist die URI des Hauptverzeichnisses des Depots, so wie beispielsweise ftp://ftp.IhrServer.de/debian, http://IhrServer.de/debian oder – für lokale Dateien – file::///home/joe/mein-debian-depot. Der folgende Schrägstrich ist optional.

Für automatische Depots müssen Sie eine Distribution und mindestens eine Gruppe angeben. Die Distribution darf nicht mit einem Schrägstrich enden.

Beispiel 3. Zwei automatische Depots aus meiner sources.list

deb ftp://sunsite.cnlab-switch.ch/mirror/debian/ unstable main contrib non-free
deb-src ftp://sunsite.cnlab-switch.ch/mirror/debian/ unstable main contrib non-free

Diese zwei Zeilen definieren ein automatisches Binär- und Quell-Depot mit Hauptverzeichnis ftp://sunsite.cnlab-switch.ch/mirror/debian/, der Distribution unstable und den Gruppen main, contrib und non-free.

Wenn das Depot nicht automatisch ist, definiert distribution den relativen Pfad zu den Index-Dateien und muss mit einem Schrägstrich enden, außerdem darf keine Gruppe angegeben werden.

Beispiel 4. Zwei triviale Depots aus meiner sources.list

deb file:///home/aisotton/rep-exact binary/
deb-src file:///home/aisotton/rep-exact source/

Die erste der zwei Zeilen legt ein Binär-Depot unter /home/aisotton/rep-exact/binary auf meinem lokalen Rechner fest; die zweite legt ein Quell-Depot unter /home/aisotton/rep-exact/source fest.

Siehe auch

  • Die apt-ftparchive-Dokumentation.

  • Die apt-get-Dokumentation und die Dokumentation für apt.

  • Die apt-move-Dokumentation.

  • http://www.apt-get.org/ für viele Beispiele von echten Depots.

  • Das APT-HOWTO.

  • Die dpkg-scanpackages-Dokumentation.

  • Die dpkg-scansources-Dokumentation.

  • Die sources.list(5)-Handbuchseiten.