Content
Dateianzeige für eisman (3.4.4)
usr/share/doc/eisman/eisman.txtINHALT
======
1 eisman - Paketmanager fuer eisfair
2 Anwenderschnittstelle
2.1 Uebersicht der Kommandozeilenbefehle
2.2 eisman help
2.3 eisman init
2.4 eisman update
2.5 eisman upgrade
2.6 eisman install
2.7 eisman uninstall
2.8 eisman query
2.9 eisman search
2.10 eisman sections
2.11 eisman check
2.12 eisman usage
2.13 eisman unlock
2.14 eisman stats
2.15 eisman localdir
2.16 eisman clearcache
2.17 eisman flushurl
2.18 eisman run
2.19 eisman checklock
2.20 eisman repair
2.21 eisman mirror
2.22 eisman version
3 Interne Struktur: Verzeichnisse und Dateien
3.1 Verzeichnis /usr/bin
3.2 Verzeichnis /usr/share/eisman
3.3 Verzeichnis /var/install/include
3.4 Verzeichnis /var/lib/eisman
3.5 Verzeichnis /var/lib/eisman/info
3.6 Verzeichnis /var/lib/eisman/cache
4 Interne Struktur: eisman Datenbanken
4.1 Das Record-Format
4.1.1 Der Index-Bereich
4.1.2 Feldnamen
4.1.3 Separator
4.2 Konvertierung in das Record-Format
4.2.1 Zeichensatzkodierung
4.2.2 Zeilenkommentare
4.2.3 Felder einlesen
4.2.4 Paketverlinkung
4.2.5 Umbenennungen
4.3 Datenbankformat
5 Interne Struktur: Aufrufhierarchie
5.1 Aufrufhierarchie und Kapselung
5.2 Die "run"-Schnittstelle
1 eisman - Paketmanager fuer eisfair
====================================
eisman ist eine Neuimplementierung eines Paketmanagers fuer eisfair.
Das Paket hat zum Ziel, moeglichst weitgehend die bisherige Funktion
des Paketmanagers abzudecken und zugleich neue Konzepte einzufuehren,
wie sie von anderen Paketmanagern her bereits bekannt sind.
Der Paketmanager ist in das eisfair-Menue integriert worden und sollte
sich weitgehend so bedienen lassen, wie das von der bisherigen Loesung
bereits bekannt ist. Allerdings bietet eisman auch fuer die Kommando-
zeile ein Benutzer-Interface an, das dem Anwender Zugang zu weiterfueh-
renden Funktionen erlaubt.
Im Folgenden findet sich eine Dokumentation der Software sowohl aus
Anwendersicht als auch aus Entwicklersicht.
2 Anwenderschnittstelle
=======================
2.1 Uebersicht der Kommandozeilenbefehle
---------------------------------------
Der Aufruf von eisman erfolgt immer ueber das Programm "eisman", dem ein
Kommando und u.U. eine Reihe weiterer Kommandospezifischer Argumente
mitgegeben werden. Beispiel:
eis # eisman init
Die folgenden eisman Kommandos sind verfuegbar:
help : Zeige eine Uebersicht ueber alle verfuegbaren Befehle.
init : eisman Installation einrichten und die Datenbank der
installierten Pakete aus den unter /var/install/packages
gespeicherten Informationen generieren.
update : Lokale Datenbank der verfuegbaren Pakete aus den Paket-
quellen neu generieren.
install : Ein oder mehrere Pakete installieren bzw. aktualisieren.
uninstall : Ein Paket (ggf. rekursiv) deinstallieren.
query : Paketdatenbanken abfragen.
search : In den Paketdatenbanken nach Paketen anhand von Schluessel-
worten suchen.
sections : Die Liste der Verfuegbaren Paketrubriken abrufen.
check : Den Installationsstatus eines Paketes abfragen.
upgrade : Nach neuen Paketversionen suchen und Updates installieren.
usage : Alle Pakete suchen, die ein bestimmtes Paket erfordern.
unlock : Verriegelung des Paketmanagers aufheben.
stats : Statistische Informationen zur lokalen Installation ab-
rufen.
localdir : Alle Pakete unterhalb eines angegebenen Verzeichnisses
zur Datenbank der verfuegbaren Pakete hinzufuegen.
flushurl : Pakete eine gegebenen URL aus der Datenbank der verfueg-
baren Pakete entfernen.
run : Erweiterungsskript exklusiv ueber eisman ausfuehren
checklock : Pruefen ob laufende Instanz von eisman die Zugriffssperre
besitzt. Lediglich aus einem Erweiterungsskript heraus
sinnvoll.
version : Aktuelle Version des Paketmanagers ausgeben.
2.2 eisman help
---------------
Der Befehl listet eine Uebersicht aller eisman-Kommandos auf der Konsole
auf.
Aufruf:
eisman help
2.3 eisman init
---------------
Falls es sich um eine erstmalige Installation von eisman handelt, initi-
alisiert der Befehl die lokale Umgebung und generiert die Datenbank der
installierten Pakete. Falls es sich um ein Update des Paketemanagers
handelt, wird geprueft, ob das Layout der vorliegenden Paketdatenbanken
mit der neuen Version kompatibel ist. Im Bedarfsfall werden die Daten-
banken automatisch konvertiert.
Der Befehl muss nach einer Neuinstallation bzw. nach einem Update ein-
malig aufgerufen werden.
Aufruf:
eisman init []
Optionen:
--help : Gibt Informationen zum Befehl auf der Konsole aus.
2.4 eisman update
-----------------
Der Befehl dient zur Aktualisierung der Paketquellen. Er muss vor einer
Installation oder eine Suche nach Updates mindestens einmalig aufgerufen
werden. Die eisfair-Umgebung bietet die Moeglichkeit, den Befehl als
cron-Job einzurichten, so dass der manuelle Aufruf in den meisten Faellen
entfallen kann. Falls an der URL-Konfiguration etwas geaendert wurde,
muss der Befehl ebenfalls erneut aufgerufen werden.
Der Vorgang dauert beim ersten Aufruf unter Umstaenden einige Minuten, da
viele Informationen von den Download-Servern gelesen und lokal gespeichert
werden muessen. Bei wiederholten Aufrufen dagegen laeuft der Befehl ver-
gleichsweise schnell durch.
Aufruf:
eisman update []
Optionen:
--help : Gibt Informationen zum Befehl auf der Konsole aus.
--no-progress : Unterdrueckt die Ausgabe der Fortschrittsanzeige.
2.5 eisman upgrade
------------------
Es werden auf der Basis der Datenbank der verfuegbaren Pakete alle an-
stehenden Updates aufgelistet und entsprechend ihrer Reihenfolge auto-
matisch installiert. Soll auf Pakete aktualisiert werden, die den
Status "unstable" tragen, muss dies explizit angegeben werden. Das
ist jedoch nur in Sonderfaellen (z.B. bei der Paketentwicklung) ratsam.
Da die Abarbeitung des Befehls einige Zeit in Anspruch nehmen kann, wird
waehrenddessen auf der Konsole eine Animation angezeigt, die dem Anwender
signalisiert, dass der Vorgang aktiv ist.
Aufruf:
eisman upgrade []
Optionen:
--unstable : Es werden auch Pakete beruecksichtigt, die nicht den
Status "stable" besitzen. Falls ein zu installie-
rendes Paket wiederum ein nicht-"stable" Paket in
seiner Abhaengigkeitsliste hat, kann es auch ohne
die Angabe dieser Option zur Installation von
nicht-"stable"-Paketen kommen.
--no-svn : Es sollen alle Pakete ausgelassen werden, deren
Versionsnummer den Postfix 'svn' enthaelt.
--listonly : Gibt die gefundenen Updates lediglich als Liste
aus, fuehrt jedoch keine Installation durch. Die
Ergebnisliste kann anschliessend z.B. in einem
Paketbrowser zur manuellen Aktualisierung ange-
boten werden.
--no-wait-anim : Unterdrueckt die Anzeige der Animation.
--output= : Leitet die Ausgabe der Paketliste in eine Datei um.
Diese Option ist nur zusammen mit der Option
--listonly von Bedeutung.
--help : Gibt Informationen zum Befehl auf der Konsole aus.
2.6 eisman install
------------------
Der Befehl fuehrt die Installation von einem oder mehreren Paketen aus.
Die Liste der tatsaechlich zu installiedernden Pakete setzt sich dabei
aus den auf der Kommandozeile angegebenen Paketen und den daraus rekursiv
ermittelten weiterfuehrenden Paketabhaengigkeiten zusammen. Diese Liste
wird zunaechst auf der Konsole ausgegeben und nach Bestaetigung des Anwenders
erst vollstaendig heruntergeladen und anschliessend automatisch installiert.
Die Installation der Pakete erfolgt in umgekehrter Reihenfolge der Ab-
haengigkeiten, so dass selbst nach einem Abbruch der Installation das Sys-
tem in einem konsistenten Zustand zurueckbleibt.
Aufruf:
eisman install []
Optionen:
--unstable : Erlaube die Installation von "unstable"-Paketen.
Falls ein zu installierendes Paket wiederum ein
nicht-"stable" Paket in seiner Abhaengigkeitsliste
hat, kann es auch ohne die Angabe dieser Option
zur Installation von nicht-"stable"-Paketen kommen.
--auto : Fuehrt die Aktion ohne weitere Benutzerbestaetigung
aus.
--listonly : Gibt die gefundenen Updates lediglich als Liste
aus, fuehrt jedoch keine Installation durch.
--no-wait-anim : Unterdrueckt die Anzeige der Animation.
--output= : Leitet die Ausgabe der Paketliste in eine Datei um.
--url= : Begrenze die Paketsuche auf eine vorgegebene URL.
Dies hat auf die Suche nach Abhaengigkeiten jedoch
keinen Einfluss. Hier werden generell alle URLs
zugelassen.
--help : Gibt Informationen zum Befehl auf der Konsole aus.
Paketliste:
Die Angabe eines Paketes innerhalb der Paketliste kann in den folgenden
Formen erfolgen:
* Pakete ohne Angabe einer Version:
* Pakete mit Angabe einer Version: =
Paketnamen und Version sind dabei mit dem Zeichen '=' ohne weitere
Leerzeichen zu verbinden.
Bezeichnet = ein unstable-Paket, dann muss die
Installation mit dem Schalter '--unstable' erfolgen. eisman bevorzugt
immer die Installation von stabilen Paketen, solange die Anforderungen
an die Version erfuellt sind.
Beispiele:
Installation des Pakets "mc":
eis # eisman install mc
Installation des Pakets "mc" in der Version 2.6.2:
eis # eisman install mc=2.6.2
Installation mehrerer Pakete:
eis # eisman install libpng-dev libz-dev
2.7 eisman uninstall
--------------------
Hiermit wird ein Paket vom System entfernt. Dabei muss sichergestellt
sein, dass das jeweiligen Pakete nicht von anderen Paketen benoetigt wird.
Anderenfalls bricht die Deinstallation mit einem Fehler ab.
In Ausnahmefaellen (z.B. falls ein Defekt der Paketkonsistenz vorliegt)
kann die Deinstallation eines Pakets mit der Option --force erzwungen
werden. Dies ist jedoch nur mit Vorsicht anzuwenden, da anderenfalls
Fehler in der Datenbank zurueckbleiben. Eine vergleichbare Situation er-
gibt sich im Fall einer Paketaktualisierung. Auch hier muss das Paket
trotz gegebener Abhaengigkeiten deinstalliert werden koennen. Zu diesem
Zweck existiert die Option --update, die jedoch nicht zur manuellen Ver-
wendung bestimmt ist.
Mit dem optionalen Schalter --recursive kann nicht nur ein Paket selbst,
sondern alle Pakete, auf die das Paket als einziges Abhaengigkeiten
besitzt gemeinsam deinstalliert werden. Dabei ist zu beachten, dass ein
Paket, in dessen Paketbeschreibung eine Abhaengigkeit fehlt, unter
Umstaenden nach einer solchen Deinstallation nicht mehr richtig
funktioniert, da ihm dann eine Komponente fehlt. Daher bitte die Liste
der zu deinstallierenden Pakete sichten, bevor die Deinstallation tat-
saechlich durchgefuehrt wird.
Aufruf:
eisman uninstall []
Optionen:
--force : Erzwingt die Deinstallation eines Pakets.
--update : Signalisiert die Deinstallation im Rahmen eines
Updates. Nicht fuer den manuellen Aufruf bestimmt.
--auto : Fuehrt die Aktion ohne weitere Benutzerbestaetigung
aus.
--recursive : Ermittle die Liste freier Pakete rekursiv.
--listonly : Gibt die gefundenen Updates lediglich als Liste
aus, fuehrt jedoch keine Deinstallation durch.
--no-wait-anim : Unterdrueckt die Anzeige der Animation.
--output= : Leitet die Ausgabe der Paketliste in eine Datei um.
--help : Gibt Informationen zum Befehl auf der Konsole aus.
2.8 eisman query
----------------
Der Befehl ist ein vielseitiges Werkzeug zur Abfrage der Paketdatenbanken.
Unter Angabe eines Paketnamens kann nach diesem gesucht werden. Wird kein
Paketnamen angegeben, werden alle Pakete aufgelistet, die den uebrigen
Suchkriterien entsprechen.
Die Ergebnismenge kann durch die Angabe weiterer Suchkriterien begrenzt
werden. So koennen z.B. die Sektionen aufgelistet werden, in denen die Suche
stattfinden soll. Alternativ koennen auch Sektionen gezielt von der Suche
ausgeschlossen oder nach einer URL gefiltert werden.
Standardmaessig werden die Datenfelder "name", "version", "short", "date",
"url" und "status" aufgelistet. Es kann jedoch auch eine davon abweichende
Liste von Datenfeldern angefordert werden (siehe unten).
Normalerweise erfolgt die Abfrage in der Datenbank der verfuegbaren
Befehle. Alternativ kann die Datenbank auch explizit angegeben werden.
Dazu stehen die Optionen "--installed" und "--outdated" zur Verfuegung.
Auch liefert die Abfrage normalerweise nur stabile Pakete zurueck. Sollen
auch Pakete mit unstable-Status angezeigt werden, muss dies mit --unstable
angefordert werden.
Aufruf:
eisman query [] [ [] ]
Optionen:
--excl-sections : Kommaseparierte Liste von Sektionen, die von
der Suche ausgenommen sein sollen.
--sections : Kommaseparierte Liste von Sektionen, in denen
die Abfrage stattfinden soll.
--fields : Kommaseparierte Liste von Feldnamen (siehe
unten).
--unstable : Auch Pakete beruecksichtigen, deren Status
nicht "stable" ist.
--installed : Abfrage in der Datenbank der installierten
Pakete durchfuehren.
--outdated : Abfrage in der Datenbank der veralteten
Pakete durchfuehren.
--output= : Leitet die Ausgabe der Ergebnisliste in eine
Datei um.
--url= : Begrenze die Abfrage auf eine vorgegebene URL.
--help : Gibt Informationen zum Befehl auf der
Konsole aus.
Liste moeglicher Feldnamen:
name : Namen des Pakets
version : Version des Pakets
short : Kurzbeschreibung
date : Datum der Paketerstellung
author : Namen (und E-Mail Adresse) des Paketbetreuers
section : Sektion, zu der das Paket gehoert
space : Erforderlicher Speicherplatz in MB
url : Die URL von der das Paket geladen wird
status : Der Status des Pakets
sha1sum : SHA-1 Hash aus dem Paketarchiv berechnet
sha256sum : SHA-2 Hash aus dem Paketarchiv berechnet
replaces : Pakete, die durch das Paket ersetzt werden
require : Liste der Abhaengigkeiten (ggf. mehrzeiliges Ergebnis)
link : Liste der verknuepften Pakete (ggf. mehrzeiliges Ergebnis)
exclude : Gemeinsame Installation mit anderem Paket verhindern
text : Langbeschreibung des Pakets (ggf. mehrzeiliges Ergebnis)
hint : Hinweis zum Paketverbleib (nur outdated.db)
substitude : Hinweis auf Ersatzpaket (nur outdated.db)
Paketnamen und Version:
Die Angabe kann unter Verwendung von Wildcards erfolgen
* -> Platzhalter fuer eine beliebige Anzahl von Zeichen
? -> Platzhalter fuer genau ein Zeichen
2.9 eisman search
-----------------
Der Befehl arbeitet analog zu "eisman query", mit dem Unterschied, dass
der angegebene Suchbegriff auch ein Teil eines Paketnamens sein kann.
Ist ein Paketnamen nicht genau bekannt, bietet sich die Suche mit
"eisman search" an. Intern wird der Suchbegriff vor dem ersten und hinter
dem letzten Zeichen mit dem Wildcard '*' versehen, bevor die Anfrage
an "eisman query" weitergereicht wird.
Aufruf:
eisman search [] Suchbegriff
Optionen:
--excl-sections : Kommaseparierte Liste von Sektionen, die von
der Suche ausgenommen sein sollen.
--sections : Kommaseparierte Liste von Sektionen, in denen
die Abfrage stattfinden soll.
--fields : Kommaseparierte Liste von Feldnamen (siehe
unten).
--unstable : Auch Pakete beruecksichtigen, deren Status
nicht "stable" ist.
--installed : Abfrage in der Datenbank der installierten
Pakete durchfuehren.
--outdated : Abfrage in der Datenbank der veralteten
Pakete durchfuehren.
--output= : Leitet die Ausgabe der Ergebnisliste in eine
Datei um.
--url= : Begrenze die Abfrage auf eine vorgegebene URL.
--help : Gibt Informationen zum Befehl auf der
Konsole aus.
Liste moeglicher Feldnamen:
(siehe "eisman query")
2.10 eisman sections
--------------------
Listet die Sektionen auf, zu denen in der entsprechenden Datenbank Pakete
gefunden werden konnten. Normalerweise greift die Abfrage auf die Daten-
bank der verfuegbaren Pakete zu. Mittels der Option "--installed" kann
jedoch auch auf die Datenbank der installierten Pakete zugegriffen werden.
Als zusaetzliches Selektionskriterium kann eine URL angegeben werden, so
dass lediglich Pakete dieser URL bei der Abfrage beruecksichtigt werden.
Aufruf:
eisman sections []
Optionen:
--installed : Verwendet die Datenbank der installierten
Pakete anstelle der der verfuegbaren Pakete.
--unstable : Schliesst auch nicht-"stable"-Pakete in die
Abfrage mit ein-
--url= : Begrenze die Abfrage auf eine vorgegebene URL.
--help : Gibt Informationen zum Befehl auf der
Konsole aus.
2.11 eisman check
-----------------
Fuehrt eine Pruefung durch, die besagt, ob ein Paket installiert ist oder
nicht und ob die optional angegebene Version neuer oder aelter als der
installierte Stand ist. Ohne die Option "--diff" liefert das Kommando
das folgende Ergebnis:
"new" - Die Version ist neuer als das installierte Paket.
"old" - Die Version ist aelter als das installierte Paket.
"installed" - Die Version entspricht dem des insterllierten Paketes.
"not-installed" - Das Paket ist nicht installiert.
eisman check --diff VERSION1 VERSION2 vergleicht Versionsnummern unter
Beachtung bestimmter, z.T. eisfair spezifischer Regeln. Ergebnis:
"new" - Version 1 ist neuer als Version 2.
"old" - Version 1 ist aelter als Version 2.
"installed" - Beide Versionen stimmen ueberein.
Aufruf:
eisman check [ ]
eisman check --diff
Beispiele:
Aufruf Ergebnis/Ausgabe
eisman check mariadb installed
Das Paket "mariadb" ist aktuell installiert
eisman check mariadb 1.2.3 old
Das Paket "mariadb" ist installiert und neuer als die hier
angegebene Version 1.2.3
eisman check --diff 1.2.3 1.2.4 old
Die Version 1.2.3 ist aelter, als die Version 1.2.4.
eisman check --diff 1.2.3 1.2 new
Die Version 1.2.3 ist neuer, als die Version 1.2
(ergaenzt zu 1.2.0).
eisman check --diff 1.2.0 1.2 installed
Die Version 1.2.0 ist identisch mit der Version 1.2
(ergaenzt zu 1.2.0).
eisman check --diff 2.7.9 2.7.9svn2017-01-13 new
Die Version 2.7.9 ist neuer als die SVN- bzw. Testversion
aus dem Subversion Repository Build vom 13.01.2017.
eisman check --diff 2.7.9svn2017-01-13 2.7.9svn2017-01-14 old
Die am 13.01.2017 erstellt Version ist aelter als
die am 14.01.2017 erstellte Version.
2.12 eisman usage
-----------------
Zeigt in einer Baumstruktur alle Pakete auf, die auf ein das angegebene
Paket ein Abhaengigkeit definiert haben. Auf diese Weise kann man
einfach herausfinden, ob eine bestimmte Komponente deinstalliert werden
kann oder wer diese Komponente noch verwendet.
Aufruf:
eisman usage []
Optionen:
--help : Gibt Informationen zum Befehl auf der Konsole aus.
2.13 eisman unlock
------------------
Damit immer nur ein Anwender zugleich Aenderungen an den Paketdatenbanken
(z.B. durch Installation oder Deinstallation) vornehmen kann, schreibt
eisman unter /run/lock eine Lock-Datei, die die Funktion einer Semaphore
wahrnimmt.
Falls nun - was in der Praxis kaum vorkommen duerfte - eine Operation von
eisman abgebrochen wurde und die Verriegelung dabei nicht entfernt
werden konnte, dann kann dies mit o.g. Befehl manuell erfolgen. Zuvor
ist jedoch zu pruefen, ob nicht doch entweder ein anderer Anwender oder ein
Hintergrundprozess (cron-Job) eine eisman-Instanz gestartet hat.
Aufruf:
eisman unlock
2.14 eisman stats
-----------------
Der Befehl kann einige Statistiken ueber die aktuellen Paketdatenbanken
erstellen. Ohne weitere Angabe von Optionen erhaelt man dabei die Anzahl
der verfuegbaren Pakete und die Anzahl der installierten Pakete. Zudem wird
angegeben, wann zuletzt die Datenbanken aktualisiert worden sind.
Mittels weiterer Optionen koennen weitere Statistiken erstellt werden, die
jedoch sehr viel Zeit in Anspruch nehmen und nicht fuer den regelmaessigen
Gebrauch gedacht sind.
Aufruf:
eisman stats []
Optionen:
--print-age-stats : Altersverteilung der Pakete ermitteln und
darstellen.
--print-require-stats : Konsistenz der Paketabhaengigkeiten pruefen
und Anzahl der Inkonsistenzen zeigen.
--help : Gibt Informationen zum Befehl auf der
Konsole aus.
2.15 eisman localdir
--------------------
Der Befehl sucht alle Paket-Info-Dateien (*.info) unterhalb des angegebenen
Verzeichnisses und uebertraegt die daraus gewonnenen Informationen in die
Datenbank der verfuegbaren Pakete. Dies wird zur Vorbereitung einer In-
stallation von lokal vorliegenden Paketen verwendet. Anschliessend kann die
Paketauswahl mit "eisman query" unter Angabe der URL aufgebaut werden.
(Siehe dazu das Skript /var/install/bin/install-local-package.)
Aufruf:
eisman localdir []
Optionen:
--help : Gibt Informationen zum Befehl auf der Konsole aus.
2.16 eisman clearcache
----------------------
Hiermit werden alle Paketarchive von der Festplatte geloescht, die sich
aktuell im Download-Cache befinden. Dies sind ueblicherweise Pakete, die
im Falle einer abgebrochenen Installation liegen geblieben sind.
Im Normalfall werden solche Installationsartefakte nach sieben Tagen auto-
matisch aus dem Cache entfernt, wodurch sich dieser so gut wie immer in
einem bereinigten Zustand befindet. In Ausnahmefaellen kann es jedoch not-
wendig sein, die Bereinigung vor Ablauf der sieben Tage zu erzwingen.
Aufruf:
eisman clearcache []
Optionen:
--help : Gibt Informationen zum Befehl auf der Konsole aus.
2.17 eisman flushurl
--------------------
Loescht alle Pakete aus der Datenbank der verfuegbaren Pakete, die zu der
angegebenen URL gehoeren. Diese Funktion wird beispielsweise verwendet, um
nach einer lokalen Installation oder nach der Installation von einer URL,
die nicht permanent im Paketindex ist, die zusaetzlich zur Dantebank hinzu-
gefuegten Pakete ohne einen Aufruf von "eisman update" wieder entfernen
zu koennen.
Aufruf:
eisman flushurl []
Optionen:
--help : Gibt Informationen zum Befehl auf der Konsole aus.
Hinweis:
Um z.B. nach einem Aufruf von "eisman localdir" die Pakete wieder zu
loeschen, ist das lokale Verzeichnis wie folgt in eine URL umzuformen:
url="file://$(realpath ${local_dir})"
2.18 eisman run
---------------
Mittels "eisman run" kann ein unter /var/install/eisman_run.d abgelegtes
Erweiterungsskript ausgefuehrt werden. Dies kann z.B. ein Skript zur loka-
len Installation von Paketen sein o.ae.
Der Vorteil dieser Aufrufschnittstelle ist, dass ein Skript, das darueber
gestartet wurde, exklusiv ablaeuft und den Paketmanager fuer andere Anwender
sperrt, bis das Skript wieder beendet wird. Damit kann z.B. eine Modifi-
kation der Paketdatenbanken in mehreren Schritten erfolgen, ohne dass
dieser Prozess durch weitere eisman-Aufrufe behindert werden kann.
Der Name des Skripts entspricht dabei dem Namen des Befehls, jedoch mit
der Endung ".sh".
Beispiel:
"eisman run skeleton" ruft das Skript /var/lib/eisman_run.d/skeleton.sh
auf.
Aufruf:
eisman run []
Befehl:
Der Name des Erweiterungsskripts entspricht dem Namen des Befehls,
jedoch mit der Endung ".sh". Existiert das Skript, so kann es ueber
eisman aufgerufen werden. Existiert es nicht, erfolgt eine Fehler-
meldung.
Beispiel: eisman run skeleton -> /var/lib/eisman_run.d/skeleton.sh
Optionen:
Die Optionen sind abhaengig vom jeweiligen Befehl. In der Regel sollten
Erweiterungsskripte jedoch mindestens die Option --help unterstuetzen.
--help : Gibt Informationen zum Befehl auf der Konsole aus.
Eine Vorlage fuer Erweiterungsskripte befindet sich im angegebenen Skript-
Verzeichnis und traegt den Namen "skeleton.sh".
2.19 eisman checklock
---------------------
Prueft, ob die laufende Instanz von eisman die Zugriffssperre besitzt oder
nicht. Der Aufruf dieses Befehls ist lediglich aus einem Erweiterungsskript
heraus sinnvoll, um zu pruefen, ob das Skript direkt, oder ueber das eisman
Frontend aufgerufen wurde. Um die Exklusivitaet sicherzustellen muss das
Skript im ersten Fall eine weitere Instanz von sich selbst ueber die "run"
Schnittstelle aufrufen. Ein entsprechender Code-Abschnitt im Erweiterungs-
skript kann wie folgt aussehen:
# check if we are running under eisman control. If not use eisman
# frontend to run the script using the run command
if ! eisman checklock
then
# not running under eisman control!
eisman run skeleton "${@}"
exit $?
fi
Aufruf:
eisman checklock
Der Befehl liefert ueber den exit-Code das Ergebnis der Pruefung zurueck.
2.20 eisman repair
------------------
Prueft die Datenbank der installierten Pakete auf Fehler hinsichtlich
nicht korrekt aufgeloester Verweise. Dies wird erreicht, indem eisman
alle "require" und "link" Eintraege mit der Liste der installierten
Pakete vergleicht.
Werden fehlende Pakete gefunden, versucht einman diese zu installieren.
Aufruf:
eisman repair []
Optionen:
--ignore : Das Paket mit dem angegebenen Namen unbeachtet
lassen. Die Option kann mehrfach angegeben werden.
--help : Gibt Informationen zum Befehl auf der Konsole aus.
2.21 eisman mirror
------------------
Legt im angegebenen Verzeichnis eine lokale Kopie der Paketserver an, die
ueber die aktuelle URL-Konfiguration in den Index eingebunden werden.
Existiert in dem Verzeichnis bereits eine lokale Kopie, so wird diese
mit dem aktuellen Index lediglich abgeglichen. D.h, es werden aktuellere
Versionen existierender Pakete bzw. neu hinzugekommene Pakete herunter-
geladen und hinzugefuegt.
Zugleich wird eine neue Index-Datei angelegt, die die Pakete innerhalb
des Spiegels, die auch im globalen Index vorkommen, lokal referenziert.
Pakete, die länger als 90-Tage nicht im Index auftauchen, werden geloescht.
Aufruf:
eisman mirror []
Optionen:
--relocate : Schreibt das lokale Verzeichnis innerhalb der
Index-Datei in die angegebene url um.
--no-progress : Unterdrueckt die Ausgabe der Fortschrittsanzeige.
--help : Gibt Informationen zum Befehl auf der Konsole aus.
2.22 eisman version
-------------------
Gibt die aktuelle Version des Paketmanagers auf der Konsole aus.
Aufruf:
eisman version
3 Interne Struktur: Verzeichnisse und Dateien
=============================================
Im Folgenden ist eine Uebersicht ueber die Dateien zusammengestellt, aus
denen eisman besteht, bzw. in denen eisman seine Daten verwaltet.
3.1 Verzeichnis /usr/bin
------------------------
eisman
Das zentrale eisman-Frontend, ueber das alle Kommandos abgewickelt
werden und in dem das Locking durchgefuehrt wird.
3.2 Verzeichnis /usr/share/eisman
---------------------------------
In dem Verzeichnis liegen die Skripte, die die eigentliche Funktion von
eisman ausmachen. Keines dieser Skripte ist dazu bestimmt, von extern
direkt aufgerufen zu werden! Der Aufruf erfolg immer ueber das Frontend
'eisman'.
eisman_check_version.sh
Fuehrt die Funktionen aus, die dem Kommando "eisman check" entsprechen.
eisman_download.sh
Ist im Rahmen einer Installation dafuer zustaendig, ein Paketarchiv von
einem Paketserver zu laden, den Download-Fortschritt entsprechend dar-
zustallen und Fehlersituationen zu behandeln.
eisman_find_upgradables.sh
Fuehrt die Suche nach Paketen aus, die gegenueber den installierten
Paketen neuere Versionen aufweisen. Das Skript gibt die Ergebnisse
zur weiteren Verwendung ueber stdio aus.
eisman_flushurl.sh
Fuehrt die Funktionen aus, die dem Kommando "eisman flushurl" entspre-
chen.
eisman_info_to_db.sh
Liest die Informationen aus einer Paket-Info-Datei aus und uebertraegt
diese in das interne Datenbankformat. Der daraus resultierende Daten-
satz kann anschliessend in eine Datenbank uebertragen werden.
eisman_init.sh
Fuehrt die Funktionen aus, die dem Kommando "eisman init" entsprechen.
Verwendet 'eisman_info_to_db.sh' zum Erstellen der Datenbank der in-
stallierten Pakete.
eisman_install.sh
Fuehrt die Funktionen aus, die dem Kommando "eisman install" entspre-
chen. Verwendet 'eisman_tree.sh' fuer die Paketsuche.
eisman_localdir.sh
Fuehrt die Funktionen aus, die dem Kommando "eisman localdir" entspre-
chen. Verwendet 'eisman_info_to_db.sh' zum Hinzufuegen lokaler Paket-
Info-Dateien zur Datenbank der verfuegbaren Pakete.
eisman_query.sh
Fuehrt die Funktionen aus, die dem Kommando "eisman query" entspre-
chen.
eisman_rtree.sh
Sucht rekursiv nach Paketen, die aufgrund entfallender Paketabhaengig-
keiten im Falle einer Deinstallation ebenfalls deinstalliert werden
koennen. Das Skript erhaelt einen Paketnamen als Uebergabeargument und
liefert eine Ergebnisliste ueber stdio.
eisman_search.sh
Fuehrt die Funktionen aus, die dem Kommando "eisman search" entspre-
chen. Verwendet 'eisman_query.sh' zur Durchfuehrung der Datenbankab-
frage.
eisman_sections.sh
Fuehrt die Funktionen aus, die dem Kommando "eisman sections" entspre-
chen.
eisman_stats.sh
Fuehrt die Funktionen aus, die dem Kommando "eisman stats" entsprechen.
eisman_tree.sh
Sucht rekursiv nach Paketen, die aufgrund von Paketabhaengigkeiten oder
ahfgrund von Paketverknuepfungen installiert werden muessen. Das Skript
erhaelt eine Liste von Paketen als Uebergabeargument und liefert eine
Ergebnisliste ueber stdio.
eisman_uninstall.sh
Deinstalliert ein einzelnes Paket. Wird von eisman_uninstall_r.sh als
Unterfunktion verwendet.
eisman_uninstall_r.sh
Fuehrt die Funktionen aus, die dem Kommando "eisman uninstall" entspre-
chen. Verwendet im Falle einer Rekursiven Deinstallation das Skript
'eisman_rtree.sh' zum Auffinden weiterer deinstallierbarer Pakete und
das Skript 'eisman_uninstall.sh' zur tatsaechlichen Deinstallation.
eisman_update.sh
Fuehrt die Funktionen aus, die dem Kommando "eisman sections" entspre-
chen. Verwendet das Skript 'eisman_info_to_db.sh' um die Informationen
neuer Pakete aus der Paket-Info-Dateien auszulesen und in das interne
Format unter /var/lib/eisman/info (Info-Cache) zu kopieren.
eisman_upgrade.sh
Fuehrt die Funktionen aus, die dem Kommando "eisman sections" entspre-
chen. Verwendet 'eisman_find_upgradables.sh' zur Suche nach moeglichen
Updates und 'eisman_install.sh' zu deren Installation.
eisman_usage.sh
Fuehrt die Funktionen aus, die dem Kommando "eisman usage" entsprechen.
3.3 Verzeichnis /var/install/include
------------------------------------
eismanlib
Enthaelt globale Definitionen und eine Sammlung von Funktionen, die von
eine Vielzahl der eisman-Skripte gemeinsam genutzt werden.
3.4 Verzeichnis /var/lib/eisman
-------------------------------
dbversion
Enthaelt die Layout-Version der eisman-Datenbanken. Wird von "eisman init"
ausgelesen und ggf. in ein neuers Format konvertiert. Downgrades sind
nicht vorgesehen!
installed.db
Datenbank der installierten Pakete. Die Datensaetze in der Datenbank sind
nicht sortiert. Das zuletzt installierte Paket steht immer ganz unten
in der Datei. Siehe Kapitel "Datenbankformat" um naeheres zum Aufbau der
Datenbanken zu erfahren.
packages.db
Datenbank der verfuegbaren Pakete. Die Datenbank wird beim Aufruf von
'eisman update' neu generiert. Sie ist nach URL-Prioritaeten sortiert.
Siehe Kapitel "Datenbankformat" um naeheres zum Aufbau der Datenbanken
zu erfahren.
outdated.inc.db
Datenbank der fest hinterlegten veralteten Pakete. Die Datenbank enthaelt
Eintragungen, die auf ein eventuell verfuegbares Alternativpaket hin-
weisen und einen textuellen Kurzhinweis liefern.
outdated.db
Datenbank der veralteten Pakete. Die Datenbank enthaelt Eintragungen,
die auf ein eventuell verfuegbares Alternativpaket hinweisen und einen
textuellen Kurzhinweis liefern. Diese Datenbank wird durch den Aufruf
von "eisman update" sowohl aus der Datei outdated.inc.db als auch aus
den "replaces" Eintragungen innerhalb der packages.db erzeugt.
3.5 Verzeichnis /var/lib/eisman/info
------------------------------------
Unterhalb dieses Verzeichnisses befindet sich der Info-Cache. Dort sind
alle Informationen der bislang bekannten Paket-Info-Dateien bereits im
Format der eisman-Datenbanken gespeichert. Wird die Paketdatenbank neu ge-
neriert, dann werden die Datensaetze (ensprechend dem aktuellen Index) aus
dem Info-Cache entnommen und in die Datenbank der verfuegbaren Pakete ueber-
tragen. Lediglich der URL-Eintrag wird bei der Uebertragung an den im Index
vorgefundenen Wert angepasst. Es liegt also zu jedem Paket pro Version
genau ein Datensatz im Info-Cache!
Fehlt ein Datensatz im Info-Cache, so muss von "eisman update" die ent-
sprechende Paket-Info-Datei heruntergeladen, konvertiert und im Cache ab-
gelegt werden. Alte Pakete, die ueber laengere Zeit nicht mehr im Paketindex
aufgefuehrt wurden, werden nach 90-Tagen aus dem Info-Cache geloescht.
Die Verzeichnisstruktur sieht wie folgt aus:
/var/lib/eisman/info/
..rec
..rec
...
..rec
..rec
..rec
...
..rec
...
..rec
..rec
...
..rec
Falls das Archivformat zu einem beliebigen Zeitpunkt umgestellt wurde
oder falls das selbe Paket in der selben Version z.B auf verschiedenen
Paketservern in unterschiedlichen Archivformaten liegt, dann kann es vor-
kommen, dass mehr als eine .rec-Datei im jeweiligen Verzeichnis liegt.
3.6 Verzeichnis /var/lib/eisman/cache
-------------------------------------
Dieses Verzeichnis enthaelt den Download-Cache. Hier werden vor einer In-
stallation alle Paketarchive abgelegt, die bereits heruntergeladen worden
sind. Erst wenn der Download aller Pakete vollstaendig abgeschlossen werden
konnte wird die Installation durchgefuehrt. Dabei wird jedes Paket, das er-
folgreich installiert werden konnte, aus dem Cache entfernt.
Nach einem Abbruch kann die Installation erneut gestartet werden, ohne dass
der Download der verbleibenden Pakete wiederholt werden muss. Idealerweise
ist nach erfolgreicher Installation der Download-Cache jedoch komplett leer.
Das Ablageschema der Paketarchive ist mit dem im Info-Cache vergleichbar:
/var/lib/eisman/cache/
...
Da der "alte" Paketmanager die Paketarchive immer im Verzeichnis /tmp ab-
gelegt hatte und sich einige Pakete waehrend der Ausfuehrung von
/tmp/preinstall.sh auf diese Position verlassen, wird waehrend dieser Phase
der Installation ein symbolischer Link auf das Paketarchiv im Verzeichnis
/tmp angelegt und anschliessend wieder entfernt.
4 Interne Struktur: eisman Datenbanken
======================================
4.1 Das Record-Format
---------------------
Sowohl die Dateien im Info-Cache als auch die einzelnen Datensaetze inner-
halb der Paketdatenbanken folgen dem eisman-eigenen Record-Format. Das
Format wurde so gewaehlt, dass es einerseits die Daten rein textuell (d.h.
nicht binaer) repaesentiert, andererseits jedoch mit grep auf schnelle und
einfache Weise zerlegt d.h. abgefragt werden kann.
Trotz der Tatsache, dass die Datenbanken im ASCII-Format gehalten und damit
mit jedem Text-Editor eingesehen und bearbeitet werden koennen, handelt es
sich um Dateien, die lediglich von eisman gelesen und geschrieben werden.
Eine manuelle Bearbeitung ist nicht vorgesehen und nur in Ausnahmefaellen
sinnvoll.
Eine Zeile im Record-Format hat den folgenden Aufbau:
Ein Datensatz wiederum besteht aus einer aufeinanderfolgenden Serie von
Record-Zeilen, die mit einem Separator abgeschlossen sind:
...
-----------------------------------------------------
Hier das Beispiel eines realen Datensatzes (horizontal gekuerzt):
[utils][chroot][1.1.0][s][http://pack-eis.de]name chroot ...
[utils][chroot][1.1.0][s][http://pack-eis.de]version 1.1.0 ...
[utils][chroot][1.1.0][s][http://pack-eis.de]short ChangeRoot ...
[utils][chroot][1.1.0][s][http://pack-eis.de]date 2015-05-17 ...
[utils][chroot][1.1.0][s][http://pack-eis.de]author Juergen Edn...
[utils][chroot][1.1.0][s][http://pack-eis.de]section utils ...
[utils][chroot][1.1.0][s][http://pack-eis.de]space 1 ...
[utils][chroot][1.1.0][s][http://pack-eis.de]sha1sum ...
[utils][chroot][1.1.0][s][http://pack-eis.de]sha256sum ...
[utils][chroot][1.1.0][s][http://pack-eis.de]url http://pack...
[utils][chroot][1.1.0][s][http://pack-eis.de]status stable ...
[utils][chroot][1.1.0][s][http://pack-eis.de]require base 2.6.3 ...
[utils][chroot][1.1.0][s][http://pack-eis.de]link chroot-dev ...
[utils][chroot][1.1.0][s][http://pack-eis.de]text ...
[utils][chroot][1.1.0][s][http://pack-eis.de]text Manage Chan...
[utils][chroot][1.1.0][s][http://pack-eis.de]text ...
[utils][chroot][1.1.0][s][http://pack-eis.de]text ...
[utils][chroot][1.1.0][s][http://pack-eis.de]----------------------...
<--------------Index-Bereich----------------><-Feldname-><---Daten--->
4.1.1 Der Index-Bereich
-----------------------
Der Index-Bereich existiert zur schnellen Filterung des Datenbestandes
mittels des Tools "grep". Er enthaelt ausgesuchte Paketinformationen in
vertikaler Anordnung. Dabei ist jedes Index-Feld in eckige Klammern
eingeschlossen und enthaelt in jeder Zeile eines Datensatzes den selben
Wert.
Die Belegung der Index-Felder ist dabei wie folgt:
[utils][chroot][1.1.0][s][http://pack-eis.de]name chroot
| | | | |
| | | | +----------> Paketquelle
| | | +--------------------> Paketstatus (u oder s)
| | +-------------------------> Paketversion
| +--------------------------------> Paketname
+----------------------------------------> Paketsektion
Das Index-Feld der Paketquelle enthaelt nicht die vollstaendige URL eines
Paketarchivs, sondern lediglich einen gekuerzten Teil, der die Quelle,
nicht aber das jeweilige Paket identifiziert.
4.1.2 Feldnamen
---------------
Feldnamen entsprechen den Spaltenueberschrifen einer Tabelle. Sie haben im
Record-Format einen Bereich fester Breite von 11 Zeichen zur Verfuegung,
wobei die maximale Laenge eines Namens max. 10 Zeichen betraegt. Der ver-
bleibende Bereich wird mit Leerzeichen aufgefuellt.
Im Fall eines einzeiligen Datenwertes darf ein Feldname innerhalb eines
Datensatzes nur einmalig vorkommen. Falls ein Datenfeld dagegen einen mehr-
zeiligen Wert enthaelt, folgen mehrere Zeilen des selben Feldnamens un-
mittelbar aufeinander.
Bislang sind die folgenden Feldnamen bekannt:
name : Namen des Pakets,
einzeilig,
entspricht dem Tag in der Paket-Info-Datei.
version : Version des Pakets
einzeilig,
entspricht dem Tag in der Paket-Info-Datei.
short : Kurzbeschreibung
einzeilig,
entspricht dem Tag in der Paket-Info-Datei.
date : Datum der Paketerstellung
einzeilig,
entspricht dem Tag in der Paket-Info-Datei.
author : Namen (und E-Mail Adresse) des Paketbetreuers
einzeilig,
entspricht dem Tag in der Paket-Info-Datei.
section : Sektion, zu der das Paket gehoert
einzeilig,
entspricht dem Tag in der Paket-Info-Datei.
space : Erforderlicher Speicherplatz in MB
einzeilig,
entspricht dem Tag in der Paket-Info-Datei.
url : Die URL von der das Paket geladen wird
einzeilig,
keine Entsprechung in der Paket-Info-Datei.
status : Der Status des Pakets
einzeilig,
entspricht dem Tag in der Paket-Info-Datei.
sha1sum : SHA-1 Hash aus dem Paketarchiv berechnet
einzeilig,
entspricht dem Tag in der Paket-Info-Datei.
sha256sum : SHA-2 Hash aus dem Paketarchiv berechnet
einzeilig,
entspricht dem Tag in der Paket-Info-Datei.
replaces : Liste der Ersetzungen, die durch dieses Paket erfolgen,
mehrzeilig,
entspricht dem Tag in der Paket-Info-Datei.
require : Liste der Abhaengigkeiten (ggf. mehrzeiliges Ergebnis)
mehrzeilig,
entspricht den Tags und
in der Paket-Info-Datei.
link : Liste der verknuepften Pakete (ggf. mehrzeiliges Ergebnis)
mehrzeilig,
entspricht dem Tag in der Paket-Info-Datei.
exclude : Name des auszuschließenden Paketes. Pakete müssen sich
gegenseitig ausschließen, damit dies funktioniert.
mehrzeilig,
entspricht dem Tag in der Paket-Info-Datei.
text : Langbeschreibung des Pakets (ggf. mehrzeiliges Ergebnis)
mehrzeilig,
entspricht dem Tag in der Paket-Info-Datei.
hint : Hinweis zum Paketverbleib (nur outdated.db)
einzeilig,
keine Entsprechung in der Paket-Info-Datei.
substitude : Hinweis auf Ersatzpaket (nur outdated.db)
einzeilig,
keine Entsprechung in der Paket-Info-Datei.
4.1.3 Separator
---------------
Dem Separator kommt bei der Datenbankabfrage eine besondere Bedeutung zu.
Damit er korrekt erkannt wird, muss er aus genau 57 Minuszeichen bestehen
und den Bereich des Feldnamens mit einschliessen.
Fuer eisman gibt es eine entsprechend vordefinierte Variable in der Datei
'eismanlib'.
4.2 Konvertierung in das Record-Format
--------------------------------------
Da die Paketdaten ueblicherweise nicht schon im Record-Format vorliegen,
sondern eisman sich der Paket-Info-Dateien bedienen muss, um die Datensaetze
zu erzeugen, kommt dem Konvertierungsvorgang eine besondere Bedeutung zu.
Abgesehen von dem Feld "url" und den beiden Felder "hint" und "substitude",
die lediglich in der Datenbank "outdated.db" vorkommen, haben alle uebrigen
Felder eine Ensprechung in der (XML-basierten) Paket-Info-Datei. Bedauer-
licherweise liegen die Paket-Info-Dateien jedoch, historisch bedingt, in
recht unterschiedlichen Formen und Formaten vor, so dass einige Konver-
tierungen und Ausnahmebehandlungen erforderlich sind, um weitestgehend
alle Faelle fehlerfrei abdenken zu koennen.
4.2.1 Zeichensatzkodierung
--------------------------
Paket-Info-Dateien sollten das us-ascii-Format besitzen, damit sie unab-
haengig vom eingestellten Locale des jeweiligen Rechners fehlerfrei be-
arbeitet werden koennen.
Dem ist jedoch in einigen Faellen nicht so. Darum wird im ersten Schritt
die Datei in das korrekte Format gebracht. Dabei gehen jedoch Umlaute und
Sonderzeichen verloren!
Encoding --> us-ascii!
4.2.2 Zeilenkommentare
----------------------
In Unkenntnis des XML-Formats haben einige Paketautoren einige Zeilen in-
nerhalb der Paket-Info-Datei mit dem '#'-Zeichen auskommentiert. Diese
Zeilen werden nach der Zeichenkonvertierung aus der Datei entfernt!
Eine Ausnahme stellt dabei jedoch der Abschnitt dar! In
diesem koennen Zeilen vorkommen, die mit dem '#'-Zeichen beginnen und
dennoch nicht als Kommentar gemeint sind. Darum bleibt dieser Teil unver-
aendert!
4.2.3 Felder einlesen
---------------------
Nun werden die Felder gemaess ihrer Entsprechungen (siehe Kapitel "Feldnamen")
aus der Datei ausgelesen. Lediglich die Felder "name" und "version" sind
obligatorisch, damit der Datensatz von eisman akzeptiert wird, alle uebrigen
Felder werden mit Standardwerten belegt, falls sie nicht vorhanden sind.
name : obligatorisch
version : obligatorisch
short : Standardwert="${name} package"
date : Standardwert=""
author : Standardwert=""
section : Standardwert="unknown"
space : Standardwert="1"
status : Standardwert="u"
sha1sum : Standardwert=""
sha256sum : Standardwert=""
replaces : Standardwert=""
require : Standardwert=""
link : Standardwert=""
exclude : Standardwert=""
text : Standardwert=""
Ist das Feld "name" leer, dann wird alternativ versucht, den vor langer
Zeit noch gueltigen Tag-Wert " Paketname" zu lesen. Gelingt auch
das nicht, wird der Datensatz nicht akzeptiert.
4.2.4 Paketverlinkung
---------------------
Damit Pakete abhaengig von ihrem Installationsstatus gemeinsam mit anderen
Paketen aktualisiert werden koennen, wurde das Datenfeld "link" eingefuehrt.
Verweist ein Paket mittels dieses Links auf ein anderes Paket in einer
bestimmten Version, dann wird dieses andere Paket mit dem Paket gemeinsam
aktualisiert, falls es zuvor bereits auf dem System installiert war. Dieser
Mechanismus wird beispielsweise dazu verwendet, dass "-dev" Pakete von z.B.
Bibliotheken gemeinsam mit ihrem "Hauptpaket" aktualisiert werden, wenn sie
denn installiert sind.
Bislang wird dieser Link jedoch von keinem Paketbausystem generiert. Daher
muss eisman dies bei der Konvertierung der Daten aus der Paket-Info-Datei
selbst uebernehmen (und folgt damit einer Strategie, wie sie schon frueher im
alten Paketmanager auf aehnliche Weise verfolgt wurde).
Wenn ein Paket mit dem beispielhaften Namen "foo" und der Version "1.0.0"
gegeben ist, dann wird bei der Konvertierung der folgende Link automatisch
angelegt:
link foo-dev 1.0.0
Handelt es sich dagegen um eine Bibliothek mit dem ebenfalls beispielhaften
Namen "libfoo". Dann erzeugt eisman die Links:
link libfoo-dev 1.0.0
link libfoo-dev-static 1.0.0
Handelt es sich bereits um ein Paket mit dem Postfix "-dev-static" oder
"-dev", dann erfolgt kein link Eintrag!
Es ist fuer den Paketmanager voellig unerheblich, ob ein Paket mit dem je-
weiligen Postfix tatsaechlich existiert oder nicht. Ein nicht existierendes
Paket kann niemals bereits installiert sein und kommt damit auch nicht in
den Genuss der Sonderbehandlung.
Dieses Verhalten ist bei der Benennung von Paketen zu beruecksichtigen!
Falls der Automatismus nicht gewuenscht ist, kann ein Paketautor diesen
auch unterbinden. Dies geschieht, indem in der Paket-Info-Datei mittels des
Tags "linked-package" ein -dev Paket explizit angegeben wird.
4.2.5 Umbenennungen
-------------------
Im Laufe der Zeit kann es vorkommen, dass sich der Name eines Paketes
aendert, dass Pakete aufgeteilt werden oder dass Pakete zusammengefuehrt
werden. In diesem Fall muss dem Paketmanager diese Aenderung in dem dazu
vorgesehenen Datenfeld "replaces" mitgeteilt werden. Das Datenfeld darf
dabei mehrfach angegeben werden und entspricht dem Tag "" der
Paket-Info-Datei.
Die Informationen aus den "replaces"-Feldern werden in eine spezielle
Datenbanktabelle eingetragen, in der die veralteten Pakete stehen
(outdated.db). Sie bilden dort einen Verweis auf das Nachfolgepaket.
Neben den Informationen aus den "replaces"-Feldern enthaelt diese Tabelle
Eintraege von Paketen, die dauerhaft entfallen sind. Diese Eintraege sind
statisch, waehrend die "replaces"-Felder bei jeder Ausfuehrung von "eisman
update" neu gelesen und bewertet werden.
WARNUNG: Aenderungen am Abhaengigkeitsbaum verkomplizieren den Prozess der
Paketinstallation und erschweren die Fehlersuche erheblich! Sie
sollten nur dann vorgenommen werden, wenn die Umbenennung oder
Zusammenfuehrung absolut unabdingbar sind!
4.2.5.1 Einfache Umbenennung
----------------------------
Im Fall einer einfachen Umbenennung soll ein Paket beispielsweise von
"foo" in "bar" umbenannt werden. Dazu erhaelt das Paket einerseits im Da-
tenfeld "name" den Wert "bar" und wird zudem mit einem einzelnen "replaces"
Wert versehen:
[...]
name bar
replaces foo
[...]
Wird auf einem System, auf dem bereits das Paket "foo" installiert war, das
Paket "bar" installiert oder aktualisiert, dann wird "foo" mit dem
Schalter "--update" deinstalliert und "bar" installiert, so als ob keine
Umbenennung stattgefunden haette.
Soll die Namensaenderung zu einem spaeteren Zeitpunkt rueckgaenig gemacht
werden, dann ist dies wie eine erneute Umbenennung zu handhaben:
[...]
name foo
replaces bar
[...]
4.2.5.2 Zusammenfuehrung von Paketen
------------------------------------
Werden ein Paket oder gar mehrere Pakete in ein anderes (bestehendes) inte-
griert, dann wird dies ebenfalls mittels des "replaces" Tags angegeben.
Soll ein Pakete "bar" die Pakete "foo1" und "foo2" zukuenftig integrieren,
dann wird das wie folgt angegeben:
[...]
name bar
replaces foo1
replaces foo2
[...]
Bei der Installation des Paketes "bar" werden die Pakete "foo1" und "foo2"
deinstalliert(!), bevor das Paket "bar" installiert wird.
Eine Zusammenfuehrung kann auch zugleich eine Umbenennung sein. In dem
Fall ist der Name des urspruenglichen Pakets ebenfalls in Form einer
"replaces"-Zeile anzugeben.
4.2.5.3 Aufteilen von Paketen
-----------------------------
Wie mit dem Aufteilen von Paketen umgegangen werden muss, haengt stark da-
von ab, was aufgeteilt wird, wie aufgeteilt wird und welche Abhaengigkeiten
auf das jeweilige Teilpaket bestehen. Es ist i.d.R. kein "replaces"-Feld
fuer diesen Vorgang notwendig. Es kann aber gut sein, dass ein Wrapper-Paket
unter dem urspruenglichen Namen weiter existieren muss, damit die Ab-
haenigkeiten korrekt aufgeloest werden koennen.
4.3 Datenbankformat
-------------------
Eine Datenbank besteht aus beliebig vielen einzelnen Datensaetzen, die dem
oben beschriebenen Record-Format entsprechen:
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
5 Interne Struktur: Aufrufhierarchie
====================================
5.1 Aufrufhierarchie und Kapselung
----------------------------------
eisman folgt hinsichtlich der Kapselung der Funktionalitaet einem Top-Down
Design. Der Anwender kann entweder direkt ueber die Konsole oder mit Hilfe-
des Menuesystems bzw. des Paketbrowsers auf den Paketmanager zugreifen. Der
Zugriff erfolgt dabei immer ueber das Frontend "eisman", das mittels einer
Verriegelung dafuer sorgt, dass immer nur ein Anwender zugleich Aenderungen
an den Paketdatenbanken vornehmen kann. Allerdings ist ein rekursiver Aufruf
des Paketmanagers fuer den selben Benutzer trotz der Sperre moeglich.
Die Skripte unterhalb des Frontends sind fuer alle Aufgaben zustaendig,
die mit der Installation und der Deinstallation von Paketen, sowie der Pfle-
ge der Paketdatenbanken zu tun haben. Sie koennen sich gegenseitig aufrufen
und gehen dabei nicht erneut den Umweg ueber das eisman-Frontend. Es han-
delt sich hierbei um den internen Bereich des Paketmanagers. Niemals sollte
ein Skript unter /usr/share/eisman direkt aufgerufen werden.
Benutzerinteraktionen beschraengken sich im internen Bereich (wo erforder-
lich) auf einfache "ja"/ "nein" -Abfragen und koennen i.d.R. mit Kommando-
zeilenargumenten komplett deaktiviert werden (--auto).
+-----------------+
| Anwender |
+-----------------+
|
+----------+----------+
| |
V V
+---------+ +-----------------------+
| Konsole | | Frontend/Menu/Browser |
+---------+ +-----------------------+
| |
+----------+----------+
|
V
+-----------------+
| eisman-Frontend | /usr/bin
+-----------------+
|
V
+-----------------+
| eisman-Skripte | /usr/share/eisman
+-----------------+
|
V
+-------------------+
| Paketdatenbanken | /var/lib/eisman
+-------------------+
5.2 Die "run"-Schnittstelle
---------------------------
Falls doch der Bedarf besteht, den Paketmanager um eigene Funktionen zu
erweitern, die ebenfalls exklusiv ablaufen sollen, gibt es die "run"-
Schnittstelle, die bereits weiter oben beschrieben wurde.
Der Aufruf der Skripte erfolgt wie auch der der "internen" Befehle ueber
das Frontend "eisman", das dabei die Verriegelung uebernimmt und anschlie-
ssend das angegebene Skript aufruft. Dabei wird angenommen, dass der hin-
ter "run" angegebene Befehl dem Namen eines Skriptes (ohne dessen Endung
".sh") entspricht und im Verzeichnis "/var/install/eisman_run.d" zu finden
ist.
Diese Erweiterungsskripte sind jedoch per Definition kein Teil von eisman
und brauchen sich darum auch nicht an dessen Design-Paradigmen zu orien-
tieren. So koennen aus dem Skript heraus durchaus Paketbrowser oder Menue-
funktionen aufgerufen werden. Die untenstehende Grafik versucht diesen
Zusammenhang zu verdeutlichen.
+-----------+
| |
+-----------------+ V |
| Anwender | +--------------+ |
+-----------------+ | run-Skript | |
| +--------------+ |
| | | |
+----------+--------+----------+ | |
| | | |
V V | |
+---------+ +--------------+ | |
| Konsole | | Menu/Browser | | |
+---------+ +--------------+ | |
| | | |
+----------+--------+--------------+ |
| |
V |
+-----------------+ |
| eisman-Frontend | /usr/bin |
+-----------------+ |
| | |
| +--------------------------------+
V
+-----------------+
| eisman-Skripte | /usr/share/eisman
+-----------------+
|
V
+-------------------+
| Paketdatenbanken | /var/lib/eisman
+-------------------+