staging.inyokaproject.org

reprepro

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Wiki/Icons/package.png 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.

Installation

Reprepro kann direkt aus den offiziellen Paketquellen installiert werden [1]:

  • reprepro (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install reprepro 

Oder mit apturl installieren, Link: apt://reprepro

Vorbereitung

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.

Konfiguration

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/ 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. focal; groovy
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.focal; override.groovy
DscOverride: override.focal; override.groovy
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 optionale Datei override.UBUNTU-RELEASE, sofern man dies in der distributions angegeben hat. Dabei ersetzt man UBUNTU-RELEASE durch den gewählten Codenamen. Beispiel: Falls die Paketquelle für Ubuntu 20.04 genutzt werden soll, würde der Name override.focal 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. Dies ist allerdings optional.

Pakete einbinden

Hinweis:

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, die sehr viele nützliche Funktionen dieses Programmes darstellt.

Zur Kontrolle kann man sich mit folgenden Befehl den Inhalt der Paketquelle anzeigen lassen:

reprepro list CODENAME PAKETNAME 

Pakete entfernen

Hat man sich entschieden, ein Pakete aus der Quelle zu entfernen, dann kann man dazu folgenden Befehl nutzen:

reprepro remove CODENAME PAKETNAME 

Die Paketquelle veröffentlichen

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:

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

Öffentlichen GnuPG Schlüssel veröffentlichen

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:

wget -O- http://ADRESE-ZUR-PAKETQUELLE/repos/apt/conf/WASAUCHIMMER.gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/NAME-DER-PAKETQUELLLE-archive-keyring.gpg 

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.

Apache-Server absichern

Falls man die Paketquelle im "document root" var/www/packages/ 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.4, dass man als /etc/apache2/conf-available/reprepro.conf abspeichern sollte:

 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>

Danach kann die Konfiguration mittels

sudo a2enconf reprepro
sudo systemctl reload apache2 

aktiviert werden.

Intern

Extern

Diese Revision wurde am 13. Oktober 2022 14:18 von DJKUhpisse erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Paketverwaltung, Installation, Server, System