Erstellen eines Debian-Paketes

Jeder der sich ein bisschen mit Linux bzw. eigentlich genauer Debian oder Ubuntu beschäftigt hat, ist wahrscheinlich schon einmal auf sogenannte Debian Pakete gestoßen (mit der Endung .deb). Diese Pakete erleichtern einem die Installation und das Deinstallieren von Programmen enorm, da man nur mehr das Paket ausführen muss, und der Rest automatisch erledigt wird. Ein weiterer großer Vorteil ist, dass die so installierten Pakete beim Paketmanager "registriert" werden, und man über diesen somit auch das Programm wieder deinstallieren kann.

Unser Ziel

Wir gehen von einem einfachen Skript aus, das nur "hello world!" auf der Konsole ausgibt und dann kurz wartet, damit wir auch was sehen. Wir wollen es dann in ein Deb-Paket packen, das nicht nur das Skript installiert, sondern auch noch einen Menüeintrag mit einem schönen Logo erstellt. Selbstverständlich soll alles bei einer Deinstallation wieder restlos gelöscht werden.

Hier ist das benutzte Skript:

#!/bin/bash

echo "hello world!"
sleep 10

Einrichten der Ordnerstruktur

Zuerst erstellen wir uns ein Verzeichnis in dem wir alle benötigten Dateien und Ordner erstellen werden. Im Tutorial werden wir "helloworld" als Namen nehmen, aber selbstverständlich sollte man für richtige Pakete einen besseren Namen nehmen.

Um Missverständnissen vorzubeugen ist hier gleich einmal die fertige Ordnerstruktur.

helloworld
\
 |usr
 |  \
 |  share
 |    \
 |    helloworld
 |      \
 |      helloworld.sh
 \  
 DEBIAN
    \
    control

Benötigte Dateien und Ordner

Jetzt erstellen wir in unserem neuen Ordner einfach die Ordnerstruktur, so wie sie nach der Installation ausschauen soll. Wir haben nur unser Skript, das nach "/usr/share/helloworld/helloworld.sh" installiert werden soll. Damit das auch passiert, erstellen wir in unserem Verzeichnis einfach den gewünschten Verzeichnisbaum von / aufwärts. Und überall, wo wir die Dateien sehen wollen, müssen wir sie nur hineinkopieren. Nachdem wir die Ordner erstellt haben kopieren wir noch unser Skript nach ./usr/share/helloworld/helloworld.sh.

Skript ausführbar machen

Sollte das Skript noch nicht ausführbar sein, sollten wir das jetzt machen:

chmod a+x /usr/share/helloworld/helloworld.sh

Die Steuerung der Erstellung

Danach erstellen wir in unserem Verzeichnis noch einen Ordner "DEBIAN". In diesen Ordner kommen alle Dateien hinein, die zur Steuerung bei der Erstellung des Debian-Pakets dienen.

Die 'control' Datei

Im Ordner "DEBIAN" müssen wir zumindest eine Datei mit dem Namen "control" erstellen, in der wir die wichtigsten Informationen zu unserem Paket angeben. Weiters können wir hier auch angeben von welchen Paketen unseres abhängig ist, so dass der Paketmanager diese gleich mitinstallieren kann.

Unsere "control" Datei sollte in etwa so ausschauen:

Package: helloworld
Version: 0.0.1-0
Section: misc
Priority: extra
Architecture: all
Depends:
Installed-Size: 8
Maintainer: Andreas Günther <info@linuxmaker.com>
Homepage: www.linuxmaker.com
Description: Ein einfaches "hello world" Skript

FeldnameBeschreibung
PackageDer Name den das Paket haben soll. Er sollte möglichst noch nicht in Verwendung sein, da man über ihn auch das Paket im Paketmanager installieren kann. Weiters darf er auch keine Whitespaces (Leerzeichen etc.) oder Sonderzeichen enthalten.
VersionDie Version des Pakets. Über die Version kann der Paketmanager auch erkennen ob eine eventuell schon installierte Version des Programmes neuer ist als die im Paket.
SectionGibt die Sektion an, zu der das Paket gehört. Zuerst geben wir die Kategorie 'main', 'contrib' oder 'non-free' gefolgt von einem Slash ('/') an. Wenn das Paket in die Kategorie 'main', dh. mit einer Open Source Lizenz lizenziert ist, dann können wir die Kategorie auch weglassen, da dann automatisch 'main' angenommen wird.
 Anschließen müssen wir noch die Sektion angeben, bei der es sehr viele Möglichkeiten gibt. Einige Beispiele sind 'admin', 'devel' (development), 'doc', 'editors', 'games', 'graphics', 'math', 'misc', 'science' oder 'utils'.
PriorityHier geben wir an wie wichtig unser Paket für ein System bzw. seinen Anwender ist. Normalerweise werden wir hier 'extra' angeben.
ArchitectureGibt die Prozessorarchitektur an, auf denen dieses Programm/Skript lauffähig ist. Mögliche Werte sind 'i386' für die meisten Heimcomputer die mit 32 Bit laufen, 'amd64' für 64-Bit Heimcomputer und 'all' für alle Computer (zb. für viele Skripte). Es gibt zwar auch noch andere Möglichkeiten, die aber nicht so relevant sind.
DependsAbhängigkeiten, dh. Programme bzw. eigentlich Pakete die unser Programm/Skript zur Ausführung unbedingt braucht können wir hier angeben. Wir brauchen nur die Paketnamen getrennt durch Komma und Leerzeichen an geben.
Installed-SizeWie der Name schon sagt geben wir hier die Größe unseres installierten Paketes an. Die Angabe erfolgt in KB, MB etc.
MaintainerHier geben wir den bzw. die Namen der Programmierer/Ersteller des Pakets/Programms an. Meistens wird hier auch eine E-Mail-Adresse angegeben.
HomepageDieser Punkt sollte wohl selbsterklärend sein.
DescriptionIn der gleichen Zeile wie "Description" eine kurze Beschreibung des Pakets und anschließend in der nächsten Zeile eingerückt die ausführliche Beschreibung.

Generierung des Deb-Paketes

Zur Paketgenerierung gehen wir in das Verzeichnis über unserem Paket-Wurzel-Verzeichnis "helloworld" folgendes ein:

dpkg -b ./helloworld helloworld.deb

Anschliessend kann das Paket über den Paketmanager dpkg, apt-get oder aptitude installiert werden.