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-Artikle 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.7.tar.gz
$ cd hello-2.7

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 du nicht die benötigten Bibliotheken und Entwicklungsdateien besitzt. Installiere die benötigten Pakete und Entwicklungsdateien bis der Befehl erfolgreich ausgeführt wird.:

$ ./configure

Jetzt kannst Du 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.7 hello-2.7.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

Du solltest nun jede der Dateien anpassen.

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

Much of the package building work is done by a series of scripts called debhelper. The exact behaviour of debhelper changes with new major versions, the compat file instructs debhelper which version to act as. You will generally want to set this to the most recent version which is 9.

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 deiner Meinung nach in dem entgültigen Paket enthalten sein sollten.

README.source und README.Debian werden nur benötigt, wenn dein 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 kommitte den Code zu deinem 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.

Du kannst Dir den Inhalt eines Paketes mit folgendem Befehl ansehen:

$ lesspipe hello_2.7-0ubuntu1_amd64.deb

Install the package and check it works (later you will be able to uninstall it using sudo apt-get remove hello if you want):

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

You can also install all packages at once using:

$ sudo debi

4.4. Nächste Schritte

Even if it builds the .deb binary package, your packaging may have bugs. Many errors can be automatically detected by our tool lintian which can be run on the source .dsc metadata file, .deb binary packages or .changes file:

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

To see verbose description of the problems use --info lintian flag or lintian-info command.

For Python packages, there is also a lintian4python tool that provides some additional lintian checks.

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.7-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.7-0ubuntu1.changes

Sehen Sie auch Hochladen für mehr Informationen.

You can ask for reviews in #ubuntu-motu IRC channel, or on the MOTU mailing list. There might also be a more specific team you could ask such as the GNU team for more specific questions.

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 is for the mentoring of new and prospective Debian Developers. It is where you can find a sponsor to upload your package to the archive.
  • Work-Needing and Prospective Packages - Information on how to file “Intent to Package” and “Request for Package” bugs as well as list of open ITPs and RFPs.
  • Debian Developer’s Reference, 5.1. New packages - The entire document is invaluable for both Ubuntu and Debian packagers. This section documents processes for submitting new packages.

In some cases, it might make sense to go directly into Ubuntu first. For instance, Debian might be in a freeze making it unlikely that your package will make it into Ubuntu in time for the next release. This process is documented on the “New Packages” section of the Ubuntu wiki.

4.6. Bildschirmfotos

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