Kapitel 6. Debian-Pakete im Detail
Zurück | 6.8 Debian-Repositories | Weiter

## 6.8 Debian-Repositories

Ein Debian-Repository ist eine Sammlung von Debian-Paketen, die durch einige zusätzliche Dateien so organisiert sind, dass aus diesem Verzeichnisbaum heraus Pakete installiert werden können. Dies wird durch einige (wenige) zusätzliche Dateien ermöglicht. Dies sind im Wesentlichen Index-Dateien und Dateien mit Checksummen zu den Paketen. Fügt ein Anwender ein Repository seiner Datei `/etc/apt/sources.list` hinzu, so können alle darin enthaltenen Dateien mit den verfügbaren Werkzeugen leicht eingesehen oder installiert werden.

Repositories können sowohl online, auf einem FTP- oder HTTP-Server, als auch offline, beispielsweise auf CD-ROM, abgelegt werden und bestehen mindestens aus einem Verzeichnis mit Debian-Paketen sowie einer Datei `Packages.gz` (bei einem Binär-Repository) oder`Sources.gz` (bei einem Quellcode-Repository).

In der Datei `Packages.gz` sind zu jedem Paket Informationen über den Paketnamen, die Version, die Größe sowie eine Kurz- und Langbeschreibung, die Abhängigkeiten zu anderen Paketen und einige andere Informationen abgelegt. Diese Informationen können mit den Programmen zur Installation (wie beispielsweise `dselect`, oder auch `aptitude`) angezeigt werden.

In der Datei `Sources.gz` finden Sie Informationen über den Namen, die Version und die Abhängigkeiten zum Übersetzen des Quellcodes („build dependencies“) zu jedem Paket. Diese Informationen werden von `apt-source` und anderen Programmen genutzt.

Die Datei `Release`, die nicht zwingend vorhanden sein muss, enthält einige Informationen über das Repository, die für das „Pinning“ (siehe „APT Pinning“ ) von Paketen benötigt werden. Das Erzeugen einer `Release`-Datei ist in „Verwaltung des Spiegels“ und „Erzeugen von Release Dateien“ beschrieben.

Neben dieser vereinfachten Form von Repositories besteht auch die Möglichkeit, Repositories für unterschiedliche Hardware-Architekturen anzulegen. APT wird dann automatisch die für die verwendete Architektur passenden Pakete finden und installieren. Weiterhin können Pakete zu Gruppen zusammengefasst werden, beispielsweise `main`, `contrib` und `non-free`.

Aus Benutzer- und Adminstratorsicht gibt es zwei Arten von Repositories. Einfach zu benutzende Repositories sind für den Administrator recht aufwendig einzurichten. Repositories mit einer einfachen Struktur sind dagegen für den Benutzer schwieriger zu handhaben. Für Repositories, die Pakete für verschiedene Architekturen bereitstellen sollen, sind die komplexen Repositories vorzuziehen. Diese sind für den Benutzer einfacher zu handhaben, erfordern aber vom Administrator einen erhöhten Aufwand.

### 6.8.1 Komplexe Repositories

Die Verzeichnisstruktur eines komplexen (oder auch„automatischen“) Repositorys stellt sich für die verschiedenen Debian-Architekturen und Bereiche wie folgt dar:

    (Wurzelverzeichnis des Repositories)
    |
    +-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

Pakete, die einer freien Lizenz unterliegen (siehe Debian Free Software Guidelines) finden sich im Bereich „main“. Nicht-freie Software befindet sich in „non-free“, und in „contrib“ finden sich freie Pakete, die aber auf nicht-freien Paketen basieren. Debian unterstützt eine Anzahl weiterer Hardware-Architekturen, die in diesem Beispiel nicht alle aufgeführt sind.

In jedem `binary-...`-Verzeichnis befindet sich eine Index-Datei `Packages.gz` sowie eine optionale Datei `Release`. Die Pakete müssen nicht im Verzeichnis der Index-Datei liegen, da die Pfade zu den Paketen in der Index-Datei stehen. Dies ermöglicht es, sogenannte„Package-Pools“ zu erzeugen.

Es können beliebig viele Architekturen und Bereiche mit beliebigen Namen angelegt werden.

### 6.8.2 Einfache Repositories

Einfache Repositories bestehen aus einem Wurzelverzeichnis und beliebig vielen Unterverzeichnissen. Da die Benutzer sowohl das Wurzelverzeichnis als auch den relativen Pfad zu den Unterverzeichnissen angeben müssen, kann hier eine beliebige Struktur angelegt werden. So können auch alle Dateien (Index-Dateien und Pakete) im Wurzelverzeichnis liegen. Hier sehen Sie ein einfaches Repository mit zwei Unterverzeichnissen:

    (Wurzelverzeichnis des Repositorys)
    |
    |-binary
    +-source

### 6.8.3 Erzeugen von Index-Dateien

Das Erzeugen der Index-Dateien für Binärpakete übernimmt das Programm`dpkg-scanpackages` (siehe dpkg-scanpackages ) bzw. `dpkg-scansources` (siehe dpkg-scansources für die Quellcodepakete. Beide Programme erzeugen die Ausgabe auf der Standard-Ausgabe, so dass dieses Ergebnis in eine Datei umgeleitet werden muss. Um die entstehenden Dateien zu komprimieren, kann im gleichen Arbeitsschritt noch das Programm `gzip` verwendet werden. Für ein einfaches Repository können die Index-Dateien für die Binär- und Quellcode-Pakete wie folgt erstellt werden:

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

Eine detaillierte Anleitung zu den beiden Programmen findet sich in den oben beschriebenen Abschnitten, dort wird auch auf die notwendigen Argumente eingegangen.

### Debian Pakete auf Webseiten verfügbar machen

Mit einem kleinen PHP-Skript (zu finden unter http://elonen.iki.fi/code/parse-apt-files.inc) ist es sehr einfach möglich die Dateien `Packages.gz`, bzw. `Sources.gz` zu durchsuchen und die Informationen zu den Paketen automatisch aufzubereiten. Alle gefundenen Pakete werden auf einer Webseite mit einem Link zum Download angeboten. Darüber hinaus wird zu jedem Paket die Beschreibung angezeigt.

Die Einbindung in die eigene Webseite erfolgt über die beiden Zeilen

    include_once("parse-apt-files.inc");
    parse_and_list( "Packages.gz", "Sources.gz" );

Werden auf der Seite Pakete für unterschiedliche Hardware-Architekturen zur Verfügung gestellt, so erfolgt die Einbindung in die Webseite wie folgt

    include_once("parse-apt-files.inc");
    parse_and_list( Array("i386/Packages.gz", "powerpc/Packages.gz"), "Sources.gz" );

### 6.8.4 Erzeugen von Release-Dateien

Um das „Pinning“ von Paketen zu ermöglichen (siehe Pinning ) muss eine`Release`-Datei in jedem Verzeichnis, in dem sich eine Index-Datei befindet, zur Verfügung gestellt werden. `Release`-Dateien sind einfach Text-Dateien mit folgendem Aufbau:

    Archive: archive
    Component: component
    Origin: YourCompany
    Label: YourCompany Debian repository
    Architecture: architecture

Zum Erzeugen dieser Dateien kann auch das in „Verwaltung des Spiegels“ beschriebene Skript verwendet werden.

Einträge in der `Release-Datei`

`Archive`

  Der Name der Distribution, für die die Pakete vorgesehen sind, beispielsweise „stable“, „testing“ oder auch „unstable“.

`Component`

  Der Bereich, dem die Pakete zugeordnet sind. Dies kann „main“, „non-free“ oder „contrib“ sein.

`Origin`

  Der Name der Person, die dieses Repository erzeugt hat.

`Label`

  Eine beliebige Beschreibung für dieses Repository.

`Architecture`

  Hardware-Architektur, für die die Pakete erzeugt wurden, beispielsweise „i386“, „powerpc“, „alpha“ oder auch „sparc“.

Insbesondere müssen Sie darauf achten, dass die Angaben zu `Archive` und `Architecture` korrekt sind, da diese am häufigsten für das Pinning von Paketen eingesetzt werden. Alle anderen Angaben sind eher unwichtig.

### 6.8.5 Paket-Pools

Bei komplexen Repositories führt die umfangreiche Verzeichnisstruktur schnell zur Unübersichtlichkeit und auch zur Verschwendung von Plattenplatz, da viele Pakete (beispielsweise Dokumentation) für unterschiedliche Architekturen geeignet sind. Diese Pakete müssen nicht mehrfach im Repository vorgehalten werden.

Die Lösung dieses Problems sind so genannte „Package Pools“. Ein Pool ist ein gesondertes Verzeichnis unterhalb des Wurzelverzeichnisses des Repositorys, in dem alle Pakete (Binaries für alle Architekturen, für alle Distributionen und Bereiche sowie die Quellcode-Pakete) abgelegt werden. Durch die Verwendung von „override-files“ und einige Skripte können die oben genannten Probleme umgangen werden. Ein gutes Beispiel für die Verwendung eines solchen Pools ist sicherlich das Debian-Repository selbst.

Um die notwendigen Index-Dateien für ein solches Repository zu erzeugen, sollten Sie den Abschnitt zu `apt-ftparchive` aus dem Paket `apt-utils` zu Rate ziehen. Für einfache Repositories ist `apt-move` eine gute Hilfe.

Zurück | Nach oben | Weiter
6.7 `mini-dinstall` | Zum Anfang | 6.9 Upload von Paketen

© 1999-2006 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - Keine Bearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/legalcode).