Ubuntu 16.04 Xenial Xerus
Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
Neben der Nutzung der offiziellen Paketquellen oder von anderen Quellen wie z.B. ein PPA und weiteren Fremdquellen gibt es auch die Möglichkeit, eine eigene Paketquelle lokal anzulegen. Dies kann zum Beispiel dann sinnvoll sein, wenn man regelmäßig Pakete bzw. Paketzusammenstellungen braucht, die in dieser Form in keiner anderen Quelle vorhanden sind oder die man selbst als Paket erstellt hat.
Mit reprepro können einfach eigene Paketquellen erstellt und verwaltet werden. Dieser Artikel beschreibt die Installation und Konfiguration solch einer Paketquelle und die eventuelle Anpassung eines Apache-Servers.
Falls man nur eine einfache unsignierte Paketquelle benötigt, dann lohnt sich in diesem Fall ein Blick auf den Artikel Eigene Paketquelle anlegen.
Reprepro kann direkt aus den offiziellen Paketquellen installiert werden [1]:
reprepro (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install reprepro
sudo aptitude install reprepro
Bevor man beginnt, sollte man sich noch einen GnuPG Schlüssel erzeugen [2] (falls man sich noch keinen erstellt hat). Dieser wird benötigt, um die Pakete und die Paketquelle zu signieren.
Als erstes wählt man ein Verzeichnis aus, in welches man die Paketquelle einrichten will. Falls man die Quelle nur für sich selbst einrichten will, genügt es einen Ordner im Homeverzeichnis einzurichten. Möchte man die Quelle hingegen im Netzwerk oder Internet freigeben, würde sich ein Ordner unter /var/www/html/ (ab Ubuntu 14.04) oder /var/www/ (bei 12.04) anbieten, wobei man dann aber die Zugriffsrechte für diesen Order beachten muss.
Wenn man sich für einen Ordner entschieden hat, dann erstellt man in diesem einen Unterordner ./ubuntu/conf/. Falls man eine Paketquelle für Debian erstellen will, dann heißt der Ordner entsprechend ./debian/conf/.
Im Verzeichnis conf werden nun drei Dateien abgespeichert. Als erstes erstellt man die Datei distributions mit einem Editor eigener Wahl. Diese Datei legt fest, für welche Distribution, Architektur etc. die Paketquelle verwendet werden soll. Folgendermaßen muss die Datei aufgebaut sein. Beispiel:
Origin: Projektname Label: Projektname Suite: stable Codename: UBUNTU-RELEASE Architectures: i386 amd64 Components: main Description: Apt repository for Projektname DebOverride: override.UBUNTU-RELEASE DscOverride: override.UBUNTU-RELEASE SignWith: KEY-ID
Übersicht über die Datei "distribution" | ||
Wert | Beschreibung | Standardwerte |
Origin | Der Projektname des Archives. | (Projektname) |
Label | Der Projektname des Archives. | (Projektname) |
Suite | (optional) - Gibt bei Paketen, die für Debian erstellt werden an, für welchen Debian Bereich dieses Paket gebaut wird. Für Ubuntu-Pakete nicht notwendig. | stable, testing, unstable, oldstable |
Codename | Gibt den eindeutigen Identifier der Distribution an. | precise; trusty |
Architectures | Gibt die die Ziel-Architektur des Systems an. | i386; amd64; source |
Components | Gibt die die Komponenten der Distribution an. | main; universe; non-free; contrib |
Description | Eine Beschreibung über das Archiv. | (Beschreibung) |
DebOverride | (optional) - Damit kann man die Einstellungen eines Paketes, die während des Paketbaus in der Control Datei gewählt wurden, überschreiben. | override.precise; override.trusty |
DscOverride | (optional) - Damit kann man die Einstellungen eines Paketes, die während des Paketbaus in der Control Datei gewählt wurden, überschreiben. | override.precise; override.trusty |
SignWith | Angabe seines public key, mit dem man die Paketquelle und die enthaltenden Pakete signiert werden. | KEY-ID |
Möchte man die Paketquelle für mehr als eine Ubuntu-Version erstellen, dann erweitert man die Konfigurationsdatei nach einer Leerzeile erneut um alle benötigten Angaben. Die Datei würde dann beispielsweise so aussehen:
Origin: Projektname Label: Projektname Codename: precise; trusty Architectures: i386 amd64 Components: main Description: Apt repository for Projektname DebOverride: override.precise; override.trusty DscOverride: override.precise; override.trusty SignWith: KEY-ID
Nun erstellt man im selben Ordner noch die Datei options, mit der das Basisverzeichnis der Paketquelle festgelegt und außerdem die Passwortabfrage des GnuPG Schlüssel beim Hinzufügen eines Pakets aktiviert wird, um einen unerlaubten Missbrauch zu verhindern. Folgendes wird dafür in die Datei eingetragen:
verbose basedir [Pfad zur Paketquelle]/ubuntu ask-passphrase
Als letztes fehlt nun noch die Datei override.UBUNTU-RELEASE. Dabei ersetzt man UBUNTU-RELEASE durch den gewählten Codenamen. Beispiel: Falls die Paketquelle für Ubuntu 13.10 genutzt werden soll, würde der Name override.saucy heißen. Die Datei folgt dem einfachen Schema "Paketname - Option - Wert". Für das Paket gnome-sudoku sähe der Eintrag zum Beispiel folgendermaßen aus:
gnome-sudoku Priority optional gnome-sudoku Section games
Mithilfe dieser Datei kann man die Kontrollinformationen des Paketen, die in der Debian control-Datei während der Paketerstellung getroffen wurden, durch die Paketquelle überschreiben.
Alle folgenden Befehle müssen aus dem Verzeichnis der Paketquelle heraus ausgeführt werden, in dem der Unterordner ./conf liegt.
Pakete, die man entweder selbst erstellt hat [3], oder von einer anderen Quelle bezogen wurden, bindet man in die Paketquelle ein, indem man folgenden Befehl in ein Terminal [4] eingibt:
reprepro --ask-passphrase -V includedeb CODENAME /PFAD/ZUM/PAKET.deb
Mit diesem Befehl werden DEB-Pakete in die Paketquelle importiert. Falls man andere Dateien hinzufügen möchte, lohnt sich ein Blick in die Manpage von reprepro.
Zur Kontrolle kann man sich mit folgenden Befehl den Inhalt der Paketquelle anzeigen lassen:
reprepro list CODENAME PAKETNAME
Hat man sich entschieden, ein Pakete aus der Quelle zu entfernen, dann kann man dazu folgenden Befehl nutzen:
reprepro remove CODENAME PAKETNAME
Möchte man nun die Paketquelle in die eigene Paketverwaltung integrieren oder anderen Benutzern zur Verfügung stellen, dann muss man noch eine Datei source.list.d erstellen und den öffentlichen Schlüssel veröffentlichen. Diese Datei vereinfacht das Hinzufügen des Paketquelle für den Benutzer. Dazu legt man eine Datei an, die folgenden Inhalt enthält:
deb http://ADRESSE-ZUR-PAKETQUELLE/repos/apt/ubuntu UBUNTU-RELEASE main
Dabei muss man noch den Link zur eigenen Paketquelle und UBUNTU-RELEASE
entsprechend anpassen. Diese Datei oder den Inhalt sollte man veröffentlichen, damit der Benutzer die Paketquelle wie gewohnt freischalten kann.
Zum Schluss muss man den öffentlichen Teil des GnuPG-Schlüssels exportieren:
gpg --armor --output WASAUCHIMMER.gpg.key --export KEY-ID
Diesen sollte man dann in den Order conf/ kopieren und zum Download anbieten, damit die Paketquelle beim Benutzer als vertrauenswürdig eingestuft werden kann. Dies kann beispielsweise durch das Veröffentlichen folgendes Befehls geschehen:
1 | wget -O - http://ADRESSE-ZUR-PAKETQUELLE/repos/apt/conf/WASAUCHIMMER.gpg.key | sudo apt-key add -
|
wobei die URL und der Namen des Schlüssels noch angepasst werden müssen. Durch diesen Befehl wird der Schlüssel automatisch vom Benutzer heruntergeladen und in den Schlüsselbund importiert.
Falls man die Paketquelle im "document root" eingerichtet hat und man sie mit Hilfe eines Apache-Servers [5] veröffentlichen will, dann sollte man die Ordner conf/ und db/ vor fremdem Zugriff schützen. Hier ein Beispiel für Apache 2.2, das der Datei /etc/apache2/httpd.conf hinzugefügt wird (bei Apache 2.4 sollte man /etc/apache2/conf-available/reprepro.conf verwenden und die Pfade entsprechend anpassen):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <VirtualHost *> DocumentRoot /var/www/packages ServerName # Server Name ergänzen ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On # Erlaubt das Lesen des Ordners, wodurch Benutzer auch mit Hilfe des Browsers die Paketquelle durchsuchen können. <Directory "/var/www/packages"> Options Indexes FollowSymLinks MultiViews DirectoryIndex index.html AllowOverride Options Order allow,deny allow from all </Directory> # Versteckt den Ordner conf/ in allen Paketquellen. <Directory "/var/www/packages/*/conf"> Order allow,deny Deny from all Satisfy all </Directory> # Versteckt den Ordner db/ in allen Paketquellen. <Directory "/var/www/packages/*/db"> Order allow,deny Deny from all Satisfy all </Directory> </VirtualHost> |
Eigene Paketquelle anlegen - einfache Möglichkeit, sich lokal eine Paketquelle einzurichten
apt-mirror - Paketquelle für lokale Netzwerke einrichten
Lokale Paketquellen Übersichtsartikel
Reprepro - im Debian-Wiki
Reprepro – Debian-Systeme mit einem selbst aufgesetzten Paket-Repo versorgen - Prolinux.de, 11/2014
Reprepro: Das eigene Paketarchiv für Debian und Ubuntu - Blogbeitrag, 09/2012
Creating your own Signed APT Repository and Debian Packages - Blogbeitrag, 04/2011
Setting up and managing an APT repository with reprepro - Tutorial zu Reprepro ohne die Nutzung eines GnuPG-Schlüssels, 09/2006
Diese Revision wurde am 2. Januar 2017 14:13 von aasche erstellt.