Unterabschnitte

Die Paket-Info-Datei

Hintergrund der Paket-Info-Datei

Diese Datei soll eine bessere Übersicht über die verfügbaren Pakete und notwendige Verwaltungsdaten bereitstellen.

Sie wird auch dazu verwendet, um das Paket in einer eis-list.txt aufzulisten.

Namen und Pfad

Die Info-Datei wird mit jedem Paket zweimal ausgeliefert: Sie ist erstens im Paket enthalten und liegt im Verzeichnis /var/install/packages/ mit dem Paketnamen als Name und wird zusätzlich parallel zum eigentlichen Paket ausgeliefert. Dabei erhält sie die Dateiendung .info.

Beispiel:
Wenn der Pfad zum Paket mail.tar.gz bspw. http://www.meine-domain.de/eisfair/ lautet (also die URL das Paketes http://www.domain.de/eisfair/mail.tar.gz ist), dann heisst die zugehörige Info-Datei mail.tar.gz.info; deren URL lautet somit http://www.domain.de/eisfair/mail.tar.gz.info.

Die Datei ist zudem als /var/install/packages/mail im tar-Archiv enthalten.

Format

Die Info-Datei hat eine XML-Struktur, die folgendermassen aussieht:

<package>
...
</package>

Innerhalb des Paket-Tags sind die unten beschriebenen Tags erlaubt. Die Werte sind, soweit nicht anders gekennzeichnet, Freitext. Werte, die nicht Freitext sind, sind case-sensitiv (auf Gross- und Kleinschreibung achten!). Freitexte dürfen folgende Zeichen nicht enthalten: ,,<``, ,,>``,,,$``.

Jedes Tag (bis auf <description>) muss mit Start-Tag, Wert und End-Tag in genau einer Zeile stehen.

Im folgenden werden alle Tags einer Infodatei kurz erläutert. Bis auf die mit (optional) gekennzeichneten Ausnahmen, darf keines dieser Tags leer bleiben oder fehlen!

Tag Bedeutung
<name> Der Name des Paketes.
<short> Eine Kurzbeschreibung (max 60 Zeichen). Dieses Tag sollte nicht nochmals den Namen des Paketes enthalten.
<version> Die Version des Paketes (siehe version-Tag).
<date> Das Releasedatum dieser Version.
<system> Für welches System dieses Paket zugelassen ist. Dieses Tag kann mehrmals vorhanden sein, wenn das Paket auf mehreren Zielsystemen installiert werden kann.
<author> Der Name des Autors inklusive Email-Adresse.
<status> Der Status des Paketes (siehe status-Tag).
<section> Der Bereich, dem dieses Paket angehört (siehe section-Tag).
<sha1sum> (optional) Checksumme zur automatischen Prüfung der Integrität eines Pakets (ab base 1.4.0). Hinweis: Dieses Tag kann im PackageInfoFile innerhalb des Archives nicht enthalten sein, da zum Zeitpunkt der Erstellung des Archives die Checksumme noch nicht bekannt ist. Das Tag ist somit nur in der externen *.info-Datei vorhanden.
<space> (optional) Gesamter zur Installation benötigter Plattenplatz (ab base 1.4.0). Hinweis: Dieses Tag kann im PackageInfoFile innerhalb des Archives nicht enthalten sein, da zum Zeitpunkt der Erstellung des Archives die Grösse noch nicht bekannt ist. Das Tag ist somit nur in der externen *.info-Datei vorhanden.
<require-package> (optional) Weiteres Paket, welches zum Betrieb unbedingt benötigt wird. (siehe require-package-tag)
<require-lib> (optional) Verweist auf ein Library-Paket (siehe require-lib-tag)
<sub-package> (optional) Ist ein Paket inkrementell aufgebaut, werden hier alle weiteren Teilpakete angegeben. (siehe sub-package-tag)
<description> Eine ausführlichere Beschreibung des Programmes, Hinweise, Tipps, Patches ...
   


Die Reihenfolge der Tags ist beliebig. Die Tag-Namen müssen in Kleinbuchstaben gesetzt sein. Es folgen weitere Beschreibungen der Tags.

<name>-Tag

Das <name>-Tag darf nur die Zeichen a-z, 0-9, ,,-`` und ,,_`` enthalten, wobei eine Angabe der Versionsnummer des in dem Paket enthaltenen Programms vermieden werden sollte. Es gibt allerdings Ausnahmen, wie z.B. <name>apache2</name> und <name>apache</name>.

<version>-Tag

Wie in der OpenSource-Welt üblich, werden auch die eisfair-Pakete mit dreiteiligen Versionsnummern nach folgendem Schema versehen: X.Y.Z,

Diese drei Teile haben jeweils eine konkrete Bedeutung.

X - Major
Der erste Block gibt ein sog. Major-Release an. Das heisst, das ist eine Art Hauptversion des Paketes. Diese Nummer ändert sich i. d. R. nur dann, wenn das Paket komplett neu aufgebaut wurde oder die internen Komponenten ebenfalls einen Sprung der Major-Version gemacht haben.

Y - Minor
Der zweite Block gibt ein Minor-Release an. Das heisst, jede Weiterentwicklung eines Paketes in Verbindung mit neuen Features, wird an dieser Stelle einen Versionsschritt machen. Wenn also bei einem Paket ein neues Feature eingebaut wird, dann wird dieses bspw. einen Versionsschritt von 1.2.5 zu 1.3.0 machen.

Z - Bugfix bzw. Patchlevel
Wenn in einem Paket Fehler beseitigt werden, so schlägt sich das auf die letzte Ziffer der Versionsbezeichnung nieder, also auf Z. Das ist die Nummer des Bugfix-Release. Um beim vorigen Beispiel zu bleiben: Es wird für ein Paket in der Version 1.2.5 ein Fehler gemeldet und behoben. Somit hat das neue Paket die Version 1.2.6.

So entwickelt sich die Versionsnummer weiter. Nach einem weiteren Bugfix wird es die Version 1.2.7 und nach dem Einbau eines neuen Features wie bspw. einer neuen Konfigurationsvariablen wird es die 1.3.0. Die Verwendung dieses Versionierungsschemas ermöglicht es zudem, die korrekte Versionsnummernvergabe vollständig zu automatisieren.

Die Variablen haben den Wertebereich von 0-99 und die Version 0.0.0 ist verboten.

Hinweis
Üblicherweise ist es so, dass bei Developerversionen (Testing-Versionen) der Minor (Y) ungerade und bei den stabilen Versionen gerade ist. Dieses Vorgehen wird vom Paket packagedevelopment konsequent umgesetzt.


<date>-Tag

Das Release-Datum des Pakets im Format: YYYY-MM-DD, (nach ISO 8601)

YYYY 4-stellige Jahreszahl
MM 2-stelliger Monat
DD 2-stelliger Tag

<status>-Tag

Ein eisfair-Paket kennt drei verschiedene Status, welche sich aus folgender Überlegung ergeben: Ein völlig neues Paket beginnt sein Leben mit einer Versionsnummer 0.x.x, also kleiner als Major-Version 1.0.0. Alle Pakete mit einer solchen Version werden per Konvention als unstable gekennzeichnet. Ein solches Paket wurde noch nicht getestet und die Installation ist nur Experten zu empfehlen, da dieses Paket noch erhebliche Fehler und Ungereimtheiten enthalten kann.

Hat das Paket einen gewissen Reifegrad erlangt, dann wird es die Version 1.0.0 erreichen. Ab hier gilt das bereits beim Version-Tag angesprochene Vorgehen, dass ein Paket mit geradem Minor als stable und ein Paket mit ungeradem Minor als testing gekennzeichnet wird.

So ist die Version 1.0.0 eine Stable-Version und die Versionen 1.0.x sind die Bugfixes dieses Stable-Release. Die Version 1.1.0 wäre demgegenüber jedoch eine Testing-Version. Die gesamte Frage nach dem Status eines Pakets wird damit wesentlich vereinfacht, da sich dieser unmittelbar aus der Versionsnummer herleiten läesst. Es ergibt sich bspw. folgender Ablauf:

Wie dieses Beispiel zeigt, werden hier problemlos drei verschiedene Versionen gepflegt: Das aktuelle Stable (1.2.0) durch Bugfixes (1.2.1), ein älteres Stable (1.0.0) durch Bugfixes (1.0.1 bis 1.0.4) sowie die Entwicklerversion 1.1.0 bis 1.1.2. Da das Release 1.2.0 aus der Testing 1.1.1 hervorgegangen ist, muss jedoch sichergestellt werden, dass die nun kommenden Testing-Versionen bei der nächsten ungeraden Nummer nach dem Release weiterlaufen. Das wären hier die Versionen 1.3.0, 1.3.1 usw.

Bzgl. der Version eines Paketes und dem damit einher gehenden Status sollen folgende Grundsätze zur Anwendung kommen:

testing
Dieses Paket wurde schon getestet und alle bekannten Fehler wurden beseitigt. Wenn ein Paket diesen Status erreicht hat, sollte es einen Feature-Freeze erhalten, d. h. es werden keine neuen Features mehr eingebaut, sondern nur noch Bugfixes vorgenommen. Ein Paket soll diesen Status erst dann erhalten, wenn mindestens fünf Benutzer das Paket installiert haben und alle gemeldeten Fehler vom Autor beseitigt wurden.

stable
Dieses Paket ist ausreichend getestet und arbeitet auch in vielen Kombinationen mit anderen Programmen und Treibern wie erwartet. Eine Dokumentation ist vorhanden. Ein Paket soll bzw. kann diesen Status erst dann erhalten, wenn es vorher den Status ,,unstable`` bzw. ,,testing`` besass.

Hinweis
Das Paket ,,packagedevelopment`` erzeugt bis einschliesslich Paketversion 0.5.5 Pakete mit Versionen 0.x.x mit dem Status testing. Es gibt bereits einen Feature-Request im eisfair Bugtracker um hier das korrekte Verhalten zu implementieren.


<section>-Tag

Dieser Wert ordnet das Paket in eine bestimmte Kategorie ein. Darüber lässt sich eine Menüauswahl o.ä. realisieren. Es existieren folgende Möglichkeiten für diesen Wert:

Entfallene Sektionen

Im Zuge der Bereinigung der Sektion-Struktur sind die folgenden Sektionen entfallen bzw. aufgesplittet oder umbenannt worden. Dem einen oder anderen Entwickler sind diese mglw. noch bekannt:

Die Pakete dieser Sektionen sollen zum jeweils nächsten Release nach Möglichkeit in der nun gültigen Sektion erscheinen.

<sha1sum>-Tag

Mit der Bildung einer Prüfsumme über das Archiv und mit dem Eintrag dieser sha1sum kann die fehlerfreie Übertragung vor der Installation geprüft werden.

Ermittlung der Checksumme:

    sha1sum -b test.tar.gz | cut -d' ' -f1

Dieses Tag kann nur im separaten Info-File gesetzt werden, da zum Zeitpunkt der Berechnung der Prüfsumme das Archiv des Paketes bereits fertig ist.

<space>-Tag

Mit dem Eintrag des gesamten zur Installation benötigten Plattenplatzes kann geprüft werden, ob dieser zur Verfügung steht.

Der benötigte Plattenplatz berechnet sich aus der Archivgrösse zuzüglich der Grösse der Einzeldateien.

Die Angabe erfolgt in ganzen Megabyte.

Beispiel (benötigt werden 13 Megabyte):

    <space>13</space>

Dieses Tag kann nur im separaten Info-File gesetzt werden, da zum Zeitpunkt der Berechnung der Gesamtgrösse das Archiv des Paketes bereits fertig ist.

<system>-Tag

Dieses Tag legt fest, für welches System das Paket entwickelt wurde, zum Beispiel für das System 'eisfair-1'.

Im Moment sind die Tags

    eisfair-1
    eisfair-2
    eisxen-1

zugelassen.

    <system>eisfair-1</system>

Dieses Tag darf auch mehrfach in einer Paket-Info-Datei vorkommen.

    <system>eisfair-1</system>
    <system>eisfair-2</system>

<require-package>-Tag

Dieser Wert definiert eine Abhängigkeit zwischen dem beschriebenen Paket und einem anderen Paket.

Das notwendige Paket kann dabei auf mehrere Arten referenziert werden. Die einfachste Variante ist der direkte Verweis auf die jeweilige Paket-Info-Datei. Das kann entweder durch die Angabe des relativen Pfades (Beispiele 1 und 2) oder durch die Angabe der absoluten URL (Beispiel 3) geschehen.

Alternativ kann ein Paket auch über den Paketnamen referenziert werden (Beispiele 4 und 5). Damit diese Variante verwendet werden kann, muss über die eis-list.txt eine index-Datei bereitgestellt werden, in der das benötigte Paket enthalten ist.

Sollte eine bestimmte Mindestversion gefordert werden, so kann diese bei allen Varianten optional durch ein Leerzeichen getrennt hinter dem Dateinamen bzw. Paketnamen angegeben werden.

Ist das beschriebene Paket von mehreren Paketen abhängig, so kann das <require-package>-Tag mehrfach vorkommen. Gibt es keine Abhängigkeiten, so kann es entfallen.

Die (immer vorhandene) Abhängigkeit zum Paket base muss nicht explizit genannt werden, es sein denn, eine bestimmte Version wird vorausgesetzt.

Beispiele:

<require-package>bar.tar.gz.info 1.3.1</require-package>
<require-package>../packages/foo.tar.gz.info 1.0.5</require-package>
<require-package>http://www.domain.de/foo.tar.gz.info 1.0.5</require-package>
<require-package>foo 1.0.5</require-package>
<require-package>bar</require-package>

<require-lib>-Tag

Da Bibliotheken aus Paketen nicht nur von einer bestimmten Anwendung benötigt werden, erfolgt ihre Auslieferung in separaten Paketen. Diese werden so vor der Installation des eigentlichen Paketes auf den Rechner geladen.

Beispiele:

<require-lib>libdb4-3 1.0.0</require-lib>
<require-lib>http://www.domain.de/libldap2-2.tar.gz.info 1.0.0</require-lib>

<sub-package>-Tag

Das Tag <sub-package> gibt an, welche Unterpakete vom Hauptpaket selbständig geladen werden. Diese Angaben dienen lediglich der Information, z.B. für eisfair -Download-Mirror-Systeme.

Syntax:

<sub-package>LOCATION EXTRA_DATA</sub-package>

Die Form von LOCATION entspricht derselben wie für <require-package>.

Als EXTRA_DATA können zusätzliche Informationen übermittelt werden. Beispielsweise wird beim base-Update der benötigte Platz auf der Festplatte in MB angegeben. Dieser Wert ist paketspezifisch und optional.

Update eines Pakets

Wenn ein Paket aktualisiert wird, sind folgende Punkte zu beachten:

Wird für die Paketentwicklungs ''packagedevelopment'' verwendet, werden diese Punkte automatisch korrekt behandelt.

Beispiel

Anbei ein kleines Beispiel, welches obige Definitionen illustrieren soll.

<package>
<name>mail</name>
<short>Mail services</short>
<version>1.2.7</version>
<date>2004-06-25</date>
<system>eisfair-1</system>
<author>Juergen Edner, fli4l-eisfair(at)telejeck(dot)de</author>
<status>testing</status>
<section>mail</section>
<sha1sum>559df80365121fb576761f145011e2ebbcfc71cb</sha1sum>
<space>13</space>
<require-lib>libdb4-3 1.0.0</require-lib>
<require-lib>libgdbm1-8 1.0.0</require-lib>
<require-lib>libssl 1.0.0</require-lib>
<require-package>base 1.0.5</require-package>
<require-package>inet 1.0.0</require-package>
<require-package>perl 1.0.0</require-package>
<description>
Mail Services

EXIM      Version: 4.34            EXISCAN   Version: 4.34-22
FETCHMAIL Version: 6.2.5           IPOP3D    Version: 2003.83
IMAPD     Version: 2003.338        VACATION  Version: 1.2.6.1

Attention: This package requires as minimum an installed update-1.0.5
           package!
Attention: Be careful, only mail usernames in lowercase are allowed in
           this package!

</description>
</package>

Yves Schumann 2012-02-05