Sie befinden sich hier: eisfair / Pack-Eis
News News News

Navigation

Content

Dateianzeige für eisman (3.4.4)

usr/share/doc/eisman/eisman.txt
INHALT ====== 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 +-------------------+