Kurz-Howto: Eigenes Debian-Repository aufbauen

Geschrieben von: Michael Stapelberg

Worum geht’s?

Ein eigenes Debian-Repository ist nützlich, wenn man privat Pakete verteilenmöchte – zum Beispiel an den Freundeskreis oder in der Firma um dieInstallation zu erleichtern. Die Installation verläuft recht einfach, wenn manmal raus hat, wie’s geht.

Wir werden uns also ein eigenes Debian-Repository einrichten, was nachentsprechendem Eintrag in der /etc/apt/sources.list viaapt-get auf Debian- und debianbasierten Systemen (wie zum BeispielUbuntu) benutzt werden kann. Dies beeinhaltet auch das Signieren mit GnuPG, sodass keineWarnung angezeigt wird.

Datei/Ordner-Struktur

Am besten legt man sich einen neuen Ordner an, in dem die Pakete selbst und dienotwendigen zusätzlichen Dateien abgelegt werden. Dies kann direkt imhttpdocs-Verzeichnis sein, verrät jedoch neugierigen Besuchern dann sofort,wenn man einen Fehler gemacht hat. Ich bevorzuge es daher, lokal alle Dateienabzulegen und diese erst am Ende auf den Webserver zu übertragen/inshttpdocs-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 inunser 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 einenSchlü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) <heinrichh@duesseldorf.de>''

Ihr Name (``Vorname Nachname''): Michael Stapelberg <michael@nospamplease.de>

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 selbstleicht zu merkender, ausreichend langer Satz sein – ca 20 Zeichen solltengenügen.)

Wir haben uns hierbei nun einen DSA/ElGamal-Schlüssel erzeugt, der 2048 Bitsgroß ist und 5 Jahre gültig sein wird. Er ist auf meinen Namen ausgestellt unddie E-Mail-Adresse sollte durch eine gültige ersetzt werden😉.

Hinweis: Man sollte sich auch eine Widerrufsurkunde via gpg --outputrevoke.asc --gen-revoke "Michael Stapelberg" erstellen, falls man daseingegeben Mantra irgendwann vergisst und der Schlüssel daher nicht mehrbenutzt werden soll. Details gibts in der (deutschen) GPG-Anleitung.

Wichtig: Der öffentliche Teil des Schlüssels muss natürlich irgendwiezugänglich sein, man sollte ihn daher auf einem Keyserver oder auf dem eigenenServer 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 dashttpdocs-Verzeichnis des Webservers und fertig ist unser Repository.

Das Repository benutzen

Nehmen wir an, dass wir die Dateien irgendwie nachhttp://michael.stapelberg.de/Debian geschafft haben, so können wirdas 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 Signierenmit GPG verwendet haben, apt-get bekannt gemacht werden (ich gehedavon aus, dass er sich in der Datei PublicKey befindet):

apt-key add PublicKey

Nach einem apt-get update können wir nun die neuen Paketeinstallieren🙂.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s