Generatoren für Debian-Pakete beliebiger Softwareprojekte -Automatisch verpackt

Lesezeit
9 Minuten
Bis jetzt gelesen

Generatoren für Debian-Pakete beliebiger Softwareprojekte -Automatisch verpackt

01.01.2018 - 18:39
Veröffentlicht in:

Wenn es von einer Software kein Debian-Paket gibt, aber trotzdem mit der Paketverwaltung installiert werden soll, dann müssen Admins selber eines aufsetzen. Es gibt eine Reihe von Helfern, die solche Pakete von beliebigen Softwareprojekten automatisch erzeugen und sich ohne umfangreiches Spezialwissen einsetzen lassen. Dieser Artikel stellt eine Reihe dieser Werkzeuge vor.

Zwei Paketformate teilen sich mehr oder weniger die gesamte Welt der Linux-Distributionen untereinander auf: einmal das Red-Hat-Paketformat (.rpm), das zum Beispiel von Red Hat Enterprise Linux und Ablegern wie CentOS eingesetzt wird, und das Paketformat von Debian (.deb), das sich auch in den vielen Debian-Derivaten wie etwa auf Ubuntu-Servern wiederfindet.

Gute Debian-Pakete (oder RPM-Pakete) von Softwareprojekten zu schnüren, verlangt ein Spezialwissen [1], das bei Admins oft nur am Rande eine Rolle spielt und im vollen Umfang hauptsächlich bei Debian-Projektmitgliedern vorhanden ist. An dieser Stelle kommen die hier als Generatoren bezeichneten Werkzeuge ins Spiel, die helfen, ein Debian-Paket von beliebigen Softwareprojekten zu erzeugen, wenn es nicht im offiziellen Paketarchiv zur Verfügung steht und auch von den Projektentwicklern nicht in dieser Form zur Verfügung gestellt wird.

Dieser Artikel stellt einige dieser Helfer vor und vergleicht ihre Ergebnisse; sie gehören in den Werkzeugkasten jedes Adminstrators, der Debian-Systeme betreut.

Checkinstall

Checkinstall [2] (aktuell: 1.6.2) ist bereits seit 2000 verfügbar und kann ein Debian-Binärpaket von beliebigen Softwareprojekten erzeugen, das Sie dann mit dem Paketmanager dpkg installieren. Das Werkzeug ist für Debian, Ubuntu, Mandriva und andere Distributionen aus den Archiven verfügbar und kann neben Debian-Paketen auch RPM-Pakete und Pakete für Slackware erzeugen.

Checkinstall rufen Sie zusammen mit dem Installationsbefehl des von einem Softwareprojekt verwendeten Buildsystems wie zum Beispiel GNU Make oder Autotools auf und wenden es im Wurzelverzeichnis eines ausgepackten Quellcodepaketes (Upstream-Tarball) oder aus einem ausgecheckten Repositorium an. Mit Hilfe des beiliegenden Programms "installwatch" fängt der Generator dabei die Installationsprozedur ab und lenkt das Bauergebnis in ein Binärpaket um.

Checkinstall nimmt beliebige Argumente an, Sie führen also zum Beispiel checkinstall make install aus, wenn es sich um ein Projekt mit GNU Make oder Automake als Buildsystem handelt (bei Letzterem müssen Sie zunächst ./configure ausführen, um das Makefile zu erzeugen).

Genauso können Sie aber auch zum Beispiel mit checkinstall python setup.py install ein Paket von Python-Software erzeugen und Checkinstall für beliebige andere Buildsysteme wie Cmake einsetzen. Root-Rechte werden dabei benötigt, weil Checkinstall auf "/var/tmp" zugreift, und das erzeugte Binärpaket wird unmittelbar installiert. Das können Sie mit der Option "--install=no" aber verhindern, falls das nicht erwünscht ist; das geben Sie dann direkt hinter "checkinstall" an.

Der Generator ermittelt einzelne Werte für die Paket-Metadaten wie den Paketnamen, die Versionsnummer und die Lizenz selbstständig, der ganze Datensatz wird während des Prozesses aber für etwaige Korrekturen noch einmal vorgelegt. Es werden auch noch andere Dinge abgefragt wie zum Beispiel, ob ein separates Dokumentationspaket angelegt werden soll; die gesamte Prozedur ist aber auch durch umfangreiche Optionen für Checkinstall automatisierbar.

Checkinstall ist einfach zu verwenden, generiert brauchbare Binärpakete ohne großen Aufwand und ist durch den Overlay-Ansatz universell verwendbar. Der erfolgreiche Einsatz steht und fällt aber mit der Build-Konfiguration eines Projektes: Wenn zum Beispiel nur eine Binärdatei im Wurzelverzeichnis erzeugt wird und kein Installationspfad vorgesehen ist, dann bleibt das Debian-Paket leer.

Es handelt sich bei diesem Generator um ein simples Werkzeug, das Dinge wie die mühselige händische Ermittlung und Installation von Bau-Abhängigkeiten auch nicht abnehmen kann. Kenntnisse aus dem Debian-Paketbau sind für Checkinstall nicht notwendig. Extra ein Quellpaket anzufertigen bleibt dem Anwender hierbei erspart, dafür können Sie das erzeugte Binärpaket damit aber auch nur sehr eingeschränkt manipulieren.

dh_make

Bei dh_make [3] (aktuell: 2.201608) handelt es sich ebenfalls um ein einfaches Kommandozeilen-Werkzeug, das zu den Quellen eines beliebigen Softwareprojektes automatisch den Grundstock für ein Debian-Quellpaket generieren kann, wie Sie es zum Beispiel mit "apt-get source" von bereits in Debian integrierten Paketen beziehen können. Dafür wird dh_make ("dh" drückt eine Nähe zum Bauwerkzeug Debhelper aus) im ausgepackten oder ausgecheckten Wurzelverzeichnis eines Projektes aufgerufen und erzeugt die für ein Debian-Paket benötigten Konfigurations- und Steuerdateien im Unterordner "debian/" – das erspart dem Anwender, diese Dateien von Grund auf neu aufsetzen zu müssen.

Den Name und die Version des Quellpaketes können Sie festlegen, indem Sie entweder das Wurzelverzeichnis nach dem Schema "Paketname-Version" umbenennen oder demselben Schema mit Unterstrich anstatt Bindestrich beim Aufruf von dh_make die Option "-p/--packagename" mitgeben.

Dieser Generator fragt zunächst nach dem gewünschten Typ für das Binärpaket, für das er die Alternativen "single" (singuläres Binärpaket), "independent" (Architektur-unabhängiges Paket), "library" (Bibliothek mit separatem "-dev"-Binärpaket) und "python" (Python-Paket) anbietet – entsprechende Schalter sind auch als Optionen verfügbar.

Danach legt der Generator den Satz an Metadaten für das Paket zur Bestätigung vor und überprüft, ob der korrekt nach dem Schema "Paketname_Version.orig.tar.gz" benannte Upstream-Tarball im übergeordneten Verzeichnis bereitliegt – Sie können ihn mit der Option "--cre-ateorig" in diesem Schritt auch direkt aus dem Wurzelverzeichnis erzeugen lassen.

Die Metadaten werden ermittelt oder können auf der Kommandozeile mitgegeben werden. Die eigene E-Mail-Adresse zum Beispiel stellen Sie mit "-e/--email" ein und den Lizenztyp wählen Sie mit "-c/--copyright" aus (unterstützt werden "gpl" und "lgpl" in verschiedenen Versionen, "apache", "bsd" und andere). Das Werkzeug erzeugt dann aus Templates in "/usr/share/debhelper/dh_make" die Konfigurationsdateien in "debian/" und beendet sich.

Mit dpkg-source -b Wurzelverzeichnis können Sie dann das Quellpaket von dem Softwareprojekt erzeugen (es besteht aus dem Upstream-Tarball ".orig.tar.gz", dem gepackten Debian-Verzeichnis ".debian. tar.gz" und einer ".dsc"-Registerdatei) oder mit dpkg-buildpackage oder einem anderem Builder wie Sbuild auch direkt die in "debian/control" eingetragenen Binärpakete bauen.

Anpassungen erforderlich

Bei den von dh_make erzeugten Dateien handelt es sich allerdings nur um die Basis, die vom Anwender für einen sauberen Paketbau meist noch angepasst und für ein einwandfreies Paket weiter ausgebaut werden muss. So finden sich in "deb/control" bei einem Softwareprojekt wie Pdf2-djvu (das bereits in Debian integriert ist) in den Feldern "Build-Depends" und "Depends" zum Beispiel keine Bau- und Laufzeitabhängigkeiten, weil dh_make sie nicht ermitteln kann – die Abhängigkeiten hier anzugeben, ist auch bei minimalem Standard aber angeraten.

Das erzeugte "debian/rules" ist eigentlich hinreichend für den Bau dieser Software, der Debhelper-Sequencer "dh" automatisiert den Einsatz der Debhelper-Module und das GNU-Autotools-Setup von Pdf2­djvu wird von "dh_auto_build" automatisch erkannt und ausgeführt, ohne dass Sie das extra angeben müssen. Die beim offiziellen Debian-Paket verwendeten üblichen optionalen Bauflags wie die Zuschaltung von Hardening-Optionen mit "$DEB_BUILD_ MAINT_OPTIONS" und Ergänzungen zu den Linker-Einstellungen mit "$DEB_ LDFLAGS_MAINT_APPEND" werden von "dh_make" zunächst als Kommentare zur Verfügung gestellt und können vom Anwender einfach hinzugeschaltet werden.

Allerdings lässt sich das Paket erst einmal nicht bauen. Dafür benötigen Sie ein Override für "dh_auto_clean" wie bei dem Paket im Archiv – so viel Intelligenz, dies automatisch zu konfigurieren, steht für dh_make nicht zur Verfügung. Im Unterordner "debian/" finden Sie über den Basissatz hinaus immer eine ganze Reihe von Konfigurationsdateien mit der Endung ".ex", die von "dh_make" grundsätzlich erzeugt werden und die Sie bei Nichtbedarf löschen oder auch einfach stehen lassen können.

 Nach dem Durchlauf von dh_make können Sie ein Quellpaket erzeugen.
 Nach dem Durchlauf von dh_make können Sie ein Quellpaket erzeugen.

Für Pdf2djvu zum Beispiel werden keine Maintainerskripte wie "postinst" benötigt, und "watch" auszufüllen ist auch nicht unbedingt nötig, falls Sie nicht an einem Paket für das offizielle Archiv arbeiten – dann müsste die Quelle für den Upstream-Tarball schon damit integriert werden. Pragmatisch gesehen muss für ein nur lokal benötigtes Binärpaket die Debian-Policy nicht vollständig umgesetzt werden. Dann können Sie zum Beispiel das Feld "Description" in "deb/control" unausgefüllt lassen und "deb/copyright" kann unbearbeitet bleiben. Der Generator fügt praktische Ausfüllhilfen, auskommentierte Optionen und Beispiele hinzu – nicht selten finden sich in Debian-Paketen aus dem offiziellen Archiv Reste von den Templates dieses Quellpaket-Generators.

Für Administratoren bietet dh_make eine willkommene Hilfe beim Aufsetzen eines Debian-Quellpaketes und stellt eine Sammlung von teilweise vorausgearbeiteten Templates als Arbeitsgrundlage bereit. Funktionierende Debian-Pakete auf Knopfdruck sind damit aber nur in wenigen Fällen möglich.

Debmake

Debmake [4] (aktuell: 4.2.9) generiert genauso wie dh_make die Dateien in "debian/" für ein Debian-Paket, und Sie können dieses CLI-Werkzeug als Alternative dazu ebenso im Quellcodeverzeichnis eines beliebigen Softwareprojektes anwenden. Es gibt aber einige Unterschiede beim Aufruf von "debmake", so müssen Sie zum Beispiel mit "-z/--targz" extra angeben, wenn der Upstream-Tarball ein anderes Format als ".tar.gz" hat, außerdem muss der Tarball nach dem Schema "Paketname-Version.Endung" benannt sein – das für den Bau benötigte Debian-Schema wird vom Generator als symbolischer Link darauf angelegt.

Wenn Sie keine weiteren Optionen angeben, erzeugt Debmake einen reinen Basissatz von Konfigurationsdateien in "debian/". Neben "changelog", "control", "rules" und "copyright" findet sich hier dann auch die Datei "compat", in der der Kompatibilitäts-Level für Debhelper eingestellt ist ("9" ist mittlerweile allerdings veraltet), in "source/format" ist das Standard-Paketformat festgelegt ("3.0 quilt") und auch eine (zunächst nicht funktionierende) "watch"-Datei wurde unter anderem erzeugt.

Mit der Option "-x/--extra" können Sie bei einem Lauf von "debmake" in Stufen gesteigert weitere Konfigurationsdateien beziehungsweise Templates ausgeben lassen; das Werkzeug unterscheidet dafür zwischen der Standard-Einstellung "desireable" (-x1), "interesting" (-x2) und "unusual configuration files" (-x3), die die Endung ".ex" tragen – sie enthalten wie bei dh-make zunächst aber nur Grundgerüste und Anwendungshinweise in Form von Kommentarzeilen und mit Kommentaren vorausgefüllten Feldern.

Angewendet auf Pdf2djvu liegt die generierte Steuerdatei "debian/rules" ein wenig hinter dem Ergebnis von "dh_make" zurück, das automatisch erkannt hatte, dass dieses Paket mit der Debhelper-Erweiterung "autotools_dev" gebaut werden muss – das für den Bau darüber hinaus benötigte Override für "dh_auto_clean" wird auch hier erwartungsgemäß nicht automatisch hinzugefügt.

Ergänzungen für den Debhelper-Sequencer können Sie mit der Option "-w/--with" beim Programmaufruf mitgeben und die Option "-b/--binaryspec" ermöglicht die einfache Voreinstellung der in "debian/control" konfigurierten Binärpakete. Viele andere Kommandozeilen-Parameter sind verfügbar – bei Bedarf konsultieren Sie die Manpage von "debmake" oder die Anleitung in dem Paket "debmake-doc", die als ausführliche Einführung in den Debian-Paketbau geschrieben worden ist.

Stärke: Lizenzrecherche

Die volle Stärke entfaltet Debmake beim Erzeugen von "debian/copyright", für das der Generator alle Codedateien eines Softwareprojektes durchscannt und die verwendeten Lizenzen dafür sammelt – gerade dieses Alleinstellungsmerkmal kann mit der Option "-c/--copyright" auch separat verwendet werden. Der Quellpaket-Generator Debmake stellt eine vollwertige Alternative zu dh-make dar und bietet sich als weiteres nützliches Helferlein für das Aufsetzen von Debian-Quellpaketen an, indem er genauso teilweise vorausgearbeitete Konfigurationsdateien generieren kann; mehr gibt es aber auch hier nicht.

Für im Paketbau ungeübte Anwender gibt es hier viele nützliche Dinge wie zum Beispiel, dass mit der Option "-T/--tutorial" zusätzliche Hilfskommentarzeilen in die Templates geschrieben werden können.

dh-make-golang

Für das automatische Paketieren von Go-Software steht für Debian der Helfer dh-make-golang [5] zur Verfügung. Das selbst in Go geschriebene Kommandozeilen-Werkzeug rufen Sie in einem beliebigen Arbeitsverzeichnis direkt mit der Quelle für eine Go-Software auf, wobei Sie einen eventuell verwendeten kanonischen Codehoster wie Github als Pfad angeben – genauso wie bei Imports in Go-Programmen oder dem Befehl "go get". Ein simples dh-make-golang github.com/elves/elvish zum Beispiel genügt um die Shell Elvish (bereits in Debian enthalten) herunterzuladen und als funktionstüchtiges Debian-Quellpaket zu konfektionieren.

Anders als bei den vorher vorgestellten Generatoren sind die von "dh-make-golang" generierten Konfigurationsdateien in "debian/" in vielen Fällen hinreichend gut, um unmittelbar ein sauber installierbares Debian-Binärpaket daraus bauen zu können. Die Debhelper-Erweiterung für Go-Software wird dabei automatisch eingebunden, einmal in "debian/rules" als Ergänzung für den Aufruf des Debhelper-Sequencers und das dafür benötigte Paket "dh-golang" wird als Bauabhängigkeit in "debian/control" geschrieben.

Die für den Bau benötigten Bibliotheken lassen sich aus Go-Software mit einfachen Mitteln vollständig automatisch ermitteln; der Generator wendet das an und stellt auf Grundlage des eindeutigen Namensschemas für Go-Pakete in Debian die Abhängigkeiten für das Paket in "debian/control" zuverlässig ein – das bedeutet aber natürlich nicht, dass alle benötigten Pakete auch tatsächlich im Archiv zur Verfügung stehen.

Der Generator dh-make-golang ist ein gut gemachtes und zuverlässiges Werkzeug für das Aufsetzen von Debian-Quellpaketen von Go-Software. Das saubere und genormte Distributionssystem bei dieser Programmiersprache spielt dabei die maßgebliche Rolle; es wird von diesem Paketgenerator wie ein Interface angewendet und bringt zuverlässige Ergebnisse, ohne viele Optionen für das CLI-Werkzeug dabei zu benötigen. Außerdem steuern die eindeutigen Normen der Go-Community in Debian ihren Teil dazu bei, dass sich das Paketieren bei dieser Art von Software so erfolgreich automatisieren lässt. Ein Nachteil bei diesem Werkzeug ist die leider nur mangelhafte Dokumentation, und bei verstärktem Einsatz muss immer mal wieder der Quellcode als Ersatz dafür herhalten.

Pypi2deb

Vergleichbar mit dem Generator für Golang-Software ist Pypi2deb [5] (aktuell: 1.20170623), das den Konvertierer "py2-dsp" anbietet, der von einem im offiziellen Python Package Index (PyPI) aufbewahrten Python-Paket ein Debian-Quellpaket erzeugen kann.

Dieses Werkzeug rufen Sie in einem beliebigen Arbeitsverzeichnis auf und es benötigt nur den Namen einer Bibliothek oder Applikation aus dem PyPI wie zum Beispiel "py2dsp jinja2". Handelt es sich um eine Applikation und nicht um ein Modul, dann geben Sie die Option "--application" mit. Das gewünschte Python-Paket wird dann von dem Generator aus dem PyPI heruntergeladen und ausgepackt, die Konfigurationsdateien in "debian/" erzeugt und dann ein Quellpaket erzeugt – die Ergebnisse dieses Vorgangs liegen dann im Arbeitsverzeichnis im Unterordner "result/".

Die generierten Konfigurationsdateien sind ähnlich gut wie bei dh-make-golang: Die benötigten Bauabhängigkeiten wurden vom Generator ermittelt und die Namen der korrespondierenden Debian-Pakete finden sich in "deb/control". Bei einer Bibliothek wie der Template-Engine Jinja sind hier gemäß der Debian-Python-Policy zwei Binärpakete für die Python2- und die Python3-Laufzeitumgebung eingetragen, die in Debian getrennt voneinander zur Verfügung stehen.

Die Debhelper-Erweiterungen für Python-Software "dh_python2", "dh_python3" und "pybuild" sind für den Sequencer-Aufruf in "debian/rules" eingestellt und das dafür benötigte Paket "dh-python" findet sich mit unter den Bauabhängkeiten in "debian/control". Außerdem gibt eine funktionierende "watch"-Datei.

Eine Stärke von "py2dsp" ist, dass eine im Projekt vorhandene Sphinx-Dokumentation vom Generator automatisch integriert wird: in "debian/control" wird ein zusätzliches "-doc"-Binärpaket dafür eingetragen, die Dokumentation wird in "debian/rules" mit einem Override für "dh_auto_build_indep" und dem Werkzeug "sphinx-build" gebaut, das Debhelper-Modul "dh_sphin-xdoc" wird eingesetzt und das für den Bau benötigte Paket "python3-sphinx" steht mit bei den Bauabhängigkeiten.

Dieser nur für Python-Software gedachte Generator für Debian-Pakete ist genauso einfach anzuwenden und liefert gute Ergebnisse, sodass Sie damit für ein Binärpaket von einem beliebigen Python-Softwareprojekt (die nur in Ausnahmefällen nicht im PyPI zu finden sind) in der überwiegenden Zahl der Fälle tatsächlich nur einen Knopfdruck benötigen. Dieses Werkzeug stellt eine ganze Bandbreite von Standards und bewährten Praktiken der beiden Python-Gruppen in Debian auch für gelegentliche Paketbau-Arbeiten zur Verfügung.

Fazit

Admins können mit Hilfe der hier vorgestellten Tools aus Quellcode-Archiven verwaltbare Debian-Softwarepakete erzeugen, auch ohne Debian-Entwickler zu werden. Während sich einige Programme darauf spezialisieren, Pakete zu bauen, die in einer bestimmten Programmiersprache abgefasst sind, geben sich andere weniger wählerisch und können als Allzweckwaffe dienen.

Autor: von Daniel Stender /of

[1] Sauber eingepackt: Debian-Pakete bauen, IT-Administrator 05/2016
H4P51

[2] Checkinstall
I1Z22

[3] dh_make
I1Z23

[4] Debmake
I1Z24

[5] dh-make-golang
I1Z25

[6] Pypi2deb
I1Z26

Link-Codes

Aus IT-Administrator Magazin Ausgabe 01/2018: Softwareverteilung & Patchmanagement Seite 86-89

Ähnliche Beiträge

Implementierung von GenAI-Tools

Der entscheidende nächste Schritt beim KI-Einsatz: die Implementierung generativer KI. Sie kann durch Prozessautomatisierung und -optimierung die Effizienz und Produktivität steigern. Wir beleuchten online, wie Unternehmen durch GenAI ihre Prozesse beschleunigen und dabei Zeiteinsparungen erzielen. Mit einem Fokus auf technische Details, praktischen Anwendungsfällen und einer GenAI-Roadmap mit konkreten Handlungsschritten zeigen wir, wie sich generative KI im Unternehmen integrieren lässt.

Role Based Access Control im Windows Admin Center (1)

Nachdem Microsoft das Windows Admin Center stetig weiterentwickelt hat, zeigen sich Unternehmen verschiedener Größen interessiert an der universellen Verwaltungsplattform für Server. Mit steigender Zahl der Admins steigt auch der Bedarf nach Delegationsmöglichkeiten und einem Modell der Role Based Access Control. Im ersten Teil des Workshops gehen wir darauf ein, wie bei der rollenbasierten Administration das Tier-Modell von Microsoft helfen kann und was es dabei mit PowerShell JEA auf sich hat.

Netzwerk-Monitoring-Markt im Wandel - Setzen Sie auf einen stabilen Partner!

Fusionen, Übernahmen und steigende Preise sorgen für Unsicherheit bei den Kunden von Netzwerk-Monitoring-Tools. ManageEngine bietet mit der umfassenden IT-Monitoring-Plattform OpManager Plus eine stabile Alternative durch Inhouse-Entwicklung, flexible Bereitstellungsmodelle und transparente Preise.