Claas Felix Beyersdorf
Zusammenfassung
Dieses Dokument soll Ihnen vermitteln, was ein Depot ist, und wie Sie selbst ein eigenes aufbauen können.
Inhaltsverzeichnis
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 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.
Rückmeldungen zu diesem Dokument sind sehr willkommen. Bitte senden Sie
Ihre Ergänzungen, Kommentare und Kritiken an folgende E-Mail-Adresse:
<[email protected]>
(auf Englisch).
Feedback zur Übersetzung schicken Sie bitte an
<[email protected]>
.
Die drei Debian-Distributionen: »Stable«, »Testing« und »Unstable«.
Die »Packages.gz
«- und
»Sources.gz
«-Datei.
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.
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.
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 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
„/
“).
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).
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.
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.
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 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-srcuri
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.
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.