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 |
---|---|
|
Dies ist der Standardmodus, der für fast alle Pakete eine Sinnvolle Basis darstellt. |
|
Der Modus ist für neue IServ-App-Module vorgesehen, die direkt mit der
|
|
Der Modus ist für alte IServ 3 Module vorgesehen, die auf Symfony basieren. |
|
Diese Modi ist für Softwarepakete vorgesehen, |
|
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 |
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:
|
Eine Liste mit den zu installiernden Paketen |
|
Kann |
|
Werden auf den Namen des Sourcepakets gesetzt, bei |
|
Enthält den Namen des Hauptpakets. Dies ist immer das erste Paket in der |
|
Enthält den Pfad zu dem Ordner an dem sich die zu installierenden Dateien befinden. |
|
Enthalten den Pfad zu dem Ordner, in welchem sich der |
|
Enthält das Zielverzeichnis. Bei einer Entwicklungsinstallation ist dies standardmäßig |
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.