Apt-Repositorium erstellen (Variante 2: reprepro)
Für die Erstellung eines eigenen Apt-Repositoriums gibt es mehrere Möglichkeiten. In diesem Artikel geht es um die zweite Methode mit »reprepro«.
Im zweiten Teil widmen wir uns reprepro. Zwar ist apt-ftparchive, was die Verzeichnisstruktur und Flexibilität anbelangt, reprepro vorzuziehen, jedoch sind Repositorien (Repos) auf Basis von reprepro einfacher zu handhaben, so dass sich auch Einsteiger schnell zurecht finden dürften.
Die vorherige Lektüre des ersten Teils ist empfehlenswert, da der zweite Teil Bezug darauf nimmt und voraussetzt, dass ein GPG-Schlüssel sowie ein Paket vorhanden sind.
Unter Debian und diversen Derivaten lässt sich reprepro ganz einfach via apt-get install reprepro
installieren. reprepro generiert Repos mit standardkonformer Verzeichnisstruktur, so dass wir - anders als bei apt-ftparchive - nicht weiter Hand anlegen müssen.
Konfigurationsdateien anlegen
Die Hauptkonfigurationsdatei liegt als conf/distributions im Wurzelverzeichnis des Repos. Im Beispiel verwenden wir /var/www/apt.
Codename: stardust Suite: unstable Architectures: i386 source Components: main SignWith: yes DebIndices: Packages Release . .gz .bz2 DscIndices: Sources Release . .gz .bz2
Im Vergleich zu apt-ftparchive ist das Feld SignWith
neu. Dieses Feld gibt an, das wir die »Release«-Datei signieren möchten, was wir in jedem Fall tun. Sollte statt dem Standardschlüssel ein anderer zum Signieren verwendet werden, so ersetzen wir yes
durch den Namen des Schlüssels.
Führt man in seinem Repo auch Debian-Installer-Pakete, so fügt man die UDeb-Eintrage analog zu denen der Standardpakete ein:
UDebComponents: main UdebIndices: Packages Release. .gz .bz2
Zudem gibt es eine Reihe optionaler Felder. »Version«, »Description«, »Origin« und »Label« sind hierbei rein informativ. Im ersten Artikel haben wir ein Repo mit den Codenamen photonic und der Suite photonic
erstellt, dahingegen erstellen wir in diesem ein Repo mit dem Codenamen stardust und der Suite unstable
. Möchte man nun die Pakete aus photonic auch in stardust einbinden, muss man nicht das Paket mit der geänderten Distribution neu paketieren, sondern behilft sich mit dem Feld »AlsoAcceptFor«.
Version: 2010 Origin: ProLinux Label: ProLinux AlsoAcceptFor: photonic
Zudem gibt es die Möglichkeit, »Contents«-Dateien erstellen zu lassen, welche in menschenlesbarer Form den Inhalt des Repos wiedergeben, oder sich mit »apt-file« durchsuchen lassen:
Contents: . .gz .bz2 ContentsArchitectures: i386 ContentsComponents: main
Im Beispiel werden die »Contents«-Dateien nur für Standardpakete erstellt, Debian-Installer-Pakete werden dezent ignoriert. Zudem lassen sich die Komponenten bzw. Architekturen, welche in die »Contents«-Dateien einfließen sollen, einstellen.
Es gibt noch eine Reihe weniger gebräuchlicher Felder, welche man in der Hilfeseite von reprepro findet.
Normalerweise würde »apt-get update« jedesmal die vollständigen Indizes aus dem Repo herunterladen. Um nur die zwischenzeitlichen Änderungen zu holen, gibt es die Möglichkeit, »pdiff«-Dateien zu erstellen (deren Mehrwert nicht garantiert ist). reprepro in der Version 4.1 oder neuer bringt hierzu bereits das passende Hook-Skript mit, sodass man die Felder »DebIndices« und »DscIndices« wie folgt erweitert:
DebIndices: Packages Release . .gz .bz2 /usr/bin/rredtool DscIndices: Sources Release . .gz .bz2 /usr/bin/rredtool
Unsere Datei conf/distributions ist soweit vollständig. Möchte man eine weitere Distribution hinzufügen, so lässt man einfach eine Leerzeile und beginnt einen neuen Block.
Bevor wir nun das erste Paket hinzufügen, erstellen wir noch die Datei conf/options. Falls der Schlüssel ein Passwort verlangt, muss hier ask-passphrase
eingetragen werden, das reprepro sonst nicht nach dem Passwort fragt. Ansonsten können alle Kommandozeilenparameter von reprepro hier eingetragen werden, allerdings nur die langen Formen, ohne Präfix (also z.B. verbose
statt -v
oder --verbose
).