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.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 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.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
Du solltest 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
.
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.10-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.10-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.10-0ubuntu1.dsc
$ lintian hello_2.10-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.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
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.