ubuntuusers.de

PPA

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/package.png Ein "Personal Package Archive" (PPA; auf deutsch: eigenes Paketarchiv) ist ein Service von Launchpad. Es bietet die Möglichkeit, Debian-Pakete für unterschiedliche Architekturen (i386, amd64) und für unterschiedliche Ubuntu-Versionen zu bauen. Diese Pakete können dann entweder als eigene Paketquelle oder als Direktlinks anderen zur Verfügung gestellt werden. Das Kompilieren eines Projekts bzw. der jeweiligen Quelltexte erfolgt weitgehend automatisiert auf den Servern von Canonical. Daher kann man unabhängig von der vorhandenen Ubuntu-Version Debian-Pakete auch für andere Ubuntu-Versionen bauen lassen.

Dieser Artikel beschäftigt sich mit den Grundlagen und wie man mit Hilfe eines PPAs Debian-Pakete erstellen kann. Voraussetzung dazu ist jedoch, dass man weiß, wie man ein Debian-Quellpaket (sogenannte source-packages) erstellt. Informationen dazu findet man in Kurzform im Artikel Paketbau oder ausführlich unter Grundlagen der Paketerstellung. Grundsätzlich wird empfohlen, die Erstellung aus dem Quelltext und die "Debianisierung" erst auf dem eigenen Rechner zu testen, bevor man ein PPA nutzt.

Die Installation von Programmen aus einem PPA ist nicht Thema dieses Artikels, dazu siehe Paketquellen freischalten/PPA.

PPA einrichten

Um ein PPA einzurichten, muss man folgenden Dinge erledigen:

  1. Auf Launchpad 🇬🇧 ein Benutzerkonto (Account) unter Angabe einer E-Mail-Adresse registrieren

  2. Einen öffentlichen Schlüssel hinterlegen

  3. Ein Ubuntero werden

  4. PPA aktivieren

Die Schritte 1-3 sind ausführlich im Artikel Ubuntero beschrieben. Bleibt noch der letzte Schritt.

PPA aktivieren

Um ein PPA zu aktivieren, meldet man sich bei Launchpad an, klickt auf "Overview" und in der linken Spalte unter "Actions" auf "Activate PPA". Dort kann man sich die allgemeinen Bedingungen durchlesen, eine Beschreibung zum PPA angeben (die nachträglich jederzeit noch geändert werden kann) und zum Schluss durch Klicken auf "Add" das PPA aktivieren.

Code in ein PPA laden

Vorbereitung

Folgendes Paket muss installiert [1] werden, um später Dateien hochladen zu können:

  • dput

  • devscripts

Befehl zum Installieren der Pakete:

sudo apt-get install dput devscripts 

Oder mit apturl installieren, Link: apt://dput,devscripts

Außerdem ist es zum Bauen von Paketen praktisch, die E-Mail-Adresse und den Maintainernamen zu setzen:

export DEBFULLNAME="VORNAME NACHNAME"
export DEBEMAIL="MAIL@ADRESSE" 

Erforderliche Dateien

Quellcode

Es ist empfehlenswert, sich den Artikel Grundlagen der Paketerstellung anzuschauen. Analog zu diesem Artikel werden dem Beispielordner ~/PPA-PROJEKT/test_0.0.1/ im Homeverzeichnis die Quelldateien des Projekts hinzugefügt. Der Ordnername test_0.0.1 setzt sich aus dem Programmnamen und der Version zusammen.

Dateien im Verzeichnis /debian

Im Ordner ~/PPA-PROJEKT/test_0.0.1 muss zusätzlich ein Unterordner debian/ mit folgenden Dateien angelegt werden: changelog, compat, control, copyright und rules. Nun fehlt nur noch ein Ordner debian/source/ mit der Datei format. Im Wesentlichen kann man sich bei diesen Dateien am oben erwähnten Artikel orientieren.

Damit das Beispielprojekt z.B. für Ubuntu 14.04 gebaut und veröffentlicht werden kann, sind folgende Änderungen vorzunehmen:

  • In der Datei debian/changelog wird die erste Zeile so korrigiert:

    test (0.0.1-1~trusty) trusty; urgency=low
  • Die Datei source/format sollte diesen Inhalt haben:

    3.0 (quilt)

    Ist eine Datei mit diesem Inhalt vorhanden, wird später die Datei ~/PPA-PROJEKT/test_0.0.1-1~trusty.debian.tar.gz erzeugt. Ohne die genannte Datei wird die Datei test_0.0.1-1~trusty.diff.tar.gz erzeugt, die Fehlermeldungen hervorrufen kann.

Nachdem im Ordner ~/PPA-PROJEKT/test_0.0.1/ alle erforderlichen Dateien vorhanden sind, muss im übergeordneten Ordner ~/PPA-PROJEKT/ eine komprimierte Archivdatei des Ordners ~/PPA-PROJEKT/test_0.0.1/ erstellt werden. Der Name muss dieser Konvention entsprechen: PROGRAMMNAME_VERSIONSNUMMER.orig.tar.gz. In dem Beispiel somit test_0-0-1.orig.tar.gz.

Dateien erzeugen, die zum Hochladen benötigt werden

Nachdem alle erforderlichen Dateien vorhanden sind, werden die benötigten Dateien mit debuild erzeugt:

cd ~/PPA-PROJEKT/test_0.0.1/
debuild -S -sa 

Dieses Hilfsprogramm kümmert sich gleich um drei Punkte:

  1. es ruft dpkg-buildpackage zur Paketerstellung auf

  2. dann wird der Paketbau mit lintian kontrolliert

  3. Zum Schluss erfolgt die Signierung mit debsign

Dabei werden mehrere Dateien im Ordner ~/PPA-PROJEKT/ erzeugt, u.a. test_0.0.1-1~trusty.dsc und test_0.0.1-1~trusty_source.changes. War die Erstellung des Projekts nicht erfolgreich, müssen mit den Hinweisen von lintian die Fehler ermittelt und korrigiert werden.

Dateien signieren

Wenn der Paketbau dagegen mit dem Befehl:

debuild -us -uc 

durchgeführt wurde, dann müssen die erstellten Dateien test_0.0.1-1~trusty.dsc bzw. test_0.0.1-1~trusty_source.changes erst noch signiert werden, damit sie beim Hochladen nicht zurückgewiesen werden:

cd ~/PPA-PROJEKT/test_0.0.1/
debuild -S -k"0xABCD1234" 

Hier ist "0xABCD1234" durch die Nummer des eigenen öffentlichen PGP-Schlüssels zu ersetzen. Man beachte das "0x" vor dem Schlüssel.

Erstmaliges Hochladen des Projekts

cd ~/PPA-PROJEKT
dput ppa:LAUNCHPAD-ID/PPA-NAME PROGRAMMNAME_VERSION_source.changes 

Die Werte für LAUNCHPAD-ID/PPA-NAME und PROGRAMMNAME_VERSION müssen entsprechend angepasst werden. Praktisch also, um beim Beispiel zu bleiben:

dput ppa:BENUTZERNAME/ppa  test_0.0.1-1~trusty_source.changes 

Man bekommt dann eine E-Mail, ob das Paket akzeptiert wurde und falls nicht, warum. Wurde das Quellpaket akzeptiert, wird nun versucht, Debianpakete für die Architekturen i386, amd64 und lpia (nur bis Ubuntu 10.04) zu erstellen. Das kann je nach Auslastung der Build-Server etwas dauern. In eigenen Launchpad-Profil unter "Actions → Personal Package Archive → View build records" kann man den Fortschritt kontrollieren und, falls das Erstellen scheitert, das Build-Log mit den Fehlern beim Paketerstellen einsehen. Nur im Fehlerfall erhält man eine E-Mail mit einem Link auf die Build-Log-Datei.

Sind die Pakete erfolgreich erstellt worden, sieht man dies im Profil unter "Actions → Personal Package Archive". Hier findet man dann auch die Direktlinks zu den Debian-Paketen und die Adresse der eigenen Paketquelle. Im Beispielprojekt findet man die Pakete als LAUNCHPAD-ID/PPA-NAME/test_0.0.1~trusty.SYSTEMARCHITEKTUR.deb.

Erneutes Hochladen des Projekts

Wurden am Quelltext Änderungen vorgenommen, muss in der Datei debian/changelog die Versionsnummer erhöht werden (z.B. von test_0.0.1-1 auf test_0.0.1-2). Dann werden, wie oben beschrieben, die zum Hochladen erforderlichen Dateien erzeugt, signiert und hochgeladen.

Eine weitere Möglichkeit ist die Erstellung von Patch-Dateien. Der Artikel Grundlagen der Paketerstellung gibt hierzu weitere Hinweise.

Hochladen des Projekts für verschiedene Ubuntu-Versionen

Durch das Ersetzen von trusty im Dateinamen kann das Projekt problemlos für weitere Ubuntu-Versionen gebaut und veröffentlicht werden. Die folgenden Änderungen sind erforderlich, wenn das Projekt beispielsweise (zusätzlich) für Ubuntu 12.04 veröffentlicht werden soll:

  1. Die erste Zeile in der Datei debian/changelog muss angepasst werden, indem zweimal das vorhandene trusty durch precise ersetzt wird.

  2. Im Ordner ~/PPA-PROJEKT/ wird nur der Unterordner test_0.0.1-1/ mit dem Quelltext und die Archivdatei test_0.0.1.orig.tar.gz benötigt. Alle weiteren vorhandenen Dateien müssen gelöscht werden.

Nun folgt die Erstellung und Signierung die erforderlichen Dateien. Entweder benutzt man wie oben den Befehl "debuild -S -sa" oder den folgenden, wenn ein bestimmter Schlüssel verwendet werden soll:

cd ~/PPA-PROJEKT/test_0.0.1/
debuild -S -sd -k"0xABCD1234" 

Das Hochladen erfolgt mit dem bereits oben erläuterten Befehl:

cd ..
dput ppa:LAUNCHPAD-ID/PPA-NAME  test_0.0.1-1~precise_source.changes 

Die Dateien test_0.0.1-1~precise_source.changes, test_0.0.1-1~precise.dsc und test_0.0.1-1~precise.debian.tar.gz werden hochgeladen, nicht aber die Datei test_0.0.1.orig.tar.gz. Auch hier bekommt man eine E-Mail, ob das Paket akzeptiert wurde oder nicht.

Problembehebung

Paket wurde "rejected"

Bekommt man nach dem Hochladen per E-Mail die Meldung, dass das Paket "rejected" (abgelehnt) wurde, kann dies mehrere Ursachen haben. Dies steht meist sehr aussagekräftig in der E-Mail beschrieben.

Bekommt man diese Meldung:

Rejected:
MD5 sum of uploaded file does not match existing file in archive
Files specified in DSC are broken or missing, skipping package unpack verification

dann ist das Problem, dass man zuvor schon mal den gleichen Code hochgeladen hat. Lädt man es nochmal hoch, muss man unbedingt die Versionsnummer in der debian/changelog ändern. Selbst wenn man das alte Paket über das Webfrontend gelöscht hat, ist es zwingend erforderlich, eine andere Versionsnummer zu wählen, da sich ein PPA immer merkt, was für Pakete man bereits hochgeladen hatte. Anstelle von X.X.X-1 muss man dann X.X.X-2 nehmen.

Paket wurde nicht gebaut

Auch dies kann viele Ursachen haben und das Build-Log gibt meistens Aufschluss darüber, was schief gelaufen ist. In dem Großteil der Fälle ist die Ursache, dass man gewisse Abhängigkeiten (also "build-dependencies") in der debian/control nicht angegeben hat oder ein falsches Kommando zum Kompilieren in der Datei debian/rules steht.

Signieren schlägt fehl

Erhält man folgende Meldung beim Signieren eines Pakets:

Now signing changes and any dsc files... signfile test_0.0.4-1~trusty.dsc Benutzername <Benutzername@mailadresse> 
gpg: »Benutzername <Benutzername@mailadresse>« übersprungen: Geheimer Schlüssel ist nicht vorhanden
gpg: /tmp/debsign.xSsGps0Q/test_0.0.4-1~trusty.dsc: clearsign failed: Geheimer Schlüssel ist nicht vorhanden 
debsign: gpg error occurred! Aborting.... debuild: fatal error at line 1283: running debsign failed

dann muss man den Befehl debuild mit der Nummer des eigenen Schlüssels kombinieren:

debuild -S -sa -k"0xABCD1234" 

Diese Revision wurde am 2. November 2018 18:05 von ubot erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Community, Ubuntu, Launchpad, Programmierung, Paketbau