Kurzanleitung zum Aufbau eines APT Paket Repository
In dem Repo wird das hallo-1.0.0.deb verwendet um die Funktion von reprepro zu zeigen, wie eigene DEB Pakete erstellt werden können könnt Ihr hier lesen.
Installation der benötigten Pakete
apt install reprepro apache2 gnupg
Erstellen eines GnuPG keys
Mit diesem GPG Schlüssel wird das Repository und die Pakete signiert. Der Public Key muss auf den Zielsystemen als Trusted Key hinterlegt werden. (siehe unten)
Beim Erstellen des Keys muss man ein Passwort angeben. Nur mit diesem Passwort ist es möglich neue Pakete zum Repository hinzuzufügen und zu signieren.
gpg --gen-key ... Ihr Name ("Vorname Nachname"): Mein APT Repo Key Email-Adresse: example@example.org Sie haben diese User-ID gewählt: "Mein APT Repo Key <example@example.org>" Ändern: (N)ame, (E)-Mail oder (F)ertig/(A)bbrechen? f ... Öffentlichen und geheimen Schlüssel erzeugt und signiert. pub rsa3072 2020-10-11 [SC] [verfällt: 2022-10-11] 4A2E138451DD449DF3FC2C7A28C7770DD3A8D10D uid Mein APT Repo Key <example@example.org> sub rsa3072 2020-10-11 [E] [verfällt: 2022-10-11]
Der Key hat eine Gültigkeit von 2 Jahren, man kann die Gültigkeit verlängern. Das geht mit „gpg –edit-key <key_id>“. Mit „expire“ kann die Gültigkeit des Keys geändert werden.
gpg --edit-key 4A2E138451DD449DF3FC2C7A28C7770DD3A8D10D gpg (GnuPG) 2.2.12; Copyright (C) 2018 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Geheimer Schlüssel ist vorhanden. sec rsa3072/28C7770DD3A8D10D erzeugt: 2020-10-11 verfällt: 2022-10-11 Nutzung: SC Vertrauen: ultimativ Gültigkeit: ultimativ ssb rsa3072/236EB690D64E39D8 erzeugt: 2020-10-11 verfällt: 2022-10-11 Nutzung: E [ ultimativ ] (1). Mein APT Repo Key <example@example.org> gpg> expire Ändern des Verfallsdatums des Hauptschlüssels. Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll. 0 = Schlüssel verfällt nie <n> = Schlüssel verfällt nach n Tagen <n>w = Schlüssel verfällt nach n Wochen <n>m = Schlüssel verfällt nach n Monaten <n>y = Schlüssel verfällt nach n Jahren Wie lange bleibt der Schlüssel gültig? (0) 10y Key verfällt am Mi 09 Okt 2030 21:37:42 CEST Ist dies richtig? (j/N) j sec rsa3072/28C7770DD3A8D10D erzeugt: 2020-10-11 verfällt: 2030-10-09 Nutzung: SC Vertrauen: ultimativ Gültigkeit: ultimativ ssb rsa3072/236EB690D64E39D8 erzeugt: 2020-10-11 verfällt: 2022-10-11 Nutzung: E [ ultimativ ] (1). Mein APT Repo Key <example@example.org> gpg> key 1 gpg> expire Ändern des Verfallsdatums des Unterschlüssels. Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll. 0 = Schlüssel verfällt nie <n> = Schlüssel verfällt nach n Tagen <n>w = Schlüssel verfällt nach n Wochen <n>m = Schlüssel verfällt nach n Monaten <n>y = Schlüssel verfällt nach n Jahren Wie lange bleibt der Schlüssel gültig? (0) 10y Key verfällt am Mi 09 Okt 2030 21:37:42 CEST Ist dies richtig? (j/N) j sec rsa3072/28C7770DD3A8D10D erzeugt: 2020-10-11 verfällt: 2030-10-09 Nutzung: SC Vertrauen: ultimativ Gültigkeit: ultimativ ssb rsa3072/236EB690D64E39D8 erzeugt: 2020-10-11 verfällt: 2030-10-09 Nutzung: E [ ultimativ ] (1). Mein APT Repo Key <example@example.org> gpg> quit Änderungen speichern? (j/N) j
Erstellen des REPO Verzeichnis
mkdir -p /var/www/repos/apt/debian mkdir /var/www/repos/apt/debian/conf
Erstellen der Apache Konfiguration
In dem einfachen Beispiel habe ich einfach die Default Virtual Host Konfiguration ersetzt/angepasst, diese liegt unter /etc/apache2/sites-enabled/000-default
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/repos/ > Options Indexes FollowSymLinks Multiviews Require all granted </Directory> <Directory "/var/www/repos/apt/*/db/"> Require all denied </Directory> <Directory "/var/www/repos/apt/*/conf/"> Require all denied </Directory> <Directory "/var/www/repos/apt/*/incoming/"> Require all denied </Directory> </VirtualHost>
Entfernen von unnötigen Files im Webroot /var/www
rm -rf /var/www/html
Testen der Apache Konfiguration und Neustart des Services
root@repodev:~# apache2ctl configtest Syntax OK root@repodev:~# /etc/init.d/apache2 reload [ ok ] Reloading apache2 configuration (via systemctl): apache2.service.
Erstellen der distributions Datei
Die Datei beschreibt das Repository und für welche Distribution das Repo ist. Bei „SignWith“ wird die Key ID verwendet von dem eben erzeugten GPG Key.
Bei Codename wird der OS Release Name angegeben, z.B. bei Debian „buster“ oder bei Ubuntu „bionic“, das hängt von dem jeweiligen Release ab. Ist es ein generisches Repo dann kann hier auch z.B. „all“ genommen werden.
/var/www/repos/apt/debian/conf/distributions
Origin: Mein APT Repo Label: Mein APT Repo Codename: <osrelease> Architectures: i386 amd64 Components: main Description: APT repository fuer meine Pakete SignWith: 4A2E138451DD449DF3FC2C7A28C7770DD3A8D10D
/var/www/repos/apt/debian/conf/options
verbose basedir /var/www/repos/apt/debian ask-passphrase
Exportieren des GnuPG Keys
Der GPG Key muss in den APT Keyring auf dem Zielsystem aufgenommen werden damit man Pakete installieren kann. Dazu exportieren wir Ihn und stellen Ihn auf dem Webserver bereit.
gpg --armor --output /var/www/repo_key.key --export 4A2E138451DD449DF3FC2C7A28C7770DD3A8D10D
Ein Paket veröffentlichen
Mit folgendem Befehl wird ein neues Paket z.B. hallo_1.0.0.deb dem Repository hinzugefügt. Wird das Kommando ausgeführt fragt der Assistent nach dem Passwort für den GPG Key.
# reprepro -b /var/www/repos/apt/debian includedeb <osrelease> /root/hallo_1.0.0.deb /root/hallo-1.0.0.deb: component guessed as 'main' Exporting indices...
Im Browser kann man ebenfalls prüfen ob die Veröffentlichung geklappt hat, dazu http://<repo>/repos/apt/debian/pool/main/h/hallo/ aufrufen:
Installieren von hallo aus eigenem Repository
Als erstes muss der Public Key des Repositorys zur Keychain hinzugefügt werden.
wget -O - http://10.10.10.10/repo_key.key|apt-key add -
Erstellen einer sources.list.d Datei
Die Datei wird verwendet um das Repo einzubinden.
/etc/apt/sources.list.d/mein_repo.list
deb http://10.10.10.10/repos/apt/debian <osrelease> main
Aktualisieren von APT Quellen
# apt update Holen:1 http://10.10.10.10/repos/apt/debian all InRelease [2.331 B] Holen:2 http://10.10.10.10/repos/apt/debian all/main amd64 Packages [1.018 B] OK:3 http://deb.debian.org/debian buster InRelease Holen:4 http://deb.debian.org/debian buster-updates InRelease [51,9 kB] OK:5 http://security.debian.org/debian-security buster/updates InRelease Es wurden 55,2 kB in 1 s geholt (86,7 kB/s). Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Alle Pakete sind aktuell.
Installieren ….
# apt install hallo Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Die folgenden NEUEN Pakete werden installiert: hallo 0 aktualisiert, 1 neu installiert, 0 zu entfernen und 0 nicht aktualisiert. Es müssen 776 B an Archiven heruntergeladen werden. Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Holen:1 http://10.10.10.10/repos/apt/debian all/main amd64 hallo all 1.0-0 [776 B] Es wurden 776 B in 0 s geholt (0 B/s). Vormals nicht ausgewähltes Paket hallo wird gewählt. (Lese Datenbank ... 35202 Dateien und Verzeichnisse sind derzeit installiert.) Vorbereitung zum Entpacken von .../archives/hallo_1.0-0_all.deb ... Entpacken von hallo (1.0-0) ... hallo (1.0-0) wird eingerichtet ...
Viel Spaß