Die scheinbar einfache und praktische Verteilung selbstentwickelter Software kann sich aufwändig und komplex gestalten. Unter Debian und Ubuntu erleichtert der Weg über Pakete in einem Repository die Installation und Aktualisierung für den User. Beim Aufbau und der Verwaltung eines Repository unterstützt das Werkzeug »reprepro
«
den Administrator [1]. Mit ihm können unkompliziert ein Repository angelegt und Pakete eingespielt werden. Ein Webserver verteilt diese per HTTP-Protokoll an die User. Die Authentizität der Pakete – eine Bestätigung der Herkunft – wird über GPG-Signaturen sichergestellt.
Ein Ubuntu-Server kann mit wenigen Schritten in ein Repository verwandelt werden. Alle benötigten Software-Teile befinden sich in den offiziellen Ubuntu-Repositories, Fremd-Software wird nicht benötigt. Ein einfaches
sudo apt-get install reprepro
genügt unter Ubuntu 12.04 LTS für die Installation. Danach befinden sich nützliche Informationen im Standardpfad der Dokumentation zum Reprepro-Paket; unter »/usr/share/doc/reprepro/short-howto.gz
«
etwa eine kurze Konfigurationseinführung. Das folgende Beispiel verwendet einen eigenen Benutzer »repository
«
für die Konfiguration. Der Ordner »conf
«
dient als zentraler Ort für die Konfigurationsdateien. Die wichtigste Datei »distributions
«
legt fest, für welche Distribution, Architektur und so weiter das Repository verwendet wird (siehe Listing 1). Mehrere Parameter legen in dieser Datei das Repo-Layout fest [2][3]:
Listing 1
distributions
Origin
«
: Ein optionales Feld, das die Herkunft des Repository beschreibt. Es kann eine freie Zeile Text gewählt werden.Label
«
: Optionaler, frei wählbarer Text, der als Kennzeichnung für das Repo dient.Codename
«
: Der Name der Distribution, für die die Pakete bereitgestellt werden. Für Ubuntu zum Beispiel »precise
«
oder »quantal
«
, für Debian »squeeze
«
oder »wheezy
«
. Dieser Parameter ist verpflichtend und dient als Ordnername im »dists/
«
-Baum.Suite
«
: Mittels Kennzeichnern wie »stable
«
oder »testing
«
wird über symbolische Links ein Alternativpfad zu den Codenamen erstellt.Architectures
«
: Ein verpflichtender Parameter, der die im Repo enthaltenen Architekturen festlegt. Die Option »source
«
zeigt im Listing 1, dass sich auch Quellcode-Pakete im Repo befinden.Components
«
: Hier werden die Komponenten der Distribution aufgelistet, zum Beispiel »main
«
oder »optional
«
. Komponenten realisieren eine Aufteilung von Paketen in unterschiedliche Sparten. Über die jeweilige Apt-Zeile kann ein User dann auch nur einen bestimmten Teil einbinden.SignWith
«
: Dieser Parameter ist wesentlich für die Erstellung der GPG-Signaturen. Er gibt die ID des GPG-Schlüssels an, mit dem die Signaturen in der Datei »InRelease
«
beziehungsweise für die Datei »Release
«
in »Release.gpg
«
erstellt werden [4]. Listing 1 zeigt einen weiteren wichtigen Konfigurationsschritt für das GPG-Setup. In der Datei »options
«
sorgt der Parameter »ask-passphrase
«
dafür, dass nach dem Passwort des privaten Schlüssels gefragt wird. Eine weitere Möglichkeit wäre der »gpg-agent
«
.Die initiale Verzeichnisstruktur des Repos lässt sich über das Kommando »createsymlinks
«
erzeugen. Abbildung 1 zeigt mit dem Befehl »tree
«
, welche Ordner in diesem Schritt angelegt werden. Die wesentliche Konfiguration ist damit auch bereits abgeschlossen, die weiteren Schritte beziehen sich auf das Hinzufügen und Entfernen von Paketen. Für ein einfacheres Arbeiten mit dem Repo empfiehlt es sich, die Umgebungsvariable »REPREPRO_BASE_DIR
«
auf das Repo-Verzeichnis zu setzen:
$ echo $REPREPRO_BASE_DIR /home/repository/packages
Die folgenden beiden Schritte binden nun ein neues Ubuntu-Paket ins Repo ein:
reprepro --verbose includedeb precise tkmon_1.2.1~rc2-1_all.deb reprepro --verbose includedsc precise tkmon_1.2.1~rc2-1.dsc
Bei der Durchführung dieser Befehle muss das Passwort des geheimen GPG-Schlüssels jeweils doppelt eingegeben werden. Jedes Mal für die Dateien »Release.gpg
«
und »InRelease
«
. Das Ergebnis beziehungsweise die Kontrolle, ob das Paket im Repo gelandet ist, liefert Listing 2. Entfernen lässt sich das Paket ebenso einfach:
Listing 2
reprepro list
reprepro remove precise tkmon
Für die Verbreitung des Repos über einen Webserver stehen mehrere Möglichkeiten zur Verfügung. Für alle Varianten gilt, dass die internen Konfigurationsordner »conf
«
und »db
«
vor unerlaubten Zugriffen geschützt werden müssen. Das hier beschriebene Setup verwendet das Apache-Modul »mod userdir
«
für eine Veröffentlichung im Home-Verzeichnis des bereits genannten Users »repository
«
.
Dazu wird das Modul »userdir
«
aktiviert, der Ordner »public_html
«
erstellt und darin ein symbolischer Link auf »packages
«
angelegt. Abschließend werden die Dateirechte aufgrund der oben genannten Sicherheitsthematik angepasst, siehe Listing 3.
Listing 3
Veröffentlichung