Worum geht’s?
Ein eigenes Debian-Repository ist nützlich, wenn man privat Pakete verteilen möchte – zum Beispiel an den Freundeskreis oder in der Firma um die Installation zu erleichtern. Die Installation verläuft recht einfach, wenn man mal raus hat, wie’s geht.
Wir werden uns also ein eigenes Debian-Repository einrichten, was nach
entsprechendem Eintrag in der /etc/apt/sources.list
via
apt-get
auf Debian- und debianbasierten Systemen (wie zum Beispiel
Ubuntu) benutzt werden kann. Dies beeinhaltet auch das Signieren mit GnuPG, sodass keine
Warnung angezeigt wird.
Datei/Ordner-Struktur
Am besten legt man sich einen neuen Ordner an, in dem die Pakete selbst und die notwendigen zusätzlichen Dateien abgelegt werden. Dies kann direkt im httpdocs-Verzeichnis sein, verrät jedoch neugierigen Besuchern dann sofort, wenn man einen Fehler gemacht hat. Ich bevorzuge es daher, lokal alle Dateien abzulegen und diese erst am Ende auf den Webserver zu übertragen/ins httpdocs-Verzeichnis zu verschieben.
Ich gehe davon aus, dass wir mindestens ein .deb
-Paket haben
(sonst würde ein Repository auch Unsinn sein ;-)), das wir verteilen möchten.
Schauen wir uns an, was wir für Dateien am Ende haben werden:
-
Packages(.gz): Diese (komprimierte) Datei enthält den Inhalt der
control
-Dateien der Packages sowie deren MD5-Summe zur Verifikation des Downloads. - Release: Diese Datei enthält die MD5- und SHA1-Hashes sowie die Größe der Packages-Datei.
-
Release.gpg: Dies ist die Signatur für die Release-Datei.
Dadurch kann
apt-get
verifizieren, dass die Datei vertrauenswürdig ist (bei entsprechendem Vorhandensein des Publickeys). - …und natürlich die Pakete selbst.
1.) Die Packages- und Release-Datei erzeugen
Hierzu benutzen wir das Programm apt-ftparchive
, nachdem wir in
unser vorhin angelegtes Packageverzeichnis gewechselt haben:
$ cd Repository $ apt-ftparchive packages . > Packages
Diese Datei müssen wir nun noch mit gzip
komprimieren:
$ gzip -9 Packages
Nun erzeugen wir mit dem selben Programm noch die Release-Datei:
$ apt-ftparchive release . > Release
2.) GPG-Signatur erstellen
2.1) Schlüssel erzeugen
Wenn man GPG bereits verwendet hat, hat man höchstwahrscheinlich bereits einen Schlüssel erzeugt, wenn nicht, kann man das folgendermaßen nachholen:
$ gpg --gen-key Bitte wählen Sie, welche Art von Schlüssel Sie möchten: (1) DSA und ElGamal (voreingestellt) (2) DSA (nur signieren/beglaubigen) (4) ElGamal (signieren/beglaubigen und verschlüsseln) Ihre Auswahl? 1Der DSA Schlüssel wird 1024 Bits haben. Es wird ein neues ELG-E Schlüsselpaar erzeugt. kleinste Schlüssellänge ist 768 Bit standard Schlüssellänge ist 1024 Bit größte sinnvolle Schlüssellänge ist 2048 Bit Welche Schlüssellänge wünschen Sie? (1024) 2048
Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll. 0 = Schlüssel verfällt nie
= Schlüssel verfällt nach n Tagen w = Schlüssel verfällt nach n Wochen m = Schlüssel verfällt nach n Monaten y = Schlüssel verfällt nach n Jahren Der Schlüssel bleibt wie lange gültig? (0) 5y Sie benötigen eine User-ID, um Ihren Schlüssel eindeutig zu machen; das Programm baut diese User-ID aus Ihrem echten Namen, einem Kommentar und Ihrer E-Mail-Adresse in dieser Form auf: ``Heinrich Heine (Der Dichter) <[email protected]>''
Ihr Name (``Vorname Nachname’’): Michael Stapelberg <[email protected]>
Sie benötigen ein Mantra, um den geheimen Schlüssel zu schützen.
Geben Sie das Mantra ein:
(Das Mantra sollte ein für Fremde schwer zu erratender, aber für einen selbst leicht zu merkender, ausreichend langer Satz sein – ca 20 Zeichen sollten genügen.)
Wir haben uns hierbei nun einen DSA/ElGamal-Schlüssel erzeugt, der 2048 Bits groß ist und 5 Jahre gültig sein wird. Er ist auf meinen Namen ausgestellt und die E-Mail-Adresse sollte durch eine gültige ersetzt werden ;-).
Hinweis: Man sollte sich auch eine Widerrufsurkunde via gpg --output
revoke.asc --gen-revoke "Michael Stapelberg"
erstellen, falls man das
eingegeben Mantra irgendwann vergisst und der Schlüssel daher nicht mehr
benutzt werden soll. Details gibts in der (deutschen) GPG-Anleitung.
Wichtig: Der öffentliche Teil des Schlüssels muss natürlich irgendwie
zugänglich sein, man sollte ihn daher auf einem Keyserver oder auf dem eigenen
Server ablegen. Exportieren kann man diesen Teil mit folgendem Befehl (der
öffentliche Teil befindet sich dann in der Datei PublicKey
):
$ gpg --armor --export "Michael Stapelberg" > PublicKey
2.2) Release-Datei signieren
Nun signieren wir mit unserem Schlüssel noch die Release-Datei:
$ gpg --output Release.gpg -ba Release
…und schon haben wir’s geschafft. Jetzt müssen die Dateien nur noch in das httpdocs-Verzeichnis des Webservers und fertig ist unser Repository.
Das Repository benutzen
Nehmen wir an, dass wir die Dateien irgendwie nach
http://michael.stapelberg.de/Debian
geschafft haben, so können wir
das Repository benutzen, in dem wir den folgenden Eintrag in die Datei
/etc/apt/sources.list
hinzufügen:
deb http://michael.stapelberg.de/Debian ./
Einmalig muss auch der öffentliche Teil des Schlüssels, den wir zum Signieren
mit GPG verwendet haben, apt-get
bekannt gemacht werden (ich gehe
davon aus, dass er sich in der Datei PublicKey
befindet):
apt-key add PublicKey
Nach einem apt-get update
können wir nun die neuen Pakete
installieren :-).
I run a blog since 2005, spreading knowledge and experience for almost 20 years! :)
If you want to support my work, you can buy me a coffee.
Thank you for your support! ❤️