26. Januar 2020

Debian-Pakete selbst erstellen (auch Ubuntu und Co)

Informationen:

Debian (also auch darauf basierende Linux-Distributionen wie Ubuntu, Linux Mint, Knoppix, Kanotix und so weiter) nutzt eine der perfektesten Paket-Verwaltungen unter Linux, genutzt wird hier APT worunter wieder DPKG werkelt, damit lässt sich Software installieren, deinstallieren und das komplette System aktuell halten. Software, deren Daten und dazu gehörige Bibliotheken befinden sich in Dateien mit der Endung “.deb“.

Selbst solche Pakete zu erstellen um etwa ein Script für einen Bekannten der sich mit Linux nicht so richtig auskennt an die richtige Stelle im System zu bringen ist ganz einfach, man steckt das Script in ein DEB-Paket, dieser braucht es nur noch zu installieren.

In diesem Beitrag der Linux Bibel werden wir nun lernen wie wir ganz einfache Debian-Pakete erstellen, etwas erweiterte für selbst kompilierte Software und professionelle Debian-Pakete.

Benötigte Software

Um Debian-Pakete selbst zu erstellen sollte man sich unter auf Debian basierenden Systemen wie Ubuntu, Kubuntu, Linux Mint und so weiter folgende Pakete über die Paket-Verwaltung installieren: “dpkg-dev fakeroot lintian build-essential debhelper dh-make quilt dh-make

Einfache Debian-Pakete

Einfache Debian-Pakete eignen sich etwa für Scripte und ausführbare Dateien, nehmen wir einmal an ich schreibe für einen Bekannten ein Script das diesem bei irgendeiner Aufgabe helfen soll, damit dieses aus jedem Verzeichnis heraus auf dem Terminal aufgerufen werden kann sollte es im System etwa unter “/bin” oder “/usr/bin” liegen, der Nutzer hat jedoch recht wenig Erfahrung mit solchen Dingen und weiß nicht wie er dieses am einfachsten dort hin bekommt – ohne lange Erklärungen wäre nichts einfacher als das Script in ein Debian-Paket zu legen, er braucht dieses nur noch zu installieren, den Rest erledigt die Paket-Verwaltung.

In diesem Beispiel werde ich mich nicht lange mit dem Script aufhalten, nehmen wir einmal an ich habe das Scriptimageconvert” geschrieben und möchte dieses in ein Debian-Paket mit der Bezeichnung “imageconvert” schieben, als Abhängigkeit benötigt das Script die Software “imagemagick” das sich regulär in den Repositorys befindet, das Script soll sich nach der Installation im Verzeichnis “/usr/bin” befinden.

Als erstes erstelle ich nun ganz einfach in meinem Home-Verzeichnis das Verzeichnis “imageconvert“, man kann wenn gewünscht hier auch die Version hinzu fügen, so wie man das Verzeichnis nennt wird sich später auch das Debian-Paket nennen. In diesem Verzeichnis lege ich nun die nötige Verzeichnis-Struktur an, das Script soll unter “/usr/bin” liegen, also lege ich die Unterverzeichnisse dem entsprechend an, an der richtige Stelle wird nun auch unser Script gespeichert:

Debian-Pakete selbst erstellen – Verzeichnis-Struktur

Das Script (die ausführbare Datei, Appimage oder was auch immer) muss ausführbar sein, dies erledigt man als Administrator am schnellsten am Terminal:

chmod a+x Downloads/imageconvert/usr/bin/imageconvert

Was wir für unser einfaches Debian-Paket noch benötigen ist das Verzeichnis “DEBIAN” und die darin liegende Datei “control“:

Debian-Pakete selbst erstellen – Verzeichnis-Struktur

Diese Datei befüllen wir nun grundlegend mit folgenden Zeilen:

Package:
Version:
Section:
Priority:
Architecture:
Recommends:
Installed-Size:
Maintainer:
Depends:
Suggests:
Provides:
Description:

Unter “Package:” geben wir den Namen des Paketes an, unter “Version:” die Version, mit “Section:” den Bereich in der Paket-Verwaltung (also etwa games), durch “Priority:” die Wichtigkeit, mit “Architecture:” die Prozessor-Architektur und so weiter (siehe nach folgende Tabelle), im Beispiel:

Package: imageconvert
Version: 1.0
Section: graphics
Priority: extra
Architecture: all
Recommends: 
Installed-Size:
Maintainer: Robert Gödl <robert.goedl76@gmail.com>
Depends: imagemagick, bash
Suggests:
Provides:
Description: Eine kurze Beschreibung des Paketes mit maximal 60 Zeichen
 Diese Software konvertiert Bilder auf dem Terminal mit Hilfe von Imagemagick

Man muss nicht alles ausfüllen, wichtig sind jedoch die “Depends” – dies sind die Abhängigkeiten, also Software die zusätzlich installiert sein muss.

BereichBeschreibung
SectionDer Bereich in dem das Paket in der Debian-Paket-Struktur erscheint, etwa kde, graphics, …
PriorityDie Wichtigkeit, kann auf das Paket verzichtet werden ohne das das System nicht mehr funktioniert (extra, required, important, standard, optional)
MaintainerDer Name des Paket-Erstellers und seine E-Mail-Adresse
Build-DependsPakete die benötigt werden wenn es etwas zu kompilieren gilt
ArchitectureDie Prozessor-Architektur, all für alle, any für alle wenn etwas kompiliert werden muss
DependsPakete die unbedingt installiert werden müssen, hier angegebene werden automatisch installiert, mehrere werden durch einen Beistrich mit Leerzeichen getrennt
DescriptionEine kurze Beschreibung des Paketes mit maximal 60 Zeichen, in der nächsten Zeile lässt man ein Leerzeichen und beginnt dann mit der ausführlichen Beschreibung
ConflictsPakete die deinstalliert werden müssen damit die Software funktioniert
ReplacesPakete die durch dieses Paket ersetzt werden
RecommendsZusätzliche empfohlene Pakete
SuggestsWeitere hilfreiche Pakete
ProvidesFalls es sich um ein Meta-Paket handelt dessen Name
SourceFalls es sich um ein Quellcode-Paket handelt dessen Name
Installed-SizeDie Größe des Paketes auf der Festplatte in Kilobyte

Hat man dies nun erledigt startet man die Erstellung des Paketes als normaler Nutzer auf dem Terminal mit der Syntax:

fakeroot dpkg -b Verzeichnis/

In meinem Beispiel also:

fakeroot dpkg -b imageconvert/

Im übergeordneten Verzeichnis liegt nun das erstellte Debian-Paket:

Debian-Pakete selbst erstellen – Fertiges Paket

Dieses lässt sich nun wie gewohnt über die Paket-Verwaltung installieren und restlos wieder entfernen, angegebene Abhängigkeiten werden vom System automatisch installiert.

Etwas mehr Qualität

Das so erstellte Paket kann man nun auf jedem auf Debian basierenden System installieren und die darin enthaltene Software nutzen sowie wieder deinstallieren. Will man jedoch sein Paket etwa auch im Internet als reguläre Software verbreiten sollte man auf etwas mehr achten. Debian-Pakete haben einen gewissen Standard zu besitzen, ob ein Paket dem Standard von Debian entspricht nutzt man nun die Software Lintian, die Syntax lautet:

lintina -i Paket_Name.deb

In meinem Beispiel also:

lintian -i imageconvert.deb
Debian-Pakete selbst erstellen – Debian-Kompatibilität prüfen

Die Software bemängelt nun alle Fehler oder fehlenden Bestandteile im erstellten Paket die es zu beheben gilt. Besonders wichtig ist die Copyright-Datei, diese beinhaltet Informationen zur Lizenz, dazu erstellt man sich die neuen Unterverzeichnisse “/usr/share/doc” und legt darin die Datei “copyright” ab:

Debian-Pakete selbst erstellen – Copyright-Datei

Absolut wichtig ist es hier die Lizenz der Software anzugeben und nicht die Lizenz des Paket-Erstellers, in meinem Beispiel enthält diese Datei dann einfach:

Copyright 2020 by Robert Josef Gödl, https://linux-bibel-oesterreich.at 

Weiter geht es dann mit dem Changelog, also mit den seit der letzten Version geänderten Details. In meinem Fall ist es die erste Version, also würde etwa einfach:

imageconvert (1.0.0) stable 
 * Initial release

genügen, auch diese Datei liegt im selben Verzeichnis wie die Lizenz-Datei (nicht vorhandene Verzeichnisse werden bei der Installation des Paketes automatisch angelegt), die Datei “changelog” muss Gzip-komprimiert sein, in meinem Fall also:

gzip imageconvert/usr/share/doc/imageconvert/changelog

Lintian zeigt Probleme in der Qualität in rot (schwerwiegend) und orange (nicht problematisch) an, rote gilt es unbedingt zu beheben.

Erweiterte Pakete

So lange es sich nur um Terminal-Software handelt muss man nicht weiter gehen als oben beschrieben, interessant wird es natürlich bei grafischer Software, hier wäre ein Eintrag im Menü interessant. Dazu erstellt man sich ganz einfach die weiteren Verzeichnisse und Dateien, ein Icon wäre passend – dieses kann im PNG-Format vor liegen, optimal ist jedoch XPM mit 32×32 Pixel und 24 Farben. In meinem Beispiel werde ich jetzt nicht lange fackeln und einfach das oben beschriebene fiktive imageconvert weiter nutzen und sagen es handelt sich um eine grafische Software.

Ein passender Ort für Icons wäre das Verzeichnis “/usr/share/pixmaps“, als Beispiel habe ich hier die Datei “icon.xpm“, ich passe also die Verzeichnis-Struktur an und speichere die Datei darin:

Debian-Pakete selbst erstellen – Icons für das Menü

Nun brauchen wir nur noch die Steuer-Datei für den Eintrag in das Menü, der richtige Ort für die Datei ist “/usr/share/applications” und die Datei-Endung “.desktop“, in meinem Fall nenne ich diese nun “imageconvert.desktop“:

[Desktop Entry]
Version=1.0
Type=Application
Name=Imageconvert
GenericName=Imageconvert
Comment=Konvertieren von Bildern
Icon=/usr/share/pixmaps/icon.xpm
Keywords=bilder;konvertieren;fotos;umwandeln
Categories=Graphics
Exec=/usr/bin/imageconvert
TryExec=/usr/bin/imageconvert
StartupNotify=true
Terminal=false

Womit wir nun bei folgender Verzeichnis-Struktur wären:

Debian-Pakete selbst erstellen – Menü-Eintrag

Professionelle Debian-Pakete

Wird in Kürze erweitert

214 total views, 2 views today

Creative Commons License Attribution-NonCommercial-ShareAlikeRepublish
Avatar

Robert Goedl

Linux-User seit dem Jahr 2000, Debian ist die von mir genutzte Distribution (Sid Unstable) Lebe in Graz, der Hauptstadt der Steiermark in Österreich

Alle Beiträge ansehen von Robert Goedl →

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

×

Weitergabe und Weiterverbreitung

Sie möchten Inhalt der Linux Bibel auf Ihrer Webseite weiter verbreiten oder in anderer Hinsicht veröffentlichen - dies ist möglich, es gilt jedoch die bestehende Lizenz der Inhalte der Linux Bibel zu beachten.

Sie haben weitere Fragen robert.goedl76@gmail.com

License

Creative Commons License Attribution-NonCommercial-ShareAlikeCreative Commons Attribution-NonCommercial-ShareAlike
Debian-Pakete selbst erstellen (auch Ubuntu und Co)