Login
Newsletter
Werbung

Do, 28. Oktober 2010, 15:00

Apt-Repositorium erstellen (Variante 1: apt-ftparchive)

Für die Erstellung eines eigenen Apt-Repositoriums gibt es mehrere Möglichkeiten. Ich werde zwei davon vorstellen, in diesem Artikel die Methode mit »apt-ftparchive« aus dem Paket »apt-utils«, im nächsten »reprepro«.

Voraussetzungen

Prinzipiell ist reprepro näher am Debian-Standard, dafür hat man mit apt-ftparchive mehr Freiheiten bei der Konfiguration des Repos (insbesondere Verzeichnisstruktur u.ä.).

Der Artikel setzt voraus, dass es bereits mindestens ein fertiges Paket gibt, falls nicht, sollte man das natürlich zuerst nachholen. Weiterführende Informationen hierzu gibt es im Howto zur Debian-Paketerstellung.

Bevor wir jedoch mit der Erstellung des Pakets starten, erstellen wir zunächst einen passenden Schlüssel zum Signieren der Pakete und des Repositoriums, sofern noch keiner vorhanden ist. Idealerweise trägt der Schlüssel den Namen des Autors sowie dessen Mail-Addresse (sprich den Inhalt der Autor-Zeile aus debian/changelog), damit können Pakete ohne zusätzliche Angabe eines Schlüssels signiert werden. Ein kleines Video zeigt die Erstellung des Schlüssels mittels Seahorse. Im Video wird auch gezeigt, wie man mithilfe von Seahorse den öffentlichen Teil des Schlüssels exportiert.

Um den Schlüssel manuell zu erstellen, gehen wir wie folgt vor:

gpg --genkey

Als Schlüsseltyp wählen wir RSA, als Schlüssellänge mindestens 2048. Der Rest ist selbsterklärend. Wenn man an den Punkt kommt, an dem gpg meldet, dass »zu wenig Zufallswerte« vorhanden sind, einfach wild in die Tasten hauen, bis gpg genügend Entropie gesammelt hat.

Um den Schlüssel manuell zu exportieren, lassen wir uns als erstes alle Schlüssel anzeigen:

gpg --list-keys

Im Beispiel sieht unser Schlüssel wie folgt aus:

pub   2048R/5E154E9C 2010-09-05
uid          Max Mustermann (Test) <max_mustermann@musterstadt.de>
sub   2048R/50F25894 2010-09-05

Wir können ihn nun mithilfe der Schlüsselkennung 5E154E9C exportieren:

gpg --armor --output apt-key.asc --export 5E154E9C

Die Datei apt-key.asc ist dann der öffentliche Schlüssel, den die Benutzer via apt-key add apt-key.asc importieren, um das Repo zu verifizieren.

Erstellen der Strukturen

Nun geht es ans Eingemachte. Falls man einen eigenen Server hat, so sollte man das Repositorium (im folgenden Repo genannt) im htdocs-Verzeichnis erstellen, bspw. /var/www/apt (wobei /var/www die Webseite enthält), die Pakete erscheinen dann direkt auf dem Server. Ansonsten ist es egal, wohin die lokale Kopie kommt. Für Hosting-Pakete mit SSH-Zugriff empfiehlt sich ein Tool wie z.B. dupload, für Hosting-Pakete ohne Remote-Zugriff empfiehlt sich dupload nicht, da die Pakete ins Verzeichnis incoming wandern, so dass man in einem solchen Fall besser gleich zu einem FTP-Programm (bspw. ncftp) greift.

Als erstes sollte wir uns Gedanken über die Ordnerstruktur machen. Im Gegensatz zu reprepro setzt apt-ftparchive der Phantasie keine Grenzen. Im Beispiel verwenden wir folgende Struktur:

apt/ (im folgenden ROOT genannt)
	conf/
	dists/
		[DIST]/
			[SECTION]/
				binary-[BINARY-ARCH]/
				source
	pool/
		[DIST]-main-[BINARY-ARCH]/
		[DIST]-main-source/

Hierbei bezeichnet DIST den Namen der Distribution. Im Beispiel verwenden wir photonic. BINARY-ARCH ist unsere Binär-Architektur, beispielsweise i386 oder amd64. SECTION stellt die üblichen Sektionen main, non-free oder contrib dar, wobei auch etwas anderes verwendet werden kann.

Nachdem wir die Struktur erstellt haben, widmen wir uns der Konfiguration des Repos. Die Konfigurationsdatei nennen wir apt-ftparchive.conf im Verzeichnis ROOT/conf.

Als erstes sagen wir apt-ftparchive, dass sich ROOT und das Cache-Verzeichnis in . (also dem relativ gesehen aktuellen Verzeichnis) befinden:

Dir {
  ArchiveDir ".";
  CacheDir ".";
};

Apt erwartet neben den blanken Dateien Packages, Sources und Content auch (je nach Version) mit GNU Zip und Bzip2 komprimierte. Mit folgendem Block weisen wir apt-ftparchive an, diese zu erstellen:

Default {
   Packages::Compress ". gzip bzip2";
   Sources::Compress ". gzip bzip2";
   Contents::Compress ". gzip bzip2";
};

Als nächstes teilen wir apt-ftparchive die gewünschte Verzeichnisstruktur mit:

TreeDefault {
   BinCacheDB "pool/photonic-$(SECTION)-$(ARCH)/cachedb.db";
   
   Directory "pool/photonic-$(SECTION)-$(ARCH)";
   Packages "$(DIST)/$(SECTION)/binary-$(ARCH)/Packages";
   
   SrcDirectory "pool/photonic-source/";
   Sources "$(DIST)/$(SECTION)/source/Sources";
   
   Contents "$(DIST)/Contents-$(ARCH)";
};

Diese Einträge erklären sich wie folgt:

BinCacheDB:
Die Cache-Datenbank. Im Beispiel ROOT/pool/photonic-main-i386/cachedb.db. CacheDBs gibt es nur für Binärpakete, für die Quellen nicht.
Directory:
Das Verzeichnis für Binärpakete. Im Beispiel ROOT/pool/photonic-main-i386/
Packages:
Die Position der Packages{,.bz2,.gz}-Dateien. Im Beispiel ROOT/dists/photonic/main-i386/Packages{,.bz2,.gz}
SrcDirectory:
Das Verzeichnis für Quellpakete. Im Beispiel ROOT/pool/photonic-source/
Sources:
Die Position der Sources{,.bz2,.gz}-Dateien. Im Beispiel ROOT/dists/photonic/Sources{,.bz2,.gz}
Contents:
Die Position der Contents{,.bz2,.gz}-Dateien. Im Beispiel ROOT/dists/photonic/Contents-i386{,.bz2,gz}

Als letztes geben wir an, welche Sektionen und Architekturen unterstützt werden:

Tree "dists/photonic/" {
  Sections "main";

  Architectures "i386 source";
};

Dieser Abschnitt sollte selbsterklärend sein.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung