Kurz-Howto: Eigenes Debian-Repository aufbauen

(2007-08-21)

Linux/UNIX-kenntnisse erforderlich! (in den Bereichen dpkg, apt-get und gpg)

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

Der 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 :-).