Ubuntu logo

Packaging Guide

4. Neue Software paketieren

Auch wenn bereits tausende Pakete in den Ubuntu-Archiven vorhanden sind, gibt es noch immer sehr viele Programme, die nicht dort zu finden sind. Wenn es ein neues interessantes Programm gibt, das eine größere Verbreitung haben sollte, möchten Sie vielleicht versuchen ein Paket für Ubuntu zu erzeugen oder ein PPA einzurichten. Dieser Leitfaden hilft Ihnen Schritt für Schritt dabei die neuen Softwarepakete zu erstellen.

Sie sollten als erstes den :doc:`Vorbereitung<./getting-set-up>`s-Artikel lesen, um Ihre Entwicklungsumgebung vorzubereiten.

4.1. Das Programm überprüfen

Der erste Schritt in der Paketerstellung ist das Besorgen des veröffentlichen Quelltextes von Upstream (die Autoren von Software werden als “Upstream” bezeichnet) und das Überprüfen auf Kompilier- und Ausführbarkeit.

Dieser Leitfaden führt Sie anhand einer einfachen Anwendung namens GNU Hello, die von GNU.org veröffentlicht wurde, duch den Prozess des Paketbaus.

Download GNU Hello:

$ wget -O hello-2.10.tar.gz "http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz"

Now uncompress it:

$ tar xf hello-2.10.tar.gz
$ cd hello-2.10

Diese Anwendung nutzt das autoconf-Build-System, also wollen wir ./configure ausführen, um uns für das Kompilieren vorzubereiten.

Dies wird die benötigten Erstellungsabhängigkeiten überprüfen. Um hello als einfaches Beispiel zu nehmen, build-essential sollte alles bereitstellen was wir brauchen. An komplexeren Programmen wird dieser Befehl scheitern, wenn Sie nicht die benötigten Bibliotheken und Entwicklungsdateien besitzen. Installieren Sie die benötigten Pakete und Entwicklungsdateien bis der Befehl erfolgreich ausgeführt wird.:

$ ./configure

Jetzt können Sie den Quelltext kompilieren:

$ make

Wenn das Kompilieren erfolgreich war, können Sie folgende Anwendung installieren und starten:

$ sudo make install
$ hello

4.2. Ein Paket starten

bzr-builddeb includes a plugin to create a new package from a template. The plugin is a wrapper around the dh_make command. Run the command providing the package name, version number, and path to the upstream tarball:

$ sudo apt-get install dh-make bzr-builddeb
$ cd ..
$ bzr dh-make hello 2.10 hello-2.10.tar.gz

Wenn Sie nach dem Pakettyp gefragt werden, wählen Sie mit der Eingabe von s den Typ einzelne Binärdatei. Der Quelltext wird in einen Zweig importiert und das debian/ Paketverzeichnis wird hinzugefügt. Sehen Sie sich einmal den Inhalt an. Die meisten Dateien werden nur für spezielle Pakete (beispielsweise Emacs Module) benötigt, sodass Sie mit dem Entfernen der nicht benötigten Dateien anfangen können:

$ cd hello/debian
$ rm *ex *EX

Sie sollten nun jede der Dateien anpassen.

In debian/changelog change the version number to an Ubuntu version: 2.10-0ubuntu1 (upstream version 2.10, Debian version 0, Ubuntu version 1). Also change unstable to the current development Ubuntu release such as trusty.

Vieles Paketbauarbeit wird von einer Reihe von Skripten übernommen, die debhelper heißen. Das exakte Verhalten von debhelper ändert sich mit neuen Majorversionen. Die compat Datei weist debhelper an unter welcher Version dies geschehen soll. Im allgemeinen empfiehlt es sich, dies auf die neueste Version zu stellen welche 9 ist.

Unter control sind alle Metadaten eines Paketes enthalten. Der erste Abschnitt beschreibt das Quellpaket. Der zweite Abschnitt beschreibt die Binärpakete, die erstellt werden. Unter Build-Depends: müssen alle Pakete eingetragen werden, von denen die Kompilierung abhängt. Für hello werden mindestens die folgenden benötigt:

Build-Depends: debhelper (>= 9)

Sie müssen außerdem eine Beschreibung der Anwendung das Feld Description: eintragen.

copyright muss ausgefüllt werden um der Lizenz des Upstreams gerecht zu werden. Der Datei hello/COPYING nach ist das die GNU GPL 3 oder neuer.

docs enthält alle Dokumentationsdateien des Upstreams, die Ihrer Meinung nach in dem entgültigen Paket enthalten sein sollten.

README.source und README.Debian werden nur benötigt, wenn Ihr Paket nicht nur Standardfunktionen hat. Das trifft hier nicht zu, also können sie gelöscht werden.

source/format kann beibehalten werden, es beschreibt das Versionsformat des Quellpakets und sollte 3.0 (quilt) sein.

Die umfangreichste Datei ist rules. Hierbei handelt es sich um eine Make-Datei, die den Quelltext kompiliert und in ein Binärpaket verwandelt. Erfreulicherweise wird dabei heutzutage die meiste Arbeit von debhelper 7 erledigt, sodass das universale % Make-Dateiziel nur das dh Script ausführt, das alles benötigte durchführt.

Alle Dateien sind in größerer Ausführlichkeit in der Übersicht im Artikel über das Debian Verzeichnis beschrieben.

Schlussendlich committen Sie den Code zu Ihrem Paketier-Zweig:

$ bzr add debian/source/format
$ bzr commit -m "Initial commit of Debian packaging."

4.3. Das Paket bauen

Jetzt wird überprüft, ob das Programm kompiliert und das -deb Binärpaket erfolgreich gebaut werden kann:

$ bzr builddeb -- -us -uc
$ cd ../../

Mit dem Befehl bzr builddeb wird das Paket im aktuellen Verzeichnis gebaut. Die Option -us -uc ist die Anweisung, dass das Paket nicht GPG signiert werden muss. Das Ergebnis wird in .. ausgegeben.

Sie können sich den Inhalt eines Paketes mit folgendem Befehl ansehen:

$ lesspipe hello_2.10-0ubuntu1_amd64.deb

Installieren Sie das Paket und prüfen ob es funktioniert (später werden Sie in der Lage sein, es mit sudo apt-get remove hello zu deinstallieren sofern gewünscht):

$ sudo dpkg --install hello_2.10-0ubuntu1_amd64.deb

Sie können auch alle Pakete sofort wie folgt installieren:

$ sudo debi

4.4. Nächste Schritte

Selbst wenn es das .deb Binärpaket baut kann Ihre Paketierung Bugs haben. Viele Fehler können automatisch durch unser Werkzeug lintian entdeckt werden. Dies kann gegen die Quell- .dsc Metadaten Datei, .deb Binärpakete oder .changes Datei gestartet werden:

$ lintian hello_2.10-0ubuntu1.dsc
$ lintian hello_2.10-0ubuntu1_amd64.deb

Um ausführlichere Beschreibungen der Probleme zu sehen verwenden Sie das --info lintian Flag oder den Befehl lintian-info.

Für Python Pakete gibt es auch ein lintian4python Werkzeug, welches einige zusätzliche lintian Überprüfungen bietet.

Nachdem der Fehler im Bauprozess behoben wurde, können Sie mit der Option -nc “no clean” das Paket erneut bauen, ohne mit der Kompilierung des Quelltextes starten zu müssen:

$ bzr builddeb -- -nc -us -uc

Nachdem sichergestellt ist, dass das Paket auf dem eigenen Rechner erfolgreich gebaut werden kann, sollten Sie überprüfen, ob dies auch auf einem frisch installierten System funktioniert. Zu diesem Zweck kann pbuilder eingesetzt werden. Da das gebaute Paket in ein PPA (Personal Package Archive) hochgeladen werden soll, ist es erforderlich, das Paket zu signieren. So kann Launchpad überprüfen, dass dieses Paket wirklich von Ihnen stammt (die hochzuladende Datei muss signiert werden, da die -us und -uc Markierungen nicht wie zuvor an bzr builddeb übergeben wurden). Für das Signieren benötigen Sie eine funktionierende Version von GPG. Sollten Sie pbuilder-dist oder GPG noch nicht installiert haben, so machen Sie dies jetzt:

$ bzr builddeb -S
$ cd ../build-area
$ pbuilder-dist trusty build hello_2.10-0ubuntu1.dsc

Wenn Sie mit Ihrem Paket zufrieden sind, wird es vermutlich Ihre Absicht sein, dass andere Benutzer Ihr Paket überprüfen. Dazu können Sie den Zweig in Launchpad hochladen:

$ bzr push lp:~<lp-username>/+junk/hello-package

Das Hochladen in ein PPA hat mehrere Vorteile: Sie können einfach den Paketbauvorgang auf Fehlerfreiheit überprüfen und andere können die Binärpakete testen. Hierfür benötigen Sie ein PPA in Launchpad, in das Sie ihre Dateien mittels dput hochladen:

$ dput ppa:<lp-username>/<ppa-name> hello_2.10-0ubuntu1.changes

Sie können nach Feedback im #ubuntu-motu IRC Kanal, oder auf der`MOTU Mailingliste <ubuntu-motu>`_. fragen. Dort kann auch ein spezielles Team wie das GNU Team für detailliertere Fragen gefragt werden.

4.5. Zur Einbindung einsenden

Es gibt eine Vielzahl von Wegen, auf denen ein Paket in Ubuntu einziehen kann. In den meisten Fällen ist der Weg über Debian der beste Weg. Auf diesem Weg wird versichert, dass das Paket die größte Anzahl an Nutzern hat da es nicht nur in Debian und Ubuntu vorhanden sein wird, sondern auch in ihren Derivaten. Hier sind einige nützliche Links für das Hinzufügen neuer Pakete im Debianprojekt:

  • Debian Mentors FAQ – debian-mentors dient dem Mentoring von neuen und zukünftigen Debianentwicklern. Hier können Sie einen Sponsor finden um Ihr Paket ins Archiv hochzuladen.

  • Work-Needing and Prospective Packages – Informationen wie man “Intent to Package” und “Request for Package” Bugs meldet und offene of open ITPs und RFPs auflistet.

  • Debian Developer’s Reference, 5.1. New packages – Das gesamte Dokument ist äußerst wichtig sowohl für Ubuntu als auch Debian Paketierer. Diese Sektion dokumentiert wie man neue Pakete einreicht.

In manchen Fällen mag es Sinn ergeben direkt zuerst in Ubuntu zu gehen. Beispielsweise mag Debian in einem Freeze sein, was es wiederum unwahrscheinlich macht, dass Ihr Paket es rechtzeitig in Ubuntu für die nächste Veröffentlichung schafft. Dieser Prozess ist in der Sektion ” <NewPackages>`_ des Ubuntu Wikis dokumentiert.

4.6. Bildschirmfotos

Haben Sie einmal ein Paket zu Debian hochgeladen, sollten Sie Bildschirmfotos bereitstellen, um zukünftigen Benutzern einen Einblick in das Programm zu geben. Diese sollen auf http://screenshots.debian.net/upload hochgeladen werden.