
\chapter{"Uberblick "uber ein \eisfair\ Paket}

\section{Grunds"atzliche Konventionen}

\subsection{Auswahl des Paketnamens}

    Der erste Schritt bei der Paketerstellung ist die Wahl des richtigen
    Paketnamens. Der Paketname wird an sehr vielen Stellen verwendet.
    Er ist zum Beispiel Bestandteil jeder Konfigurationsvariable eines
    Pakets und auch Teil des Namens vieler im Paket befindlicher Dateien.

    Es empfiehlt sich daher, einen \textbf{kurzen} Namen f"ur das Paket zu
    w"ahlen. Es versteht sich von selbst, dass "`dhcpd"' dem Namen
    "`dynamic\_host\_configuration\_protocol\_daemon"' vorzuziehen ist.
    Dem Anwender wird an den meisten Stellen sowieso nicht der Paketname,
    sondern ein anderer Text angezeigt.

    Generell \textbf{verboten} ist die Aufnahme der \textbf{Versionsnummer}
    in den Paketnamen. Ein Paket darf also nicht "`foo\_1.1.2"' heissen,
    sondern muss den Namen "`foo"' bekommen.

    Als Zeichen des Paketnamens sind ausschliesslich Kleinbuchstaben,
    Zahlen, der Bindestrich "`--"' ("`Dash"') und der Unterstrich "`\_"'
    ("`Underscore"') zul"assig.

    Zudem sollte das Paket nicht den Namen eines anderen Pakets als
    Pr"afix getrennt mittels eines Bindestrichs "`--"' enthalten. Dies
    kann zu Probleme mit manchen Deinstallationsroutinen f"uhren.
    Aus diesem Grund sollte generell auf die Verwendung des Bindestrichs
    "`--"' im Paketnamen verzichtet und als Alternative besser der
    Unterstrich "`\_"' verwendet werden.

    Eine der wenigen Ausnahmen davon sind Treiberpakete
    ("`scsi"~buslogic"'), Entwicklerbibliotheken ("`glibc"~dev"') und
    Bibliotheken ("`libz1"~2"').


\subsection{Dateinamen, Variablennamen}

    \sloppy Viele Dateinamen, Verzeichnisnamen und Variablennamen leiten
    sich vom Paketnamen ab. Im Paket foo gibt es also eine Reihe Dateien,
    die den Paketnamen foo als Namensbestandteil haben. Beispiele daf"ur
    sind die Dateien \texttt{/etc/check.d/foo.ext} und
    \texttt{/var/install/config.d/foo-update.sh} sowie die Variablen
    \texttt{START\_FOO} und \texttt{FOO\_BAR}.

    \fussy Dateinamen werden dabei \textbf{immer} in Kleinbuchstaben
    geschrieben, Variablennamen in der Konfigurationsdatei \textbf{immer} in
    Grossbuchstaben.

    \sloppy Im folgenden ist der Paketname immer als \package\ angegeben.
    Ist zum Beispiel eine Datei
    \texttt{/usr/local/\package/\package\--action.sh} angegeben, entspricht
    das im Paket "`foo"' der Datei \texttt{/usr/local/foo/foo-action.sh},
    eine Variable \texttt{START\_FOO} wird als \texttt{ TART\_\PACKAGE}
    geschrieben.


\section{Bestandteile eines Pakets}

    \fussy Ein Installationspaket f"ur \eisfair\ ist im wesentlichen ein
    mit gzip oder bzip2 komprimiertes Tar-Archiv, in dem neben den
    eigentlichen Dateien des Paketes noch einige weitere Informationen
    und Skripte enthalten sein m"ussen.

    Das Paket selbst spiegelt den Dateibaum ab dem root-Verzeichnis, also
    "`\texttt{ /}"' wieder. Eine zu installierende Datei \texttt{/usr/bin/foo}
    muss also im Tar-Archiv als \texttt{usr/bin/foo} (ohne absoluten Pfad,
    also relativ!) abgespeichert sein.

\ifpdf % PDF Ausgabe
        \LTXtable{\linewidth}{tbl_files.tex}
\else % HTML-Ausgabe
        \input{tbl_files}
\fi    % Ende Fallunterscheidung Tabellen


    Die einzelnen Bestandteile werden in den entsprechenden Kapiteln
    dieser Entwicklerdokumentation n"aher erkl"art.

    \textbf{Explizit nicht} in ein Eisfair-Paket d"urfen:
    \begin{itemize}
        \item info und man Dateien unter \texttt{/usr/info} bzw.
              \texttt{/usr/man}
        \item locale Dateien unter \texttt{/usr/share/locale} ausgenommen
              sind de|en|fr
        \item eine eigene glibc
        \item Bibliotheken
        \item Links
        \item leere Verzeichnisse
    \end{itemize}

    Links und leere Verzeichnisse m"ussen im Installationsskript angelegt
    werden.


    Nur in \textbf{Ausnahmef"allen} und nach vorheriger Abstimmung mit dem
    \eisfair\ Entwicklerteam d"urfen in ein Paket:

    \begin{itemize}
        \item ein eigener Kernel (nur wenn unumg"anglich)
        \item Kernel-Module (bitte nachfragen, ob diese nicht besser in
              das offizielle Kernelpaket mit aufgenommen werden k"onnen)
    \end{itemize}


    Um Probleme mit den Benutzerrechten (zum Beispiel Dateien, die einem
    User mit der ID 501 geh"oren, der auf dem \eisfair\--Server gar nicht
    existiert) zu verhindern, empfiehlt es sich, Packages mit

\begin{verbatim}

tar -czv --owner=root --group=root -f package.tar.gz *

\end{verbatim}

    zu verpacken. Damit geh"oren die entpackten Dateien zun"achst dem
    Superuser \textbf{root}. Dieser Zustand kann, sofern gew"unscht, im
    Installationsskript \texttt{ /tmp/install.sh} ge"andert werden.
