Im Netz gibt es eine Reihe von Dokumenten, die das Bauen und Betreuen von Debian-Paketen beschreiben. Eine Liste von Links zu deutsch- und englischsprachigen Handbüchern für Debian-Entwickler finden Sie unter [1]. Anleitungen für Ubuntu-Entwickler fasst das Ubuntu-Wiki unter [2] zusammen. Wenn Sie Pakete nicht nur für die eigene Umgebung bauen, sondern bei einer der beiden Distributionen mitarbeiten möchten, dann ist die Lektüre der dort verlinkten Artikel Pflicht.
Bevor Sie Ihr erstes Paket erstellen, sollten Sie einige Programme nachrüsten. Installieren Sie in jedem Fall das Paket "build-essential", das weitere Komponenten nach sich zieht und unter anderem einen Compiler und diverse Bibliotheken einspielt. Weitere sinnvolle und oft benötigte Werkzeuge sind "autoconf", "automake" und "autotools-dev" (Erstellen von "configure"-Skripten und Makefiles) sowie die beiden Helfer "dh-make" und "debhelper", die Einsteigern das Bauen von Paketen erleichtern. Alternativ spielen Sie das Metapaket "packaging-dev" ein, das automatisch alle Tools installiert, die Sie zum Bauen Ihrer Pakete benötigen:
# apt-get install packaging-dev
Als letzten Vorbereitungsschritt setzen Sie die Umgebungsvariablen "DEBFULLNAME" und "DEBEMAIL":
export DEBFULLNAME="Vorname Nachname"
export DEBEMAIL="mail@example.com"
"dch", "dh_make" und andere Werkzeuge nutzen die Angaben zum Maintainer-Namen und der Mailadresse anschließend automatisch. Die "export"-Aufrufe können Sie in die Datei "~/.bashrc" oder "~/.profile" schreiben, um die Einstellung dauerhaft zu machen.
Debian und Ubuntu bieten die Quellpakete in eigenen Repositorys an. In der Datei "/etc/apt/sources.list" sind diese mit dem Schlüsselwort "deb-src" am Zeilenanfang gekennzeichnet (Bild 3). Nachdem Sie die Einträge hinzugefügt haben, aktualisieren Sie mit »apt-get update
«
die Beschreibungen der verfügbaren Pakete. Danach laden Sie als normaler Benutzer mit »apt-get source Paket
«
das Quellpaket ins aktuelle Verzeichnis herunter (Listing 1). Auch alle weiteren Schritte passieren unter Ihrer eigenen Benutzerkennung und nicht als Root.
Listing 1: Quellpaket herunterladen
$ apt-get source hello Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Es müssen 736 kB an Quellarchiven heruntergeladen werden. Holen: 1 http://security.debian.org/ jessie/updates/main hello 2.9-2+deb8u1 (dsc) [1.347 B] Holen: 2 http://security.debian.org/ jessie/updates/main hello 2.9-2+deb8u1 (tar) [724 kB] Holen: 3 http://security.debian.org/ jessie/updates/main hello 2.9-2+deb8u1 (diff) [11,5 kB] Es wurden 736 kB in 0 s geholt (1.532 kB/s). dpkg-source: Information: hello wird nach hello-2.9 extrahiert dpkg-source: Information: hello_2.9.orig.tar.gz wird entpackt dpkg-source: Information: hello_2.9-2+deb8u1.debian.tar.xz wird entpackt dpkg-source: Information: 01-fix-i18n-of-default-message wird angewandt dpkg-source: Information: 99-config-guess-config-sub wird angewandt
Unter Debian 8.2 landet die "hello"-Version 2.9 auf der Platte; Ubuntu 15.10 lädt 2.10 herunter. Neben den drei Dateien ".debian.tar.xz", ".dsc" und ".orig.tar.gz" ist ein neues Verzeichnis entstanden, das den Namen des Programms und die Versionsnummer trägt: "hello-2.9" (Debian) und "hello-2.10" (Ubuntu).
Benötigen Sie eine andere Version, als in der Datei "sources.list" eingerichtet ist, können Sie die Paketsuchmaschinen von Debian [3] oder Ubuntu [4] befragen, von Hand die ".debian.tar.xz"-, ".dsc"- und ".orig.tar.gz"-Dateien herunterladen und »dpkg-source -x Paket.dsc
«
zum Auspacken verwenden. Komfortabler gelingt das mit dem Befehl "dget", der zum Paket "dev-scripts" gehört. Dahinter geben Sie die URL zur ".dsc"-Datei an, und das Tool lädt automatisch alle erforderlichen Dateien herunter und entpackt die Quellen.
Listing 2: Paket bauen
$ dpkg-buildpackage -us -uc dpkg-buildpackage: Quellpaket hello dpkg-buildpackage: Quellversion 2.9-2+deb8u1hej1 dpkg-buildpackage: Quelldistribution unstable dpkg-buildpackage: Quellen geändert durch Heike Jurzik dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build hello-2.9 fakeroot debian/rules clean dh clean dh_testdir debian/rules override_dh_auto_clean make[1]: Entering directory '/home/heike/quellpakete/hello-2.9' […] dh build dh_testdir dh_auto_configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes […] ================================== Testsuite summary for GNU Hello 2.9 ================================== # TOTAL: 5 # PASS: 4 # SKIP: 1 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 ================================== […] dh_md5sums dh_builddeb dpkg-deb: Paket »hello« wird in »../hello_2.9-2+deb8u1hej1_amd64.deb« gebaut.
Wechseln Sie in das neue Verzeichnis und ändern Sie die Versionsnummer, damit Sie das neue Paket vom Original unterscheiden können. Heißt die aktuelle Version beispielsweise "hello_2.9-2+deb8u1" (Debian) oder "hello_2.10-1" (Ubuntu), dann kann Ihre Variante ein Namenskürzel tragen: "hello_2.9-2+deb8u1+hej1" beziehungsweise "hello_2.10-1+hej1". Eine zweite eigene Version heißt entsprechend "hello_2.9-2+deb8u1+hej2" beziehungsweise "hello_2.10-1+hej2". Neben dem Wiedererkennungswert sorgt das dafür, dass die eigene Versionsnummer als neuer und damit als Update gilt. Mit »dpkg --compare-versions Version1 Operator Version2
«
(siehe »man dpkg
«
) können Sie testen, ob eine Versionsnummer wirklich größer als die vorangegangene ist.
Zum Ändern der Versionsnummer nehmen Sie am besten das Werkzeug "dch" (Debian Changelog) aus dem Paket "dev-scripts" zu Hilfe. Es ruft den über die Umgebungsvariable "EDITOR" gesetzten Texteditor auf und prüft die Syntax der Changelog-Datei (siehe Abschnitt "Das Grundgerüst") vor dem Speichern – ein praktisches Feature, denn Vertipper oder falsch gesetzte Leerzeichen/Umbrüche können beim Paketbau zum Abbruch führen. Rufen Sie "dch --local" und die Namenserweiterung auf, zum Beispiel »dch --local hej
«
. Der Paketname und die Versionsnummer sind bereits richtig gesetzt, und hinter dem Sternchen fügen Sie nun eine kurze Beschreibung ein (Bild 4) und speichern die Änderungen.
Abschließend rufen Sie das Kommando "dpkg-buildpackage -us -uc" auf; die beiden Schalter überspringen das Signieren der ".dsc"- und ".changes"-Dateien. Im Terminal sollten Sie Meldungen wie in Listing 2 sehen; um es übersichtlicher zu machen, erscheint es hier gekürzt. "dpkg-buildpackage" verwendet in der Voreinstellung "fakeroot", um vorzugaukeln, dass es unter einer privilegierten Benutzerkennung läuft. Auch die "dh"-Helferskripte, die Sie in den folgenden Abschnitten kennenlernen, nutzen "fakeroot", um Dateien zu schreiben, deren Besitzer "root" ist, ohne wirklich Rootrechte zu besitzen.
Das neue Binärpaket können Sie nun als Root mit »dpkg -i paket
«
installieren. Ein Aufruf von "hello" im Terminal zeigt, dass die Installation geklappt hat (Bild 5).