3. Überblick über ein eisfair Paket

3.1. Grundsätzliche Konventionen

3.1.1. Auswahl des Paketnamens

Der erste Schritt bei der Paketerstellung ist die Wahl des richtigen Paketnamens. Der Paketname wird an sehr vielen Stellen verwendet. Er ist zum Beispiel Bestandteil jeder Konfigurationsvariable eines Pakets und auch Teil des Namens vieler im Paket befindlicher Dateien.

Es empfiehlt sich daher, einen kurzen Namen für das Paket zu wählen. Es versteht sich von selbst, dass „dhcpd“ dem Namen „dynamic_host_configuration_protocol_daemon“ vorzuziehen ist. Dem Anwender wird an den meisten Stellen sowieso nicht der Paketname, sondern ein anderer Text angezeigt.

Generell verboten ist die Aufnahme der Versionsnummer in den Paketnamen. Ein Paket darf also nicht „foo_1.1.2“ heißen, sondern muss den Namen „foo“ bekommen.

Als Zeichen des Paketnamens sind ausschließlich Kleinbuchstaben, Zahlen, der Bindestrich „-“ („Dash“) und der Unterstrich „_“ („Underscore“) zulässig.

Zudem sollte das Paket nicht den Namen eines anderen Pakets als Präfix getrennt mittels eines Bindestrichs „-“ enthalten. Dies kann zu Problemen mit manchen Deinstallationsroutinen führen. Aus diesem Grund sollte generell auf die Verwendung des Bindestrichs „-“ im Paketnamen verzichtet und als Alternative besser der Unterstrich „_“ verwendet werden.

Eine der wenigen Ausnahmen davon sind Treiberpakete („scsi-buslogic“), Entwicklerbibliotheken („glibc-dev“) und Bibliotheken („liblcms2“).

3.1.2. Dateinamen, Variablennamen

Viele Dateinamen, Verzeichnisnamen und Variablennamen leiten sich vom Paketnamen ab. Im Paket foo gibt es also eine Reihe Dateien, die den Paketnamen foo als Namensbestandteil haben. Beispiele dafür sind die Dateien /etc/check.d/foo.ext und /var/install/config.d/foo-update.sh sowie die Variablen START_FOO und FOO_BAR.

Dateinamen werden dabei immer in Kleinbuchstaben geschrieben, Variablennamen in der Konfigurationsdatei immer in Großbuchstaben.

Im folgenden ist der Paketname immer als $package angegeben. Ist zum Beispiel eine Datei /usr/lib/$package/$package-action.sh angegeben, entspricht das im Paket „foo“ der Datei /usr/lib/foo/foo-action.sh, eine Variable START_FOO wird als START_$PACKAGE geschrieben.

3.2. Bestandteile eines Pakets

Ein Installationspaket für eisfair ist im wesentlichen ein mit „gzip“ oder „bzip2“ komprimiertes Tar-Archiv, in dem neben den eigentlichen Dateien des Paketes noch einige weitere Informationen und Skripte enthalten sein müssen.

Das Paket selbst spiegelt den Dateibaum ab dem root-Verzeichnis, also „/“ wieder. Eine zu installierende Datei /usr/bin/foo muss also im Tar-Archiv als usr/bin/foo (ohne absoluten Pfad, also relativ!) abgespeichert sein.

Datei

Beschreibung

/etc/check.d/$package

Die Konfiguration muss mittels eischk auf Gültigkeit geprüft werden.

/etc/check.d/$package.exp

Paketspezifische Wertdefinitionen für eischk.

/etc/check.d/$package.ext

Individuelle Prüfungen für eischk.

/etc/config.d/$package

Die aktuelle Konfiguration ist die wichtigste Datei der eisfair-Konfigurationsschicht. Diese Datei wird nicht im Paket mitgeliefert, sondern während der Installation angelegt.

/etc/backup.d/$package*

Advanced Configuration File Handling legt Backups der Konfiguration an. Diese Dateien dürfen nicht mit dem Paket ausgeliefert werden.

/etc/default.d/$package

Die Default-Konfiguration ist für das Advanced Configuration File Handling zwingend notwendig und muss jedem Paket beiliegen.

/etc/filelist.d/$package-files.txt

Liste aller Dateien des Paketes mit den entsprechenden Zugriffsrechten.

/etc/init.d/$package

Mittels des Init-Scripts wird das Paket gesteuert (z.B. Start, Stop).

/etc/rc2.d/Sxx$package

Start des Pakets beim Systemstart.

/etc/rc2.d/Kxx$package

Beenden des Pakets beim Shutdown.

/tmp/install.sh

Mittels install.sh wird die Installation eines Pakets durchgeführt.

/tmp/preinstall.sh

das Skript preinstall.sh dient zur Vorbereitung der Installation eines Pakets.

/usr/share/doc/$package/$package.txt

Eine Dokumentation ist jedem Paket mitzuliefern.

/usr/share/doc/$package/changes.txt

In den Release Notes/Changelog wird die Historie der Änderungen an einem Paket gepflegt.

/var/install/bin/$package-action

Diverse paketspezifische Verwaltungsscripts.

/var/install/config.d/$package.sh

Das Apply-Script dient zur Verarbeitung einer neuen Konfiguration

/var/install/config.d/$package-update.sh

Update-Script zum übernehmen einer Paketkonfiguration beim Update eines Pakets.

/var/install/deinstall/$package

Über die Deinstallationsroutine kann ein Paket wieder deinstalliert werden.

/var/install/help/$package

In der Hilfedatei werden die einzelnen Konfigurationsvariablen näher beschrieben.

/var/install/menu/setup.services.$package.menu

Hier wird die Menüstruktur für das eisfair Setup-Menü definiert.

/var/install/packages/$package

In der Paket-Info-Datei werden die grundlegenden Daten zu einem Paket angegeben.


Die einzelnen Bestandteile werden in den entsprechenden Kapiteln dieser Entwicklerdokumentation näher erklärt.

Explizit nicht in ein eisfair-Paket dürfen:

  • info und man Dateien unter /usr/info bzw. /usr/man

  • locale Dateien unter /usr/share/locale ausgenommen sind de|en|fr

  • eine eigene GLibC

  • Bibliotheken

Nur in Ausnahmefällen und nach vorheriger Abstimmung mit dem eisfair-Entwicklerteam dürfen in ein Paket:

  • ein eigener Kernel (nur wenn unumgänglich)

  • Kernel-Module (bitte nachfragen, ob diese nicht besser in das offizielle Kernelpaket mit aufgenommen werden können)

Um Probleme mit den Benutzerrechten (zum Beispiel Dateien, die einem User mit der ID 501 gehören, der auf dem eisfair-Server gar nicht existiert) zu verhindern, empfiehlt es sich, Packages mit

tar -czv --owner=root --group=root -f package.tar.gz *

zu verpacken. Damit gehören die entpackten Dateien zunächst dem Superuser root. Dieser Zustand kann, sofern gewünscht, im Installationsskript /tmp/install.sh geändert werden.