[[Vorlage(Getestet, Focal)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:GnuPG: GnuPG Schlüssel erstellen und verwalten] [:Grundlagen_der_Paketerstellung:Eigenes Paket erstellen] [:Terminal: Ein Terminal öffnen] [:Apache: Einen Apache-Webserver nutzen] }}} [[Inhaltsverzeichnis(1)]] [[Bild(Wiki/Icons/package.png, 48, align=left)]] Neben der Nutzung der offiziellen [:Paketquellen:] oder von anderen Quellen wie z.B. ein [:Launchpad/PPA: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 [packages:reprepro:] {en} 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]: {{{#!vorlage Paketinstallation reprepro, universe }}} = Vorbereitung = Bevor man beginnt, sollte man sich noch einen [:GnuPG#Schluesselpaar-erzeugen: 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 [:Apache#Rechte: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 }}} {{{#!vorlage Tabelle Ü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 [:Grundlagen_der_Paketerstellung#control: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 [:Grundlagen_der_Paketerstellung#control: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#Schluesselpaar-erzeugen: 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 [:20.04: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 [:Grundlagen_der_Paketerstellung#control:control-Datei] während der Paketerstellung getroffen wurden, durch die Paketquelle überschreiben. Dies ist allerdings optional. = Pakete einbinden = {{{#!vorlage 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: {{{#!vorlage Befehl 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 [man:reprepro: 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: {{{#!vorlage Befehl reprepro list CODENAME PAKETNAME }}} = Pakete entfernen = Hat man sich entschieden, ein Pakete aus der Quelle zu entfernen, dann kann man dazu folgenden Befehl nutzen: {{{#!vorlage Befehl 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: {{{#!code sources.list 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 [:Paketquellen_freischalten:freischalten] kann. == Öffentlichen GnuPG Schlüssel veröffentlichen == Zum Schluss muss man den öffentlichen Teil des GnuPG-Schlüssels exportieren: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!code apache 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. Options Indexes FollowSymLinks MultiViews DirectoryIndex index.html AllowOverride Options Order allow,deny allow from all # Versteckt den Ordner conf/ in allen Paketquellen. Order allow,deny Deny from all Satisfy all # Versteckt den Ordner db/ in allen Paketquellen. Order allow,deny Deny from all Satisfy all }}} Danach kann die Konfiguration mittels {{{#!vorlage Befehl sudo a2enconf reprepro sudo systemctl reload apache2 }}} aktiviert werden. = Links = == Intern == * [:Eigene_Paketquelle_anlegen:] - einfache Möglichkeit, sich lokal eine Paketquelle einzurichten * [:apt-mirror:] - Paketquelle für lokale Netzwerke einrichten * [:Lokale_Paketquellen:] {Übersicht} Übersichtsartikel == Extern == * [man:reprepro:Manpage] {en} * [debian:SettingUpSignedAptRepositoryWithReprepro: Reprepro] {en} - im Debian-Wiki * [http://www.pro-linux.de/artikel/2/1726/reprepro-debian-systeme-mit-einem-selbst-aufgesetzten-paket-repo-versorgen.html Reprepro – Debian-Systeme mit einem selbst aufgesetzten Paket-Repo versorgen] {de} - Prolinux.de, 11/2014 * [http://www.pro-linux.de/artikel/2/1459/apt-repositorium-erstellen-variante-1-apt-ftparchive.html Apt-Repositorium erstellen: Variante 1 - apt-ftparchive] {de} - 10/2010 * [http://www.pro-linux.de/artikel/2/1475/apt-repositorium-erstellen-variante-2-reprepro.html Apt-Repositorium erstellen: Variante 2 - reprepro] {de} - 12/2010 * [http://www.gambaru.de/blog/2012/09/11/reprepro-das-eigene-paketarchiv-fur-debian-und-ubuntu/ Reprepro: Das eigene Paketarchiv für Debian und Ubuntu] {de} - Blogbeitrag, 09/2012 * [http://newblog.jonliv.es/?p=54 Creating your own Signed APT Repository and Debian Packages] {en} - Blogbeitrag, 04/2011 * [http://www.jejik.com/articles/2006/09/setting_up_and_managing_an_apt_repository_with_reprepro/ Setting up and managing an APT repository with reprepro] {en} - Tutorial zu Reprepro ohne die Nutzung eines GnuPG-Schlüssels, 09/2006 #tag: System, Installation, Server, Paketverwaltung