Eigenes Apt-Repository mit Reprepro

© binkski, 123RF

Umschlagplatz

Um eigene Software-Pakete geregelt auf Debian- und Ubuntu-Rechner zu verteilen, bietet sich ein eigenes Repository an. Mit dem Reprepo-Tool ist das leicht gemacht.
Mit Hardware-Beschleunigung und schnellem Netz hilft Desktop-Virtualisierung, Administrationsaufwand und Kosten sparen, ADMIN 04/2013 verrät, wie die ... (mehr)

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« .

Das Repo füllt sich

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:

Abbildung 1: Der Befehl createsymlinks erzeugt die Basisstruktur des Repository.
$ 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

Ein Zugang wird geöffnet

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

 

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2020