Paketierung#

Die verschiedenen IServ-Module sind als Debian-Pakete gebaut, damit alle Vorteile der Paketverwaltung genutzt werden können.

Für das Bauen der Pakete wird auf die normalen Debian-Pakethelper, auch debhelper genannt zurückgegriffen. Jedoch wird ein auf der Dh-Bibliothek aufsetzendes Programm iservinstall für sehr viele Aufgaben verwendet. Dies ist im Paket iserv-buildtools enthalten.

Beim Bauen von bereits existierenden Paketen ist nichts weiter zu beachten, dpkg-buidpackge, debuild oder andere präferierte Tools funktionieren wie gewohnt.

Debhelper und Entwicklungsinstallation#

In Entwicklungsumgebungen kann durch aufruf von iservinstall direkt eine Entwicklungsinstallation vorgenommen werden. Hierdurch werden die Dateien zwar ins System installiert, jedoch verlinkt mit den Inhalten des Repositories, entweder über Symlinks oder über Hardlinks. Der Vorteil besteht darin, dass Änderungen im git-Repository sich direkt im System wiederspiegeln und man so quasi am lebenden Objekt operieren kann. Bei neu hinzugefügten Dateien ist ein erneuter iservinstall-Aufruf nötig.

Gleichzeitig zur Installation der Dateien ins System wird ein Paket mit Versionsnummer 100 (oder höher wenn nötig) installiert, welchem alle Dateien zugeordnet werden. Hierdurch werden einerseits die Abhängigkeiten sichergestellt als auch Abhängigkeiten auf das Paket in Entwicklung aufgelöst. Wenn die Entwicklungsinstallation entfernt werden soll, kann einfach mittels dpkg -r PAKETNAME das Paket mit allen Dateien entfernt werden. Ebenso ist es möglich mittels z.B. apt install PAKETNAME/testing die aktuelle Version aus den Testing-Repositories zu installieren, stable und unstable gehen ebenso.

Bei dem Produktivbau eines Pakets wird iservinstall über dh_iservinstall als Debhelper aufgerufen. Anstatt die Dateien ins System zu installieren, werden sie letztlich in ein .deb-Paket installiert, sodass sie direkt an Kunden weitergegeben werden kann.

Einbindung ins Paket#

Um iservinstall zu verwenden muss folgendes in die debian/control hinzugefügt werden:

Build-Depends:
  debhelper-compat (=13),
  dh-sequence-iserv,

Eine vorhandene debian/compat-Datei muss gelöscht werden, da dies nun über die Build-Depends erledigt wird.

Debhelper in der Version 13 wird über die IServ-Buster-Quellen ausgeliefert, in Debian Bullseye ist es direkt vorhanden. Durch die Bauabhängigkeit auf dh-sequence-iserv wird der für die normale Installation nötige Debhelper dh_install durch dh_iservinstall ersetzt. Die bisher vorhandene Datei debian/install wird weiter verwendet und es ergeben sich erstmal keine Unterschiede. Die volle Funktionalität wird jedoch erst erreicht, wenn stattdessen die Datei debian/iservinstall genutzt wird.

Die Syntax der iservinstall-Datei ist genauer in der Datei /usr/share/doc/iserv-buildtools/iservinstall.md beschrieben, außerdem sind als Beispiele die Dateien in /usr/share/iserv/buildtools/install hilfreich. Wie fast alle Dateien im debian-Ordner, darf auch die iservinstall-Datei ausführbar sein. Ist dies der Fall, wird die Ausgabe des Aufrufs als Inhalt angesehen.

Wenn aus einem Repository mehrere .deb-Pakete erstellt werden, so ist den Dateien im debian-Ordner jeweils der Paketname anzuhängen. Für das Hauptpaket kann er immer weggelassen werden. Konkret wäre bei einem Hauptpaket mit Namen iserv-foo-bar und einem Unterpaket mit Namen iserv-foo-baz die Datei debian/iservinstall gleichbedeutend mit debian/iserv-foo-bar.iservinstall, jedoch nicht mit debian/iserv-foo-baz.iservinstall.

Diese werden automatisch eingebunden, je nach Modus. Der Modus kann direkt über die debian/iservmode-Datei definiert werden, wenn diese Datei fehlt, wird mittels default eine Heuristik ausgelöst, die versucht den korrekten Modus zu ermitteln. Es ist möglich und meistens sinnvoll mehrere Modi anzugeben, namemtlich basic mit einem weiteren zu kombinieren.

Die verschiedenen Modi sind zur Zeit:

Modus

Beschreibung

basic

Dies ist der Standardmodus, der für fast alle Pakete eine Sinnvolle Basis darstellt.

app

Der Modus ist für neue IServ-App-Module vorgesehen, die direkt mit der Portal-Web-Schnittstelle interagieren.

legacy

Der Modus ist für alte IServ 3 Module vorgesehen, die auf Symfony basieren.

winst und winst-data

Diese Modi ist für Softwarepakete vorgesehen, winst für das Hauptpaket und winst-data für ein oder mehrere Datenpakete.

-mult

Dies ist kein eigener Modus, sondern ein Modifier für jeden anderen Modus, der dazu führt, dass die Regeln nicht auf das Hauptverzeichnis angewendet werden, sondern auf ein Unterverzeichnis mit dem kurzen Paketnamen. Im Fall von Backup 2 wird der Modus basic-mult in der Datei debian/iserv-backup2-client.iservmode gesetzt, sodass für das Paket alle Dateien im Ordner backup2-client gesucht werden.

Hooks#

Sowohl bei der Paketerstellung als auch bei einer Entwicklungsinstallation werden alle Dateien in den Hookordnern ausgeführt. Hookordner sind debian/iservhooks/preinstall.d und debian/iservhooks/postinstall.d, sowie /usr/lib/iserv/buildtools/hooks/preinstall.d und /usr/lib/iserv/buildtools/hooks/postinstall.d. Erstere sind meistens nicht vorhanden und dazu gedacht an einzelnen Paketen den Buildprozess zu modifizieren ohne über die debian/rules zu gehen.

Es werden zuerst die lokalen Hooks ausgeführt, danach die globalen. Die Reihenfolge wird anhand von sort aus Perl bestimmt. Die verschiedenen Hookdateien sollen jeweils mit einer zweistelligen Zahl beginnen, welche die Sortierung bestimmt.

Dateien mit einer Nummer ab 50 sollen nicht von gesetzte Umgebungsvariablen mit Paketnamen abhängen, da sie für die allgemeine Nachbehandlung verschiedner sequentieller Installationen genutzt werden.

Umgebungsvariablen#

iservinstall wertet verschiedene Umgebungsvariablen aus. Die wichtigsten sind DH_QUIET und DH_VERBOSE. Ersteres reduziert die Ausgabe auf ein Minimum, letzteres eignet sich sehr gut zur Fehlerbehebung. Beispielsweise mittels des Aufrufs DH_VERBOSE=1 iservinstall wird von allem Komponenten sehr viel mehr ausgegeben.

Desweiteren versucht iservinstall bei Entwicklungsinstallation Locks von der Paketverwaltung zu bekommen. Durch Setzen der Variablen DPKG_FRONTEND_LOCKED, APT_ARCHIVES_LOCKED und APT_LISTS_LOCKED wird dieses Verhalten unterbunden.

Bei den Hooks werden folgende Variablen gesetzt:

ISERVINSTALL_WANTED_PKG

Eine Liste mit den zu installiernden Paketen

ISERVINSTALL_MODE

Kann dev (Entwicklungsinstallation) oder prod (Paketbau) sein.

SRC, FULLSRC

Werden auf den Namen des Sourcepakets gesetzt, bei SRC wird ein Präfix wie winst- oder iserv- entfernt.

MAINPKG

Enthält den Namen des Hauptpakets. Dies ist immer das erste Paket in der control-Datei.

SRC_DIR

Enthält den Pfad zu dem Ordner an dem sich die zu installierenden Dateien befinden.

DEB_SRC_TREE

Enthalten den Pfad zu dem Ordner, in welchem sich der debian-Ordner befindet. Meist identisch mit SRC_DIR.

TARGET_DIR

Enthält das Zielverzeichnis. Bei einer Entwicklungsinstallation ist dies standardmäßig /, bei Paketbau debian/tmp.

Manuelle Installation#

Wenn iserv-buildtools direkt aus dem git-repository installiert werden soll, ohne dass es vorher über die Paketverwaltung installiert wurde, muss in dem Repository direkt bin/iservinstall zweimal aufgerufen werden.

Beim ersten Aufruf können nicht alle hooks durchlaufen, da sie erst in dem Aufruf installiert werden, erst beim zweiten Aufruf klappt dies.