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:
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:
Auf Launchpad 🇬🇧 ein Benutzerkonto (Account) unter Angabe einer E-Mail-Adresse registrieren
Einen öffentlichen Schlüssel hinterlegen
Ein Ubuntero werden
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:
es ruft dpkg-buildpackage zur Paketerstellung auf
dann wird der Paketbau mit lintian kontrolliert
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:
Die erste Zeile in der Datei debian/changelog muss angepasst werden, indem zweimal das vorhandene
trusty
durchprecise
ersetzt wird.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"
Links¶
debuild - deutsche Manpage des zentralen Werkzeugs zur Paketerstellung
PPA - The easy way 🇩🇪 - Blogbeitrag 05/2011
PPA-Quickstart-Guide 🇬🇧 - offizielle Dokumentation
PPA-Suche - PPA für ein Programm finden
How to find out the package download count from a PPA? 🇬🇧
PPAStats 🇬🇧
Open Build Service - Das OpenSuSE Projekt bietet ebenfalls einen Build Service für Ubuntu-Pakete an