Debian

Anleitung zum Erstellen von Debian-Paketen

Anleitung zum Erstellen von Debian-Paketen

1. Vorwort

Für eine Maschine verantwortlich zu sein bedeutet, sich sowohl um die Hardware als auch um die Softwarekomponenten zu kümmern. Wie man es im täglichen Leben als Systemadministrator sieht, ist es viel besser, Software als Softwarepaket zu installieren, anstatt eine Menge Quelldateien. Dies reduziert die Kosten für die ordnungsgemäße Wartung des Systems.

Pakete, die bei Ihrem bevorzugten Distributor erhältlich sind, werden von einem Paketbetreuer validiert und überwacht. Er hat die Software getestet und versichert, dass sie zu den anderen in der Distribution verfügbaren Softwarepaketen passt. Außerdem ist das Paket mit einem GPG-Schlüssel des Paketbetreuers signiert. Dies garantiert die Integrität des Pakets und zeigt Ihnen, dass das Paket von einer vertrauenswürdigen Quelle stammt.

Das Paketformat hängt von Ihrer Linux-Distribution ab. Ausgewählte Formate sind die folgenden:

deb

Verwendete Pakete in: Debian GNU/Linux, Ubuntu, Armbian, Linux Mint, Knoppix

U/min

Verwendete Pakete in: RedHat, Fedora, CentOS, OpenSuse

tgz und txz

Verwendete Pakete in: Slackware

Teer.xz

Pakete verwendet in: Arch Linux

Dieses Dokument erklärt kurz, wie man ein Paket für Debian GNU/Linux baut. Für detaillierte Informationen über das Debian-Paketformat und die Werkzeuge zur Wartung eines 'deb'-basierten Linux-Systems können Sie im Debian-Paketverwaltungsbuch [dpmb] nachschlagen. Um Pakete für Debian GNU/Linux zu erstellen, sind diese Dokumente unerlässlich:

Das Paket, mit dem wir arbeiten werden, heißt 'helloworld' und hat die Versionsnummer 0.1. Zu Demonstrationszwecken enthält es einfach ein einzelnes Python-Skript, das die berühmte Nachricht "Hello, world" ausgibt!“:

#!/usr/bin/python print ("Hallo Welt!") 

2. Bedarf

2.1. GPG-Schlüssel

Halten Sie als Schritt 1 Ihren GPG-Schlüssel bereit. Später wird der Schlüssel benötigt, um das Paket zu unterschreiben. Denken Sie daran, dass nicht signierte Pakete nicht vertrauenswürdig sind und nicht Teil des Debian-Universums sein können.

Falls Sie noch keinen GPG-Schlüssel haben, erstellen Sie einen. Sie können die folgenden drei Schritte ausführen. Der erste Befehl generiert einen neuen Schlüssel, der zweite exportiert Ihren neuen Schlüssel in eine separate Datei und der dritte fügt den Schlüssel Ihrem persönlichen Schlüsselbund hinzu.

$ gpg --gen-key $ gpg -a --output ~/.gnupg/YOUR_NAME.gpg --export 'IHR NAME' $ gpg --import ~/.gnupg/YOUR_NAME.gpg 

Achten Sie bei der Erstellung darauf, dass der angegebene Name _IHR NAME_ korrekt ist. Es ist üblich, eine Kombination aus Vor- und Nachname zu verwenden. Dieser Name muss dann im Paket genau gleich sein, wenn die 'control'-Datei des Debian-Pakets erstellt wird. Weitere Informationen zu GPG finden Sie im GNU Privacy Handbook [gph].

2.2. Die Verpackungswerkzeugkette

Um ein Debian-Paket mit Quellcode zu erstellen, sind die folgenden Softwarepakete auf Ihrem System erforderlich:

Als Benutzer 'root' können Sie diese mit folgendem Befehl installieren:

# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder 

2.3. Bereiten Sie die zu paketierende Software vor

Wir müssen ein Verzeichnis vorbereiten, um das Paket zu erstellen. Erstellen Sie ein Verzeichnis, um die Umgebung vorzubereiten, in der wir das Paket erstellen:

$ mkdir -p ~./build/helloworld/0.1 

Kopieren Sie das 'tar.gz' komprimiertes Archiv im Verzeichnis:

$ cp halloworld-0.1.Teer.gz ~./build/helloworld/0.1 

Wechseln Sie in das Verzeichnis und entpacken Sie das Paket:

$ cd ~./build/helloworld/0.1 ~/build/helloworld/0.1$ tar -xzf helloworld-0.1.Teer.gz 

Das Verzeichnis enthält nun sowohl den Quellcode in einem separaten Verzeichnis als auch das komprimierte Archiv:

~/build/helloworld/0.1$ ls halloworld-0.1 halloworld-0.1.Teer.gz 

3. Debianisierung

An dieser Stelle werden wir die Dateien hinzufügen, die spezifisch für ein Debian-Paket sind. Deshalb heißt dieser Schritt _Debianization_ der Software. Dies geschieht in mehreren Einzelschritten.

3.1 Bereiten Sie die Paketstruktur vor

Wechseln Sie in das Verzeichnis, das den gesamten Quellcode des Pakets enthält. In unserem Beispiel enthält das Paket die Datei 'helloworld.py', nur:

~$ CD-Build/helloworld/0.1/helloworld-0.1 ~/build/helloworld/0.1/helloworld-0.1$ ls halloworld.py 

Lassen Sie uns die Dateien hinzufügen, die für ein Debian-Paket spezifisch sind. Das Tool 'dh_make' kommt ins Spiel. Der Schalter '-e' verwendet die angegebene Adresse als E-Mail-Adresse im Feld 'Maintainer' der Datei 'debian/control'. Verwenden Sie beim Erstellen des Pakets stattdessen Ihre eigene E-Mail-Adresse. Denken Sie daran, dieselbe E-Mail-Adresse zu verwenden, die Ihrem GPG-Schlüssel entspricht.

Der Schalter '-f' verwendet die angegebene Datei als ursprüngliches Quellarchiv und überspringt das Kopieren des aktuellen Programmbaums nach 'Programm.orig'.

~/build/helloworld/0.1/helloworld-0.1$ dh_make -e [email protected] -f… /helloworld-0.1.Teer.gz 

An der Eingabeaufforderung werden Sie aufgefordert, den Pakettyp auszuwählen, der erstellt werden soll. Um _single binary_ zu wählen, geben Sie 's' ein.

Pakettyp: Single Binary, Indep Binary, Multiple Binary, Bibliothek, Kernel-Modul, Kernel-Patch? [s/i/m/l/k/n] s Name des Betreuers : Frank Hofmann E-Mail-Adresse : [email protected] Datum : Sa, 04 Nov 2017 21:16:13 +0100 Paketname : helloworld Version : 0.1 Lizenz : leer Pakettyp : Single Hit  zur Bestätigung: Derzeit gibt es kein Top-Level-Makefile. Dies kann zusätzliches Tuning erfordern. Getan. Bitte bearbeiten Sie jetzt die Dateien im Unterverzeichnis debian/. Sie sollten auch überprüfen, ob die helloworld Makefiles in $DESTDIR installiert sind und nicht in / . 

Dies führt zu einem Verzeichnis namens 'debian':

~/build/helloworld/0.1/helloworld-0.1$ ls debian halloworld.py 

Dieses Verzeichnis enthält alle paketspezifischen Dateien.

3.2. Passen Sie die Steuerdatei an

Die Datei 'debian/control' hält die Abhängigkeiten, die _zum Bauen_ des Pakets benötigt werden. Mit dem Befehl 'dpkg-depcheck -d ./configure' erhalten Sie eine Liste mit allen benötigten Paketen. In unserem Fall wird kein weiteres Paket benötigt, da Python eine interpretierte Sprache ist.

Als nächstes müssen wir die Datei 'debian/control' bearbeiten und paketspezifische Werte hinzufügen. Für unser Beispiel sieht es wie folgt aus:

Quelle: helloworld Abschnitt: Python Priorität: optional Betreuer: Frank Hofmann <[email protected]> Build-Abhängig: debhelper (>= 9) Standards-Version: 3.9.5 Homepage: http://www.efho.de/ #Vcs-Git: git://anonscm.debian.org/collab-maint/helloworld.git #Vcs-Browser: http://anonscm.debian.Organisation/?p=collab-maint/helloworld.git;a=summary Paket: helloworld Architektur: any Hängt ab: $shlibs:Depends, $misc:Depends, python Beschreibung: Gibt Hello World in Python aus Druckt Hello World in Python 

3.3. Passen Sie die Copyright-Datei an

Die Datei 'debian/copyright' enthält die Lizenzinformationen für das Softwarepaket. Es ist für die Veröffentlichung über die GNU Public License 2 (GPLv2) vorbereitet. Für unser Beispiel sieht es wie folgt aus:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: helloworld Quelle: http://www.efho.de/ Dateien: debian/* Copyright: 2017 Frank Hofmann <[email protected]> Lizenz: GPL-2+ Dieses Paket ist freie Software; Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren; entweder Version 2 der Lizenz oder (nach Ihrer Wahl) eine spätere Version… Dieses Paket wird in der Hoffnung verteilt, dass es nützlich ist, aber OHNE JEGLICHE GEWÄHRLEISTUNG; auch ohne die stillschweigende Garantie der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Weitere Informationen finden Sie in der GNU General Public License… Sie sollten zusammen mit diesem Programm eine Kopie der GNU General Public License erhalten haben. Wenn nicht, siehe  . Auf Debian-Systemen finden Sie den vollständigen Text der GNU General Public License Version 2 in "/usr/share/common-licenses/GPL-2". 

3.4. Passen Sie die Changelog-Datei an

Nach den Copyright-Informationen muss die Datei 'debian/changelog' angepasst werden. In unserem Beispiel fügen wir die Information „Erstveröffentlichung“ hinzu.

halloworld (0.1-1) instabil; Dringlichkeit=niedrig * Erstveröffentlichung -- Frank Hofmann <[email protected]> Sa, 04 Nov 2017 21:16:13 +0100 

Das ist alles was wir bisher brauchen - jetzt können wir endlich das Paket bauen.


4. Bauen Sie das Paket zusammen

Um das Paket zu erstellen, müssen wir ein Verzeichnis nach oben verschieben und den folgenden Befehl ausführen:

~/build/helloworld/0.1/helloworld-0.1$ dpkg-buildpackage -rfakeroot

Die Option '-rfakeroot' ermöglicht 'dpkg-buildpackage', Befehle als privilegierter Benutzer mit Hilfe des Befehls 'fakeroot' auszuführen. Dies ist notwendig, um das Paket vorzubereiten und Dateien und Verzeichnisse zu erstellen.
Der obige Befehl führt zu einer längeren Liste von Ausgabenachrichten (hier in einer deutschen Sprachumgebung angezeigt):

dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: Quelldistribution unstable dpkg-buildpackage: Quellen geändert durch Frank Hofmann <[email protected]> dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build helloworld-0.1 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-Quelle: Information: Quellformat "3.0 (quilt)" wird verwendet dpkg-source: Information: helloworld wird unter Benutzung des existierenden ./helloworld_0.1.orig.Teer.gz gebaut dpkg-Quelle: Information: helloworld wird in helloworld_0.1-1.debian.Teer.xz gebaut dpkg-Quelle: Information: helloworld wird in helloworld_0.1-1.dsc gebaut debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian/rules binary dh binary dh_testroot dh_prep dh_auto_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_compress dh_fixperms dh_strip dh_strip dh_shd :Abhängig dh_md5sums dh_builddeb dpkg-deb: Paket "helloworld" wird in "… /helloworld_0.1-1_amd64.deb" gebaut. dpkg-genchanges <… /helloworld_0.1-1_amd64.changes dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen dpkg-source --after-build helloworld-0.1 dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten) signfile helloworld_0.1-1.dsc Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: "Frank Hofmann (Hofmann EDV) <[email protected]> " 4096-Bit RSA Schlüssel, ID D431AC07, erzeugt 2014-09-05 

4.1. Validierung des Pakets

Herzlichen Glückwunsch - es ist Ihnen gelungen, ein Debian-Paket zu bauen - ja! Schauen wir uns das Paket nun genauer an. Hier kommt 'Lintian' ins Spiel. Dieses Tool validiert Ihr Paket, um Verstöße gegen die strengen Regeln zu finden, die Debian-Pakete erfüllen müssen.

Um die Tests auszuführen, geben Sie den folgenden Befehl ein:

lintian helloworld_0.1-1_amd64.deb 

Das Tool findet keine Regelverletzungen, sondern auch Rechtschreibfehler und falsche Zeichen. Der Schalter '-pedantic' fordert 'lintian' auf, viel kritischer als sonst zu sein. Wie Sie unten sehen können, ist 'lintian' etwas mürrisch und hat drei Warnungen und einen Fehler entdeckt.

Bis auf die erste Warnung können wir 'lintian' leicht glücklich machen und den Paketinhalt gemäß den Regeln anpassen. Die Warnung 'new-package-should-close-itp-bug' bedeutet, dass kein Fehlerbericht für das ITP-Paket vorliegt (ITP bedeutet _intended to package_). Für ein reguläres Debian-Paket muss ein Fehlerbericht an den Bugtracker für das Paket ITP gesendet werden, um andere darüber zu informieren, dass Sie beabsichtigen, diese Software zu packen.

4.2. Warnung: 'readme-debian-enthält-debmake-template

Die Datei 'README.Debian' soll zusätzliche Notizen zu diesem Paket machen. 'dh_make' hat diese Datei für uns erstellt:

halloworld für Debian ---------------------  -- Frank Hofmann <[email protected]> Sa, 04 Nov 2017 21:16:13 +0100 

In unserem Beispiel haben wir keine zusätzlichen Informationen, also können wir die Datei löschen.

4.3. Warnung: 'Beschreibung-beginnt-mit-führenden-Leerzeichen'

Diese Warnung wird ausgegeben, weil die längere Beschreibung unseres Pakets in der Datei 'debian/control' mit mehr als einem einzelnen Leerzeichen beginnt. Sobald wir ein einzelnes Leerzeichen entfernen, verschwindet die Warnung.

4.4. Fehler: 'Beschreibung-Zusammenfassung-ist-dupliziert'

Jedes Paket erfordert sowohl eine kurze als auch eine längere Beschreibung in 'debian/control'. Dieser Fehler wird ausgelöst, weil beide Beschreibungen identisch sind. Sobald wir die längere Beschreibung erweitert haben ist der Fehler weg.


5. Links und Referenzen

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Die Debian-Entwicklerreferenz
- [dnmg] Josip Rodin, Osamu Aoki: Das neue Debian-Betreuerhandbuch
- [dpmb] Axel Beckert, Frank Hofmann: Das Debian-Paketverwaltungsbuch
- [dpm] Das Debian-Richtlinienhandbuch
- [dpt] Das Debian-Paket-Tutorial
- [gph] Das GNU-Datenschutzhandbuch
- [lushpaiPackage] Alex Lushpai: So erstellen Sie ein Debian-Paket aus dem Quellcode


6. Danksagung

Der Autor dankt Axel Beckert und Gerold Rupprecht für ihre Unterstützung und Kritiker bei der Erstellung dieses Artikels.

Beste Spielkonsolen-Emulatoren für Linux
Dieser Artikel listet beliebte Spielekonsolen-Emulationssoftware auf, die für Linux verfügbar ist. Emulation ist eine Softwarekompatibilitätsschicht, ...
Beste Linux-Distributionen für Gaming im Jahr 2021
Das Linux-Betriebssystem hat sich weit von seinem ursprünglichen, einfachen, serverbasierten Aussehen entfernt. Dieses Betriebssystem hat sich in den ...
So erfassen und streamen Sie Ihre Gaming-Sitzung unter Linux
In der Vergangenheit galt das Spielen von Spielen nur als Hobby, aber mit der Zeit verzeichnete die Spieleindustrie ein enormes Wachstum in Bezug auf ...