Die Zusammenarbeit im Unternehmen wird immer dynamischer und flexibler. Aus diesem Grund wirft IT-Administrator in der April-Ausgabe einen Blick auf die ... (mehr)

Gut vorbereitet

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.

Bild 4: Mit Hilfe des Tools "dch" bearbeiten Sie die Datei "debian/changelog". Es prüft die Syntax vor dem Speichern.

Paket aus Debian-Quellen bauen

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).

Bild 5: Installieren Sie das neue Paket und geben Sie "hello" ein, um es zu testen.

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023