Personal Package Archive bauen, signieren und verteilen

Ubuntu-Software per PPA bereitstellen

| Autor / Redakteur: Mirco Lang / Stephan Augsten

Das PPA im Log vom apt-get-update-Befehl.
Das PPA im Log vom apt-get-update-Befehl. (Bild: Lang / Ubuntu)

Eine Software zu entwickeln ist die eine Sache, sie zu distribuieren eine ganz andere. Eine komfortable Möglichkeit für den Nutzer ist die Bereitstellung als Personal Package Archive (PPA) über den Ubuntu-eigenen Launchpad-Service.

Wer meint, Quelltext zu schreiben sei die eigentliche Kunst, hat sich vielleicht noch nie am Distribuieren versucht – könnte man beim PPA-Erstkontakt durchaus meinen. Grundsätzlich ist das Konzept ganz einfach: Man erstellt ein Debian-Package und lädt es auf Launchpad hoch. Anschließend können Nutzer dieses PPA ihrem lokalen Paketmanagement hinzufügen und Ihre Software über das übliche „apt-get install foobar“ installieren.

Es gibt aber ein paar Stolpersteinchen: Dokumentation, Authentifizierung und Formate. Die offizielle Dokumentation beleuchtet nur die Grundlagen, verzichtet aber auf eine konkrete Anleitung. Und etliche Anleitungen im Netz funktionieren schlicht und ergreifend nicht.

Meist lassen sie Schritte aus und verweisen bestenfalls auf externe Anleitungen, die nur für sehr spezielle Fälle geschrieben wurden oder gerne mal die konkrete Syntax auslassen. Zudem müssen die Formate beim Paketbau penibel eingehalten werden, die Fehlertoleranz liegt ziemlich genau bei Null. Und am Ende muss auch noch die Signierung per GPG-Schlüssel funktionieren.

Leider hängt das Prozedere von vielen Projektdetails ab – eine Variante für jedes Projekt funktioniert nicht. Und für jedes Projekt gibt es zudem mehrere Wege. Im Folgenden sehen Sie den – vermutlich – einfachst möglichen Ansatz, auf dem sich dann aufbauen lässt.

Als Software dient entsprechend ein simples Hello-World-Skript, das zu einem Quellpaket geschürt und dann auf Launchpad bereitgestellt wird. Etwaige Anweisungen zum Kompilieren und komplexe Abhängigkeiten bleiben entsprechend außen vor.

Der Einfachheit halber gliedert sich die Anleitung in 5 Schritte:

  • PGP-Schlüssel erstellen
  • Launchpad-Account vorbereiten
  • Paket bauen
  • Paket auf Launchpad bereitgestellen
  • PPA lokal nutzen und Software installieren

Als Grundsystem kommt Ubuntu 18.04 Bionic zum Einsatz. Hier müssen Sie zunächst zwei Tools installieren, nämlich die zum Debian Package Manager gehörenden Dev-Erweiterungen sowie den Debian Helper:

sudo apt-get install dpkg-dev debhelper

Es ist freilich nicht ganz auszuschließen, dass weitere Tools installiert werden müssen – dann bekommen Sie aber auch entsprechende Meldungen.

PGP-Schlüssel erstellen

Zunächst müssen Sie einen PGP-Schlüssel erstellen und auf einen Schlüsselserver hochladen. Das erledigen Sie unter Ubuntu einfach über „Zubehör/Passwörter und Verschlüsselung“. Klicken Sie im Bereich „GnuPG-Schlüssel“ auf das Plus-Zeichen und folgen Sie den Anweisungen zum Erstellen eines „PGP-Schlüssels“.

Anschließend laden Sie den erstellten Schlüssel über „Entfernt/Schlüssel abgleichen und veröffentlichen ...“ im Hauptmenü auf den Ubuntu-Schlüsselserver hkp://keyserver.ubuntu.com:11371 hoch.

Im nächsten Schritt müssen Sie für die Möglichkeit sorgen, eine E-Mail mit diesem Schlüssel zu entschlüsseln – wie genau, hängt von Ihrem Mail-Programm ab. In Thunderbird können Sie zum Beispiel die Erweiterung Enigmail nutzen. Exportieren Sie dazu einfach den geheimen Schlüssel aus „Passwörter und Verschlüsselung“. Das Export-Tool finden Sie im Reiter „Details“ in den Eigenschaften des erstellten Schlüssels. Importieren Sie den Schlüssel anschließend in Enigmail.

Launchpad-Account vorbereiten

Nun können Sie sich bei Launchpad registrieren. Auf Ihrer Startseite finden Sie in der Übersicht den Eintrag „OpenPGP Keys“, über den Sie den eben erstellten Schlüssel importieren können. Dazu müssen Sie lediglich den Fingerabdruck eingeben, den Sie in „Passwörter und Verschlüsselung“ auf der Details-Seite Ihres GnuPG-Schlüssels finden.

Sie erhalten daraufhin eine E-Mail mit einem verschlüsselten Bestätigungslink, den Sie erst nach Entschlüsselung mit beispielsweise Enigmail und Ihrem Schlüssel sehen.

Diese drei Punkte sollten vor dem Paketbau erledigt sein.
Diese drei Punkte sollten vor dem Paketbau erledigt sein. (Bild: Lang / Ubuntu)

Als Nächstes signieren Sie den Ubuntu Code of Conduct, ebenfalls in der Übersicht zu finden: Laden Sie die Textdatei herunter, signieren Sie sie per ...

gpg --clearsign UbuntuCodeofConduct-2.0.txt

... und geben Sie den Inhalt der erstellten Datei „UbuntuCodeofConduct-2.0.txt.asc“ bei Launchpad ein. Natürlich nur, sofern Sie dem CoC zustimmen versteht sich.

Abschließend erstellen Sie noch das PPA selbst über „Create new PPA“, mit beliebigem Namen.

Paket bauen

Die wesentliche Arbeit steckt im Paketbau – ein komplexes, bücherfüllendes Thema. Hier soll es aber um einen funktionierenden Ablauf gehen, nicht um Paketgrundlagen. Erstellen Sie zunächst einen Arbeitsordner „foobar-0.1“ im Heimverzeichnis, das Unterverzeichnis „scripts“, darin das Testskript „foobar“ und eine (zur Not leere) Lizenzdatei:

mkdir -p ~/foobar-0.1/scripts
cd ~/foobar-0.1
touch LICENSE
echo -e '#!/bin/bash \n echo "Hello World, how are you?"' > scripts/foobar

Der folgende Befehl verlangt, dass zu dieser Ordnerstruktur ein TAR-Archiv im übergeordneten Ordner vorliegt – schließlich dürfte bei realen Projekten die Software als solches verfügbar sein, lange vor an das Paketieren gedacht wird. Eigentlich würde man ja das Archiv entpacken und dadurch die Ordnerstruktur aufbauen.

cd ..
tar -czf foobar-0.1.tar.gz ./foobar-0.1
cd foobar-0.1

Nun werden noch allerlei weitere Dateien mit Informationen über das Paket benötigt, die Sie erfreulicherweise mit dem Befehl „debmake“ automatisch erstellen lassen können. Schauen Sie sich anschließend die Ordner- und Dateistruktur mit „tree“ an. Die Steuerungsdateien liegen allesamt im Ordner „debian“.

Sie sollten als Paketverwalter alle Dateien anpassen, zum Testen müssen Sie aber nur folgende Dateien erstellen/bearbeiten und die jeweils folgenden Inhalte bauen:

Regeln im Makefile ./debian/rules:

   #!/usr/bin/make -f
   export DH_VERBOSE = 1

   %:
      dh $@

Hier wurde lediglich die export-Zeile einkommentiert.

Metadaten in ./debian/control:

   Source: foobar
   Section: devel
   Priority: optional
   Maintainer: foo bar <foobar@example.com>
   Build-Depends: debhelper (>=11~)
   Standards-Version: 4.3.0
   Homepage: https://example.com/debs

   Package: foobar
   Architecture: all
   Multi-Arch: foreign
   Depends: ${misc:Depends}
   Description: Ein Beispiel-Paket
    This is an example package to demonstrate Debian packaging using
    the debmake command.
    .
    The generated Debian package uses the dh command offered by the
    debhelper package and the dpkg source format '3.0 (quilt)'.

Geändert wurden die Zeilen Source, Section, Priority und Package; zudem muss der Maintainer passen – der Rest ist Vorlagentext.

Installationsanweisung in /debian/install:

scripts/foobar usr/bin

Da nichts kompiliert werden muss, genügt hier die Anweisung, das Skript zu kopieren.

Der vollständige Source Tree.
Der vollständige Source Tree. (Bild: Lang / Ubuntu)

Zur Übersicht hier der gesamte Source Tree. Damit ist das Paket bereit zum Kompilieren. Für den Upload auf Launchpad muss das Paket als Quellpaket verarbeitet und mit Ihrem PGP-Schlüssel signiert werden:

sudo debuild -S -sa -k'123456abcdef'

Mit der Option „-k“ übergeben Sie wieder den Fingerabdruck Ihres Schlüssels.

Paket auf Launchpad bereitstellen

debuild hat nun einige Dateien im Verzeichnis darüber generiert, von denen Sie „source.changes“-Datei signieren müssen:

cd ..
debsign -k 123456abcdef foobar_0.1-1_source.changes

Laden Sie die Datei nun mit dput hoch:

dput ppa:NUTZER/ppa foobar_0.1-1_source.changes

Den exakten Upload-Link sehen Sie auch auf der Übersichtsseite des ganz zu Anfang erstellten PPAs. Nach dem Upload bekommen Sie eine Statusmeldung per Mail, die hoffentlich den erfolgreichen Upload bestätigt.

PPA lokal nutzen und Software installieren

Der Vollständigkeit halber soll hier auch die andere Seite nicht fehlen, das Einbinden auf Nutzerseite. Hier genügen das übliche Hinzufügen und Aktualisieren, bevor dann die eigentliche Installation folgt:

sudo add-apt-repository ppa:NUTZER/ppa
sudo apt-get update
sudo apt-get install foobar

Das PPA im Log vom apt-get-update-Befehl.
Das PPA im Log vom apt-get-update-Befehl. (Bild: Lang / Ubuntu)

Wieder finden Sie die genaue PPA-Adresse auf der PPA-Seite in Launchpad. Nach all dem Aufwand sollte nun ein simples „foobar“ den gewünschten Erfolg bringen.

Auch wenn es allerlei Schritte sind, letztlich sind Paketierung und Distribution in diesem Szenario recht einfach, den debmake-Vorlagen sei Dank. Bei echten Projekten werden Sie hingegen ungleich mehr leisten müssen: In der Praxis warten auf Sie durchaus komplexe Dinge wie Versionierungen, unterschiedliche Plattformen, umfangreiche Metadaten, Verwaltung der Abhängigkeiten und natürlich auch das Regelwerk zum Kompilieren.

Allerdings ist das Paketieren im Grunde ein Gebiet für sich. Wenn die Launchpad-Vorarbeiten einmal geleistet sind, beschränkt sich der eigentliche Distributionsaufwand auf simples Signieren und Hochladen.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 46106894 / Installation & Rollout)