9. eisfair spezifische Skripte

9.1. eislib - Funktionen zur Steuerung des Userinterfaces

In eisfair gibt es die include-Bibliothek „eislib“. Darin werden verschiedene standardisierte Funktionen zusammengefasst. Die Funktionalität wurde gegenüber den bisher verwendeten Skripten deutlich erweitert.

Aus Kompatibilitätsgründen werden die alten Skripte für eine Übergangszeit weiterhin unterstützt. Die Verwendung von hier nicht dokumentierten Skripten in neuen Releases ist nicht mehr zulässig.

Die eislib wird am Anfang des paketeigenen Skriptes durch folgenden Aufruf eingebunden:

# include eislib
. /var/install/include/eislib

Beim Aufruf der Funktionen braucht nichts weiter beachtet zu werden.

Beispiel:

anykey

Hinweis

Es muss darauf geachtet werden, dass der Inhalt der Variablen $IFS möglichst umgehend nach deren Benutzung immer auf den Ursprungswert zurück gesetzt wird, um eventuellen Störungen vorzubeugen.

Beispiel:

while read line
do
    _ifs="$IFS"                         # Inhalt sichern
    IFS=':'                             # Inhalt neu zuweisen

    set - $line                         # Bearbeitung durchfuehren

    IFS="$_ifs"                         # Inhalt wieder herstellen

    if [ $3 -gt $gid -a $3 -lt 300 ]    # ...
    then
        gid=$3
    fi
done </etc/group

In eisfair Version 1.5.0 sind die im Folgenden aufgeführten Funktionen verfügbar:

9.1.1. anykey

anykey wartet an der Konsole auf die Eingabe „ENTER“. Beim Aufruf unter einem Webbrowser wird der Aufruf von anykey ignoriert, d.h. es erfolgt keine Unterbrechung des Skript-Ablaufs.

An der Konsole darf anykey nur zum Anhalten einer Bildschirmausgabe (bessere Lesbarkeit) benutzt werden. Eine Verwendung zur Steuerung eines Ablaufs (Bitte Diskette Einlegen und Enter drücken) ist nicht mit webconf kompatibel!

9.1.2. clrhome

clrhome löscht den Bildschirm, so dass eine übersichtlichere Anzeige möglich ist (z.B. mehrseitige Anzeigen). Unter einem Webbrowser wird stattdessen eine horizontale Trennlinie angezeigt.

9.1.3. progress_bar

Mittels progress_bar kann man auf der Konsole einen Fortschrittsbalken anzeigen. So kann der Anwender bei längeren Verarbeitungen über den aktuellen Status auf dem Laufenden gehalten werden. Im Webbrowser erfolgt keine Anzeige.

9.1.3.1. Syntax

progress_bar [--tty|--html|--file] current_step total_steps

options:
  --tty use console colors
  --html use html tags for colors
  --file don't use any color tags

Als current_step wird der aktuelle Stand der Verarbeitung angegeben, total_steps ist die Gesamtzahl der durchzuführenden Verarbeitungsschritte. Um die Anzeige zu aktualisieren wird progress_bar einfach erneut aufgerufen, ohne dass zwischenzeitlich eine eigene Ausgabe erfolgt ist. Es wird dann die alte Anzeige mit dem neuen Fortschrittsbalken überschrieben.

Anzeigebeispiel (progress_bar 17 26):

65% [================================>                  ] 17 / 26

9.1.4. mecho

mecho dient zur Ausgabe von Meldungen. Dabei kann als Parameter angegeben werden, welche Formatierungen verwendet werden sollen. Die Ausgabe erfolgt angepasst an die Aufrufvariante (Konsole oder HTML unter der Kontrolle eines Webbrowsers). Derzeit werden folgende Formatierungen unterstützt:

  • --std

    Ausgabe einer allgemeinen Meldung (Standard-Einstellung)

    Dies sollte der Standardfall bei der Ausgabe von Meldungen sein. Ein Beispiel dafür ist die Ausgabe von Statusmeldungen beim Starten eines Dienstes oder beim Verarbeiten einer geänderten Konfiguration.

  • --stdbr

    Ausgabe einer allgemeinen Meldung (Breit - Weiß )

    Dies sollte der Standardfall bei der Ausgabe von Meldungen sein. Ein Beispiel dafür ist die Ausgabe von Statusmeldungen beim Starten eines Dienstes oder beim Verarbeiten einer geänderten Konfiguration.

  • --info

    Ausgabe einer Information

    Eine wichtige Information. Dieser Typ wird für die Hervorhebung wichtiger Informationsmeldungen verwendet. Dem Anwender wird damit das Ergebnis es ist alles in „Ordnung“ signalisiert.

  • --warn

    Ausgabe einer Warnung

    Warnungen werden mit dieser Option gesteuert. Eine Warnung signalisiert Probleme bei der Verarbeitung, wobei diese dennoch erfolgreich durchgeführt wurde. Mit –warn kann der Anwender auch auf eine Gefahr aufmerksam gemacht werden (z.B. eine häufige Fehlerquelle bei der Konfiguration eines Paketes).

  • --error

    Ausgabe einer Fehlermeldung

    Mittels der Formatierung –error wird eine klassische Fehlermeldung ausgegeben. Dies soll dem Anwender den Abbruch der Verarbeitung bzw. den Misserfolg einer Verarbeitung signalisieren.

  • --link

    Ausgabe für einen Link (Farbe cyan)

    Ausgabe eines Zeichen z.B. für einen Link ‚>‘

  • --ok

    Ausgabe einer [ OK ] Meldung

    Mittels der Formatierung --ok wird eine OK Meldung ausgegeben. Die rechts am Rand der Arbeitsfläche platziert ist und die Erfolgreiche Verarbeitung anzeigt.

Create configuration ...                                                   [  OK  ]
  • --fail

    Ausgabe einer [ FAIL ] Meldung

    Mittels der Formatierung --fail wird eine FAIL Meldung ausgegeben, die rechts am Rand der Arbeitsfläche platziert ist und den Abbruch der Verarbeitung bzw. den Misserfolg einer Verarbeitung anzeigt.

Create configuration ...                                                   [ FAIL ]

9.1.4.1. Syntax

mecho [-n] [--std|--stdbr|--info|--warn|--error|--link][--tty|--html|--file] message ...

options:
-n          do not append newline --std print standard message (default)
--stdbr     print standard message (default - breit)
--info      print info message
--warn      print warning message
--error     print error message
--link      print message in - cyan
--ok        print message [ OK ]
--fail      print message [ FAIL ]
--tty       use console colors
--html      use html tags forcolors
--file      don't use any color tags

Beispiel für OK und FAIL mit der Möglichkeit zur Fehlerbehandlung.

mecho --std " Create configuration ... "
_do_foo
retval=${?}
if [ ${retval} -eq 0 ]
then
    mecho --ok
else
    mecho --fail
    _do_bar
fi
Tipp für fortgeschrittene Entwickler

Mit den Optionen [–tty|–html|–file] kann die automatische Erkennung der Ausgabe-Umgebung gezielt ausgeschaltet werden. Man kann so bei einem manuellen Aufruf von der Konsole einfach den HTML-Code erzeugen.

9.1.5. echo_retval

Die Funktion ‚echo_retval‘ liefert, in Abhängigkeit vom Rückgabewert, [ OK ] oder [ FAIL ]. Beispiel für OK und FAIL ohne Eingriff für die Fehlerbehandlung.

mecho --std " Create configuration ... "
_do_foo
retval=${?}
echo_retval ${retval}

9.1.6. techo

Tabellen können mit Hilfe von techo bequem formatiert werden. Wie die anderen Funktionen der eislib funktioniert die Ausgabe von Tabellen sowohl an der Konsole als auch unter einem Webbrowser. Dabei erfolgt die Ausgabe der Tabelle in drei Phasen.

Initialisierung

Bei der Initialisierung techo --begin wird eine Liste der Spaltenbreiten übergeben. Diese sind in Zeichen anzugeben; bei der html-Ausgabe werden diese prozentual berücksichtigt.

Die Summe aller Spaltenbreiten einer Tabelle darf 80 nicht übersteigen, da sonst die Ausgabe auf dem Bildschirm nicht sichergestellt ist. In diesem Fall wird techo mit einer Fehlermeldung abgebrochen, die Zahlen müssen in ‚ ‚ eingefasst werden, damit ein expandieren vom ‚*‘ in der shell verhindert wird. Ab der eisfair base Version 1.5.3 ist die Spaltenbreite bei techo --file beliebig.

Tipp für fortgeschrittene Entwickler

Für jede Spalte kann angegeben werden, ob diese rechts- oder linksbündig ausgerichtet sein soll. Dazu wird der Spaltenbreite einfach ein „r“ bzw. ein „l“ angefügt. Außerdem können Spalten mit variabler Breite definiert werden indem bei der Definition ein „*“ angefügt wird.

Ausgabe der Tabellenzeilen

Jede Tabellenzeile wird mittels techo --row ausgegeben. Danach folgt eine Liste der einzelnen Spalteninhalte. Die gesamte Zeile oder auch jede Zelle kann in einer der vordefinierten Farben ausgegeben werden. Für die Formatierung der gesamten Zeile muss die Angabe zwischen den Schlüsselwörtern techo und --row erfolgen. Für einzelne Zellen muss die Formatierung dieser vorangestellt werden. Die Parameter zur Steuerung der Formatierung sind unter der Funktion mecho beschrieben.

Abschluss der Tabelle

Der Abschluss der Ausgabe einer Tabelle erfolgt mit techo --end.

9.1.6.1. Syntax

techo [--tty|--html|--file] --begin width[align] width[align] ...
techo [--tty|--html|--file] [--std|--stdbr|--info|--warn|--error|--link] --row [--std|--stdbr|--info|--warn|--error|--link] message ...
techo [--tty|--html|--file] --end

options:
--tty           use console colors
--html          use html tags for colors
--file          don'tuse any color tags

message-options:
--std           print standard message (default)
--stdbr         print standard message (default - breit)
--info          print info message
--warn          print warning message
--error         print error message
--link          print message in - cyan

Beispiel:

techo --begin '3 3r 15 10 28* 20'
techo --row '''' 1 foo foo ''This is a somehow longer text, since I need a very long line of text'' foo
techo --row ''->'' 2 --info ''bar foo'' --warn ''foo bar'' foo
techo --row '''' 12 foofoo foo foo --error foobar
techo --info --row '''' 24 foo foobar foo --error foobar
techo --end
Tipp für fortgeschrittene Entwickler

Die Funktionen der eislib funktionieren nicht nur auf der Konsole und unter einem Webbrowser, sondern auch bei der Umleitung der Ausgabeströme in eine Datei oder Variable.

Beispiel:

{
techo --begin '4 40'
techo --row """Zeile 1"
techo --row """Zeile 2"
techo --row "->""Zeile 3"
techo --row """Zeile 4"
techo --end
} >/tmp/foo.txt

9.1.7. eistime

Über das Skript eistime werden Datum und Zeit in der ISO-8601-Notation systemweit zur Verfügung gestellt.

9.1.7.1. Syntax

${EISDATE} = 2006-04-25 ${EISTIME} = 21:16:38

Beispiel:

cat  >${HOSTS_HFAXD_FILE} <<EOF
# --------------------------------------------------------------------
#  hosts.hfaxd file generated by ${PACKAGE_NAME} version: ${VERSION}
#
#  Do not edit this file, edit ${CONFIG_FILE}
#  Creation Date: ${EISDATE} Time: ${EISTIME}
# --------------------------------------------------------------------
EOF

Ergibt:

# --------------------------------------------------------------------
#  hosts.hfaxd file generated by eisfax version: 1.1.20
#
#  Do not edit this file, edit /etc/config.d/eisfax
#  Creation Date: 2006-04-25 Time: 21:16:38
# --------------------------------------------------------------------

9.1.8. refresh_screensize

Die Funktion refresh_screensize wird mit dem laden der eislib ausgeführt und kann jeder Zeit wieder aufgerufen werden.

Der Rückgabewert ist:

_EISLIB_SCREENSIZE_X actual number of screen columns
_EISLIB_SCREENSIZE_Y actual number of screen lines

9.1.9. check_screensize

Die Funktion check_screensize überprüft die Größe des Terminal. Der Rückgabewert von 1 bedeutet ein zu kleines Terminal.

Default:

_EISLIB_SCREENSIZE_X_MIN = 80
_EISLIB_SCREENSIZE_Y_MIN = 24
_EISLIB_SCREENSIZE_Y_FILE = 999999

9.2. inetlib - Funktionen für Parameter von Interfaces

get_interfaces()    get list of interfaces
get_interface()     get name of interface
get_ipaddr()        get IP address of interface
get_netmask()       get Netmask of interface
get_broadcast()     get Boadcast address of interface
get_network()       get Network of interface

Diese Funktionen dienen dazu, die aktuellen Parameter eines Interfaces (z.B. eth0, eth1 oder auch ppp0) zu ermitteln.

Eigentlich stehen diese Angaben über die entsprechenden Variablen

IP_ETH_%_NAME
IP_ETH_%_IPADDR
IP_ETH_%_NETWORK
IP_ETH_%_NETMASK

aus der Konfigurationsdatei /etc/config.d/base zur Verfügung.

Werden die Parameter für Interfaces aber dynamisch vergeben (z.B. bei dhcp oder beim DSL Paket für ppp0), so stimmen die Angaben aus /etc/config.d/base nicht mehr mit den aktuellen Parametern der Interfaces überein.

Die aufgeführten Funktionen ermitteln die Parameter, indem sie die Ausgabe des Befehls ifconfig auswerten.

9.2.1. get_interfaces

Die Funktion get_interfaces gibt eine Liste der Interfaces zurück. Dabei werden nur solche Interfaces ermittelt, die mit eth oder ppp beginnen. Das Loopback-Interface lo ist z.B. nicht in der Liste beinhaltet.

Beispiel:

IF=$(get_interfaces)
mecho --info "Vorhandene Interfaces $IF"

Ausgabe ist beispielsweise:

Vorhandene Interfaces eth0 eth0:0

Hier wird die Liste der vorhandenen Interfaces ausgegeben.

9.2.2. weitere get-Funktionen

Die weiteren Funktionen geben die entsprechenden Parameter eines Interfaces aus. Als Parameter kann entweder die Nummer der IP_ETH_%-Variablen aus /etc/config.d/base angegeben werden oder der Name eines Interfaces.

Für get_interface macht natürlich nur die Nummer einen Sinn. Aufrufe (hier für get_ipaddr):

get_ipaddr 1

Hier wird die aktuelle IP-Adresse des Interfaces ausgegeben, welche über IP_ETH_1_NAME identifiziert wird. Ist IP_ETH_1_NAME leer, so wird das Interface eth0 genutzt. Achtung: eth0 und nicht eth1.

get_ipaddr eth0:0

Hier wird die aktuelle IP-Adresse des Interfaces eth0:0 ausgegeben.

Existiert ein angegebenes Interface nicht, so wird kein Text bzw. leerer Text ausgeben. Dies gilt auch bei ungültigem Parameter, wie z.B. ett4.

Ein umfangreicheres Beispiel:

# include eislib
. /var/install/include/eislib

# include inetlib
. /var/install/include/inetlib

# Test the library

mecho --info "Test inetlib functions"
mecho "The interfaces are retrieved using get_interfaces."
mecho

for VAL in $(get_interfaces)
do
    mecho --info "Working for interface: $VAL"
    mecho "IP address: $(get_ipaddr $VAL)"
    mecho "Netmask   : $(get_netmask $VAL)"
    mecho "Broadcast : $(get_broadcast $VAL)"
    mecho "Network   : $(get_network $VAL)"
    mecho
done

mecho --info "Check function get_interface"
mecho "Use parameter 1, 2 and bad"
mecho

for VAL in 1 2 bad
do
    mecho --info "Working for interface: $VAL"
    mecho "Interface $VAL : $(get_interface $VAL)"
done

Hier wird die Liste der Interfaces ermittelt und zu jedem Interface werden alle Parameter ausgegeben.

Ausgabe kann beispielsweise sein:

Test inetlib functions
The interfaces are retrieved using get_interfaces.

Working for interface: eth0
IP address: 192.168.1.252
Netmask   : 255.255.255.0
Broadcast : 192.168.1.255
Network   : 192.168.1.0

Working for interface: eth0:0
IP address: 192.168.1.251
Netmask   : 255.255.255.0
Broadcast : 192.168.1.255
Network   : 192.168.1.0

Check function get_interface
Use parameter 1, 2 and bad

Working for interface: 1
Interface 1 : eth0
Working for interface: 2
Interface 2 : eth0:0
Working for interface: bad
Interface bad :

9.3. configlib - Funktionen zum Handling der Konfigurationsdateien

Diese Bibliothek beinhaltet Funktionen zur Behandlung der eisfair Konfigurationsdateien.

Das Einbinden dieser Bibliothek erfolgt analog zur eislib:

# include configlib
. /var/install/include/configlib

9.3.1. printgpl

Die Funktion printgpl() gibt einen GPL-Header für eine eisfair-Konfigurationsdatei aus.

Beispiel:

printgpl --conf                  \
         "foo"                   \
         "2005-03-25" "frank"    \
         "2001-2019 the eisfair team, team(at)eisfair(dot)org"

Im Beispiel wird der GPL-Header für das angegebene Paket ausgegeben.

printgpl [Options] PACKAGE CREATED CREATOR COPYRIGHT

Options:
  [--conf]      - print the GPL Header for config
  [--check]     - print the GPL Header for check
  [--check_exp] - print the GPL Header for check.exp
  [--check_ext] - print the GPL Header for check.ext

PACKAGE         - Name of the package
CREATED         - Package creation Date
CREATOR         - Original package author
COPYRIGHT       - Copyright String (optional) wenn nicht gesetzt default:
    "Copyright (c) 2001-2019 the eisfair team, team(at)eisfair(dot)org"

Das sieht dann in unserem Beispiel so aus:

Beispiel:

# -----------------------------------------------------------------------
# /etc/config.d/foo - configuration file for foo
#
# Creation:     2005-03-25  frank
# Last Update:  2006-02-10  max
#
# Copyright (c) 2001-2019 the eisfair team, team(at)eisfair(dot)org
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# -----------------------------------------------------------------------

9.3.2. check

Bei einem erweiterten Erweitertes update $package-update.sh Skript können auch die folgenden Header benutzt werden.

9.3.2.1. --check

Der Parameter --check gibt einen GPL-Header für eine eisfair-check-datei aus.

Beispiel:

printgpl --check                 \
         "foo"                   \
         "2005-03-25" "frank"    \
         "2001-2019 the eisfair team, team(at)eisfair(dot)org"

Beispiel:

# -----------------------------------------------------------------------
# /etc/check.d/foo - eischk file for foo
#
# Creation:

Im Beispiel wird der GPL-Header für das angegebene Paket ausgegeben. Das Ergebnis entspricht dem vorangegangenen Beispiel printgpl .

9.3.2.2. --check_exp

Der Parameter --check_exp gibt einen GPL-Header für eine eisfair-check.exp-datei aus. Beispiel:

printgpl --check_exp             \
         "foo"                   \
         "2005-03-25" "frank"    \
         "2001-2019 the eisfair team, team(at)eisfair(dot)org"

Beispiel:

# -----------------------------------------------------------------------
# /etc/check.d/foo.exp - eischk exp file for foo
#
# Creation:

Im Beispiel wird der GPL-Header für das angegebene Paket ausgegeben. Das Ergebnis entspricht dem vorangegangenen Beispiel printgpl .

9.3.2.3. --check_ext

Der Parameter --check_ext gibt einen GPL-Header für eine eisfair-check.ext-datei aus.

Beispiel:

printgpl --check_ext             \
         "foo"                   \
         "2005-03-25" "frank"    \
         2001-2019 the eisfair team, team(at)eisfair(dot)org"

Beispiel:

# -----------------------------------------------------------------------
# /etc/check.d/foo.ext - eischk ext file for foo
#
# Creation:

Im Beispiel wird der GPL-Header für das angegebene Paket ausgegeben. Das Ergebnis entspricht dem vorangegangenen Beispiel printgpl .

9.3.3. printgroup

Mit der Funktion printgroup() kann man einen Gruppenheader für eine eisfair-Konfigurationsdatei erzeugen. Dabei kann nach dem Gruppennamen noch optional ein Kommentar angegeben werden:

Beispiel:

printgroup "Simple group"
printgroup "General settings" "General settings for configuration"

Beispiel: Für eine Zeile

# -----------------------------------------------------------------------
# Simple group
# -----------------------------------------------------------------------

Beispiel: Für eine Zeile mit Kommentar

# -----------------------------------------------------------------------
# General settings
# general settings for eisfair configuration
# -----------------------------------------------------------------------

Standard ist vor und nach dem Gruppenheader jeweils eine Leerzeile.

Diese Leerzeile kann gesteuert werden. Dafür gibt es die folgenden Parameter. Hierbei lässt sich durch Angabe von ‚0‘ die Leerzeile auch unterdrücken.

Parameter:

-b x     print x newline before Groupheader
-a x     print x newline after Groupheader

Beispiel:

printgroup -b 0 "Simple group"
printgroup -b 2 -a 0 "General settings" "General configuration settings"

9.3.4. printcustomgroup

Mit der Funktion printcustomgroup() kann man einen Gruppenheader für eine eisfair-Konfigurationsdatei erzeugen und einen mehrzeiligen Kommentar angeben:

Beispiel:

printcustomgroup 'General settings' << !EOC
comment line
comment line
comment line
!EOC

Beispiel:

# -----------------------------------------------------------------------
# General settings
#
# more comment
# more comment
# etc
# -----------------------------------------------------------------------

Standard ist vor und nach dem Gruppenheader jeweils eine Leerzeile.

Diese Leerzeile kann gesteuert werden. Dafür gibt es die folgenden Parameter. Hierbei lässt sich durch Angabe von ‚0‘ die Leerzeile auch unterdrücken.

Parameter:

-b x     print x newline before Groupheader
-a x     print x newline after Groupheader

Beispiel:

printcustomgroup -b 0 'General settings' << !EOC
comment line
comment line
comment line
!EOC

Wenn dieser mehrzeilige Kommentar tabellarisch gestaltet werden soll und dabei am Zeilenanfang Leerzeichen vorkommen, müssen diese am Beginn der Zeile mit der ‚#‘ Raute geschützt werden.

9.3.5. printvar

Die Funktion printvar() dient zur formatierten Ausgabe von Konfigurationsvariablen und Kommentaren, sofern eine eisfair-Konfigurationsdatei selbst geschrieben werden muss.

Beispiel:

printvar 'FOO_VARIABLE'            "This is a simple Variable"
printvar ''                        "This is a comment without a Variable"
printvar 'FOO_ARRAY_'$idx'_OPTION' "Simple printing of Arrays"

Als Beispiel sind hier drei gängige Aufrufvarianten angegeben. Als erstes die einfache Ausgabe einer Variable mit einem Kommentar. Sollte die Variable FOO_VARIABLE den Inhalt foobar haben, so sieht die

Ausgabe wie folgt aus:

FOO_VARIABLE='foobar'                 # This is a simple Variable

Das Kommentarzeichen „#“ wird dabei unabhängig von der Länge des Variablennamens und des Inhalts immer an Position 39 ausgegeben. Sollten der Variablenname und der Inhalt länger als 37 Zeichen sein, so wird der Kommentar automatisch in der Folgezeile an Position 39 ausgegeben.

Um längere Kommentare mehrzeilig ausgeben zu können, kann printvar auch ohne einen Variablennamen aufgerufen werden. Es wird dann nur der übergebene Kommentar ab Position 39 ausgegeben. Das ist im zweiten Beispiel dargestellt.

Auch Variablenfelder können einfach mit printvar ausgegeben werden, dazu ist einfach der Variablenname inklusive des Zählers an printvar zu übergeben (Beispiel 3).

9.3.6. printend

Mit der Funktion printend() wird eine eisfair-Konfigurationsdatei abgeschlossen, d.h. es wird die Fußzeile End ausgegeben:

Beispiel:

printend

9.4. Weitere verfügbare Skripte

9.4.1. /var/install/bin/ask

Das Skript ask dient zur interaktiven Abfrage einer Eingabe. Aus diesem Grund darf dieses Skript nicht im Zusammenhang mit webconf verwendet werden!

/var/install/bin/ask [--tty --info --warn --error] QUESTION [DEFAULT] [PATTERN] [PATTERN] ...

QUESTION  -  Question to be asked.
DEFAULT   -  Default answer.
PATTERN   -  Possible answers:
empty     -  y(es) or n(o)
*         -  string input
+         -  string input (not empty!)
min-max   -  numerical input (range given)
WORD|WORD -  a list of possible values
             the first will be included into the question
             the last will be returned if choosen
WORD=WORD -  a list of possible values
             all will be included into the question
             the first will be returned if choosen
^$        -  ENTER

Return Values:

Exitcode:    Zero-Based Index of the Choosen PATTERN
             255 ask was aborted by typing CTRL-C

Output:      If Output is redirected, the output is either a part
             of the matching pattern (if PATTERN is given) or the
             entered text


--info     print info message     (green)
--warn     print warning message  (yellow)(bright)
--error    print error message    (red)(brightinvers)

--tty      use console colors

Beispiele:

ask "Kernel loeschen"
ask "Kernel loeschen" "no"
ask "Cronzyklus" "" "d|daily" "w|weekly" "m|monthly"
ask "Hostname" "eistest" "*"
ask "Hostname" "" "+" >result
answer=$(ask "Weiter" "y")
ask "Anzahl" "3" "1-7" >result
answer=$(ask "Select" "" "1-15" "^$=Return" "0=Exit")
ask --tty --info "Kernel loeschen" "no"

Um den Rückgabewert von ask bei einem Abbruch mit CTRL-C abfangen zu können, hat sich die folgende Variante bewährt:

_ask_tmpfile=$(/bin/mktemp -t ask.XXXXXXXXX)
/var/install/bin/ask "Select" "" "1-8" "^$=Return" "0=Exit" > ${_ask_tmpfile}
rc=${?}
read answer < ${_ask_tmpfile}
rm -f ${_ask_tmpfile}

# if ask break, ask returned 255
if [ ${rc} = 255 ]
then
    answer=0
fi

case "${answer}" in
'')
    exit 0
    ;;
0)
    exit 127
    ;;
*)
    tue das andere
    ;;
esac

9.4.2. /var/install/bin/choose

Über den Aufruf von choose kann eine Auswahlliste dargestellt werden. choose übernimmt dazu die gesamte Oberflächendarstellung.

  • Darstellung in Tabellenform (mittels techo )

  • Automatische Nummerierung der Zeilen

  • Rücksprung ohne eine Auswahl

  • Vorwärts- und rückwärtsblättern

  • Automatische Anpassung an Bildschirmgrösse (horizontal und vertikal)

  • Direktanzeige einer gewünschten Zeile beim Erstaufruf möglich

  • Deaktivieren einzelner Zeilen

Sofern im Environment SCROLL="yes" gesetzt ist, wird auf das Blättern verzichtet. Es werden dann immer alle Zeilen ausgegeben und der Anwender muss manuell scrollen.

In diesem Fall sind verschiedene der obigen Features natürlich nicht verfügbar.

choose kann nicht in Verbindung mit webconf genutzt werden.

Syntax:

/var/install/bin/choose ARRAY [START_POSITION]

Die übergabe der Daten an choose erfolgt analog der eisfair Konfigurationsdateien als mehrdimensionales Array. Hierfür wird im Folgenden MYARRAY verwendet.

Neben den eigentlichen Inhalten müssen folgende Werte übergeben werden:

Beispiel:

MYARRAY_TITLE="Mein Titel"       # Titelzeile
MYARRAY_SUBTITLE="Untertitel"    # optional ein Untertitel
MYARRAY_QUESTION="Select Item"   # Frage
MYARRAY_COLS="10 32r 10*"        # Spaltendefinition (analog techo)
MYARRAY_ROWS=345                 # Anzahl Zeilen

Bei der Spaltendefinition darf die erste Spalte mit den Auswahlnummern nicht mit angegeben werden. Diese wird von choose automatisch generiert.

Die Inhalte werden als Array übergeben:

Beispiel:

MYARRAY_1_1="Test"
MYARRAY_1_2="foo"
MYARRAY_1_3="1234"
MYARRAY_2_1="Beispiel"
MYARRAY_2_2="bar"
MYARRAY_2_3="5678"

Hier muss besonders darauf geachtet werden, dass die Anführungszeichen korrekt gesetzt werden:

Beispiele:

eval MYARRAY_$row_1=\"foo\"
eval MYARRAY_$row_1=\"'--info \"'foo bar foo bar'\"'\"
eval MYARRAY_$row_1=\"'--warn \"'$FOOBAR'\"'\"

Warnung

Alle Werte müssen per export an Subshells übergeben werden!

Nun kann choose aufgerufen werden:

Beispiel:

_ask_tmpfile=$(/bin/mktemp -t XXXXXXXXXXXXX)
/var/install/bin/choose MYARRAY 89  > ${_ask_tmpfile}
rc=${?}
read answer < ${_ask_tmpfile}
rm -f ${_ask_tmpfile}

[ $rc = 255 ] && exit 255

In diesem Beispiel wird mit der Anzeige direkt auf der Seite begonnen, auf der sich das im Array in Zeile 89 übergebene Element befindet.

Rückgabewerte:

""                 Return ohne Auswahl; Rücksprung in vorherige Ebene
"1" - "9999"       Ausgewähltes Element
"0"                Ende; sofortiges Beenden der Anwendung

über die Angabe MYARRAY_ACTIVE="no" kann man einzelne Spalten aus der Auswahlliste ausblenden. Damit wird diese Spalte in der Auswahlliste nicht berücksichtigt. Das ist z.B. bei jeglicher Art von Aufgabenlisten praktisch, da man so die bereits abgearbeiteten Punkte einfach aus der Liste entfernen kann, ohne diese komplett umsortieren oder gar neu aufbauen zu müssen.

Um auf jeder Seite wiederkehrende Spaltenüberschriften ausgeben zu können, werden diese per

Spaltenüberschriften

MYARRAY_CAPTION_1='--info "Spalte 1"'
MYARRAY_CAPTION_2='--info "Spalte 2"'

übergeben. Die Verwendung von Spaltenüberschriften ist optional.

Mittels MYARRAY_FLAGS können die folgenden optionalen Parameter übergeben werden:

  • --spread

  • --indent 12

  • --showexit

  • --list

  • --default 1

Bei der Angabe von --spread werden zwischen den einzelnen Zeilen jeweils eine Leerzeile ausgegeben und die gesamte Liste wird auf dem Bildschirm vertikal zentriert. Diese Funktion ist nur verfügbar, wenn die gesamte Liste auf einer Seite dargestellt werden kann. Ansonsten wird dieser Parameter ignoriert und es erfolgt eine normale Ausgabe.

Mittels --indent 12 kann ein größerer oder kleinerer linker Einzug angegeben werden.

Bei der Angabe von --showexit wird auf jeder Seite als letzter Punkt die Funktion „0“ ausgegeben:

Bei der Angabe von --list werden keine Nummerischen Werte ausgegeben und es gibt auch keine Auswahl für Numerische Werte. Es ist dann eine Anzeige.

Mittels --default 1 kann ein Wert übergeben werden der in der Auswahl als Default angezeigt werden soll.

--showexit

  1. Gallia est omnis divisa in partes tres, quarum unam incolunt
  2. Belgae, nostra Galli appellantur. hi omnes lingua, institutis,
  3. legibus inter a Belgis Matrona et Sequana dividit. horum omnium
  4. fortissimi sunt
  0. Return


145. agmine proelio nostros lacessere coeperunt. Caesar suos a proelio
146. pabulationibusque prohibere. ita dies circiter quindecim iter
147. fecerunt, non amplius quinis aut senis milibus passuum interesset.
  0. Exit

Um eigene Werte, die nicht angezeigt werden sollen, im Array abzuspeichern muss der Bereich MY (MYARRAY_MY_FOO) verwendet werden. Dadurch kann es zu keinen Überschneidungen der Namen bei zukünftigen Erweiterungen der Übergabestruktur kommen.

9.4.3. /var/install/bin/check-version

überprüft ein installiertes Paket auf seine Version

check-version package_name check_version
check-version -diff version-1 version-2

package_name   Paketname
check_version  Versionsnummer z.B. 1.0.1

Rueckgabewerte:

new            Abgefragte Version ist älter als die installierte
old            Abgefragte Version ist neuer als die installierte
installed      Paket ist installiert
not-installed  Paket ist nicht installiert

Beispiel:

if [ "$( /var/install/bin/check-version foo 1.0.0 )" = "not-installed" ]
then
    mecho --error "Required foo package not installed."
    mecho --error "Installation aborted."
    exit 1
fi

9.4.4. /var/install/bin/doc

Zeigt die Dokumentation eines Paketes an. Dabei ist der komplette Pfad zur Dokumentationsdatei mit zu übergeben.

doc file
doc file message

file           Dateiname der Dokumentationsdatei
message        Kopfzeile

Beispiel:

/var/install/bin/doc /usr/share/doc/foo/foo.txt "View foo documentation"

9.4.5. /var/install/bin/edit

Startet den Editor zum Editieren der Konfiguration

edit [--apply|--apply-stopstart] file
edit [--apply|--apply-stopstart] package message

--apply           Änderungen werden durch einen Restart sofort
                  übernommen.
--apply-stopstart Im Gegensatz zum Schalter --apply wird der Dienst hier
                  erst gestoppt, dann wird die Konfiguration geschrieben
                  und erst dann erfolgt der erneute Start des Dienstes.
file              Dateiname der Konfigurationsdatei
package           Name des Paketes
message           Kopfzeile

9.4.6. /var/install/bin/add-menu

add-menu dient zur Erstellung eines Menüeintrages (Untermenü) für das Setup

add-menu [--menu] [opt-parameter] menu-file sub-menu-file "comment"
add-menu --script [opt-parameter] menu-file script-file "comment"

--menu             - Untermenü (<menu>-Tag) erstellen   [default]
--script           - Skriptaufruf (<script>-Tag) anstelle des Untermenüs
                     erstellen


Optinale Parameter:
 --quiet           - alle Bildschirmausgaben unterdrücken

 --package package - fügt package="package" Attribute hinzu

 --pre pre-skript  - fügt pre="pre-script" Attribute hinzu

 --post post-script
                   - fügt post="post-script" Attribute hinzu



menu-file          - Dateiname relativ zum Menüverzeichnis /var/install/menu

                     Der neue Eintrag wird an dieses Menü angefügt.

sub-menu-file      - Dateiname relativ zum Menüverzeichnis /var/install/menu

                   - Der neue Eintrag
                      <menu file="sub-menu-file">comment</menu>
                     wird am Ende des Menüs „menu-file" angefügt, sofern
                     ein solcher Eintrag noch nicht im Menü vorhanden ist.

script-file        - Dateiname relativ zu /var/install/bin oder
                     absoluter Pfad

                   - Der neue Eintrag
                     <script file="script-file">comment</script>
                     wird am Ende des Menüs „menu-file" angefügt, sofern
                     ein solcher Eintrag noch nicht im Menü vorhanden ist.

comment            - Text, der im Menü angezeigt werden soll
                     Wenn der Text aus mehreren Worten besteht muss er
                     in "Mehrere Worte" eingefasst werden.

9.4.7. /var/install/bin/create-menu

create-menu dient zum Anlegen einer komplett neuen Menüdatei

/var/install/bin/create-menu menu-file menu-title

menu-file          - Dateiname relativ zum Menüverzeichnis
                     /var/install/menu.

menu-title         - Menütitel der über dem Menü angezeigt werden soll.

new style version (for XML-menus)

create-menu --menu setup.services.foo.menu --title 'foo administration' --package base

--quiet            - alle Bildschirmausgaben unterdrücken
--menu             - Dateiname relativ zum Menüverzeichnis /var/install/menu
--title            - Menütitel der über dem Menü angezeigt werden soll
--package          - Package Name für das neue Menü [optional]

9.4.8. /var/install/bin/del-menu

del-menu dient zur Entfernung eines Menüeintrags aus dem Setup

del-menu menu-file sub-menu-file
del-menu menu-file script-file

menu-file          - Dateiname relativ zum Menüverzeichnis /var/install/menu

sub-menu-file      - Dateiname relativ zum Menüverzeichnis /var/install/menu

                   - Die Zeile <menu file="sub-menu-file"> mit dem
                     angegebenen Untermenü wird aus dem Menü entfernt,
                     sofern es diese gibt.

script-file        - Dateiname relativ zu /var/install/bin oder
                     absoluter Pfad

                   - Die Zeile <script file="script-file">comment</script>
                     mit dem angegebenen Skript Aufruf wird aus dem Menü
                     entfernt, sofern es diese gibt.

9.4.9. /var/install/bin/add-user

Fügt einen neuen Benutzer zum System hinzu. Wird das Skript ohne Parameter aufgerufen, so werden die erforderlichen Informationen interaktiv abgefragt. Soll statt dessen keine Interaktion erfolgen, sind die Angaben auf der Kommandozeile an das Skript zu übergeben:

add-user [-d|-l|-r] user encrypted-password uid group real-name home shell

                   - leer für den interaktiven Modus
-d                 - zum Erstellen eines Benutzers der sich ohne
                     Passwort anmelden darf
-l                 - zum Sperren des Benutzerpasswortes
-r, --system       - Benutzer als Systembenutzer anlegen
user               - Login Namen des Benutzers
encrypted-password - Passwort in kodierter Form oder leer lassen
uid                - Benutzer ID oder leer lassen
group              - Name einer Benutzergruppe, eine Gruppen ID
                     oder leer lassen
real-name          - Beschreibung des Benutzers
home               - Heimatverzeichnis des Benutzers
shell              - Kommandointerpreter des Benutzers

Einige der Parameter sind optional und können je nach Anwendungsfall entfallen. Falls nachfolgende Parameter jedoch mit einem Wert belegt werden sollen, sind optionale Parameter als leere Zeichenkette ('') in die Befehlszeile einzufügen.

Wird ein optionaler Parameter leer übergeben, dann nimmt das Skript jeweils einen sinnvollen Standardwert an. Abhängig vom Argument sind dies die folgenden Werte:

Parameter    Standardwert
----------------------------------------
 uid         wird automatisch ermittelt!
 group       'users'
 real-name   ''
 home        "/home/${USER}"
 shell       '/bin/sh'

Falls eine Benutzergruppe vorgegeben werden soll, kann diese im Argument ‚group‘ festgelegt werden. Dabei kann - und sollte - die Angabe in Form des Namens der Gruppe erfolgen und braucht nicht als Nummer angegeben werden.

Beispiel Prüfen ob der Benutzers schon angelegt ist:

if ! getent passwd user >/dev/null 2>&1
then
    /var/install/bin/add-user ...
fi

Beispiel für das Anlegen eines Benutzers:

/var/install/bin/add-user \
    foo sdz8evwesdfs '' users "User foo" /home/foo /bin/bash

Beispiel für das Anlegen eines Systembenutzers ohne Anmeldeberechtigung:

/var/install/bin/add-user \
    -r firebird '*' '' firebird "Firebird SQL deamon" /srv/firebird /bin/bash

Beispiel für das Anlegen eines Benutzers, der sich ohne Passwort anmelden darf:

/var/install/bin/add-user \
    -d foo '' '' users "User foo" /home/foo /bin/bash

9.4.10. /var/install/bin/modify-user

ändert diverse benutzerspezifische Parameter, wie den Kommentar (-c), das Home-Verzeichnis (-d), das Ablaufdatum eines Benutzerkontos (-e), der Anzahl der Tage, nach denen das Benutzerkonto gesperrt wird (-f), die Benutzergruppe (-g) und die verwendete System-Shell (-s). Wird beim Aufruf des Skriptes keine Option angegeben, so wird ein Menü angezeigt, über welches die Änderungen interaktiv durchgeführt werden können.

modify-user
modify-user -c login-name comment
modify-user -d login-name home-directory [-m|-r]
modify-user -e login-name YYYY-MM-DD
modify-user -f login-name number-of-days
modify-user -g login-name group-name
modify-user -s login-name user-shell

login-name     Loginname des zu bearbeitenden Benutzerkontos.

comment        Kommentar.

home-directory Name des Home-Verzeichnises des Benutzers in /home.
               Durch die zusätzliche Angabe einer der folgenden
               Optionen kann das Verhalten dieser Funktion beeinflusst
               werden.

               -m - Das Ursprungsverzeichnis und dessen Inhalt wird
                    verschoben.

               -r - Es wird ein neues Home-Verzeichnis angelegt und das
                    Ursprungsverzeichnis wird gelöscht.

               '' - Es wird ein neues Home-Verzeichnis angelegt, das
                    Ursprungsverzeichnis bleibt unverändert erhalten.

YYYY-MM-DD     Ablaufdatum des Benutzerkontos. Wird 'never' eingegeben,
               so kann das Benutzerkonto unbefristet genutzt werden.

number-of-days Anzahl der Tage nach denen ein Benutzerkonto deaktiviert
               wird wenn dessen Kennwort abgelaufen ist. Bei Eingabe von
               '0' geschieht dies umgehend, wird 'never' eingegeben, so
               wird diese Funktion deaktiviert.

group-name     Name der Benutzergruppe.

user-shell     Name der System-Shell

9.4.11. /var/install/bin/remove-user

Entfernt einen Benutzer vom System. Systembenutzer können dabei nur durch Setzen des Schalters „-f“ entfernt werden.

remove-user [-f] user do-remove-homedir

-f                 - Systembenutzer löschen
user               - Benutzername
y, n               - zum Löschen des Basisverzeichnisses

Beispiel für das Entfernen eines Benutzers mit Löschen des Basisverzeichnisses:

/var/install/bin/remove-user foo y

Beispiel für das Entfernen eines Systembenutzers ohne Löschen des Basisverzeichnisses:

/var/install/bin/remove-user -f firebird n

9.4.12. /var/install/bin/add-group

Fügt eine neue Gruppe zum System hinzu. Wenn das Skript ohne Parameter aufgerufen wird, werden die Daten einzeln abgefragt. Zum Anlegen einer Gruppe ohne den Eingabedialog können folgende Parameter übergeben werden:

Um die Eigenschaften des System zu berücksichtigen, sollen die Gruppen IDs nicht hart vergeben werden,

add-group [--quiet] [-r] group [gid]


                   - leer für den interaktiven Modus
-r, --system       - Systemgruppe erstellen
-q, --quiet        - alle Bildschirmausgaben unterdrücken
group              - Name der Gruppe
gid                - Gruppen ID Nummer, leer lassen

Beispiel Prüfen ob die Gruppe schon angelegt ist:

if ! getent group gruppe >/dev/null 2>&1
then
    /var/install/bin/add-group ...
fi

Beispiel für das Anlegen einer Gruppe:

/var/install/bin/add-group foo

Beispiel für das Anlegen einer Systemgruppe:

/var/install/bin/add-group -r foo

9.4.13. /var/install/bin/remove-group

Entfernt eine Gruppe vom System. Systemgruppen können dabei nur durch Setzen des Schalters „-f“ entfernt werden.

remove-group [-f] group

-f                - Systemgruppe löschen
group             - Gruppenname

Beispiel für das Entfernen einer Gruppe:

/var/install/bin/remove-group foo

9.4.14. /var/install/bin/install-local-package

über dieses Skript ist es möglich, interaktiv Pakete zu installieren, die sich auf der lokalen Festplatte befinden, ohne dass zuvor manuell eine eis-list.txt-Datei erstellt werden muss.

Nach Eingabe des Verzeichnisnamens, in dem sich die Paket- und .info- Dateien befinden, wird dynamisch eine eis-list.txt-Datei erzeugt, welche dann menügeführt die Installation der Pakete ermöglicht. Das Skript merkt sich die zuletzt verwendeten Verzeichnisse und bietet diese im interaktiven Modus zur Auswahl an.

Zusätzlich ist es möglich, dem Skript über die Kommandozeile ein Verzeichnis mitzugeben bzw. das Löschen der temporären index.txt oder eis-list.txt-Dateien auf Wunsch zu verhindern (-keep-all). Wer diese Installationsfunktion fest in das existierende eisfair-Installationsmenü aufnehmen möchte, kann dies über den Switch ‚-add-menu‘ bewerkstelligen. Der Switch ‚-del-menu‘ entfernt den Menüeintrag wieder. Falls man das Skript nur für die Generierung der index.txt und eis- list.txt-Dateien verwenden möchte, kann man über den Switch ‚-no- install‘ den Aufruf der Installationsroutine verhindern.

Die verschiedenen Startvarianten im überblick:

install-local-package
  oder
install-local-package [--keep-all][--no-install] Verzeichnisname
  oder
install-local-package --add-menu
  oder
install-local-package --del-menu

Optionen: --add-menu   - Menüeintrag zum Installationsmenü hinzufügen
          --del-menu   - Menüeintrag aus Installationsmenü entfernen
          --keep-all   - eis-list.txt und index.txt-Dateien nicht
                         löschen
          --no-install - Nach dem Generieren der eis-list.txt und
                         index.txt-Dateien das Installationsskript
                         nicht starten.

9.4.15. /var/install/bin/sort-menu

Dieses Skript erlaubt die alphabetische Sortierung von Menü- Einträgen einer angegebenen Menüdatei.

sort-menu menu-file-name

menu-file-name     Name einer Menüdatei

9.4.16. /var/install/bin/check-package

Mit diesem Skript lässt sich überprüfen, ob ein Paket vorhanden ist. Ist das nicht der Fall, wird die Installation im Dialog eingeleitet. Intern arbeitet dieses Skript mit ‚check-version‘ zusammen.

Die Aufruf-Syntax

check-package
              -p, --setpackage      package_name
              -v, --setversion      package_version
              msg_do_now            write a message do now

Example:  check-package -p perl -v 1.2.0 "SUBVERSION_TOOLS_USE_PERL"

Die Angabe von -v, --setversion ist nicht zwingend, es kann auch nur auf das Paket geprüft werden.

Beispiel für die Prüfung eines Paketes und das Auswerten des Rückgabewertes.

Als Parameter dient in diesem Beispiel EISFAX_USER_1_PRN_INFO="yes" Für das Drucken der Information wird das Paket a2ps benötigt.

prn_info="${EISFAX_USER_1_PRN_INFO}"

case ${prn_info} in
yes)
    /var/install/bin/check-package -p "a2ps" "EISFAX_USER_1_PRN_INFO"

    case ${?} in
    0)
        : # alles OK (nun in die configfiles eintragen)
        ;;

    *)
        # nicht OK
        # Parameter zurücksetzen

        sed "s/^EISFAX_USER_1_PRN_INFO=.*/EISFAX_USER_1_PRN_INFO='no'/" \
                             /etc/config.d/eisfax >/tmp/CONFIG_FILE_TMP
        mv /tmp/CONFIG_FILE_TMP /etc/config.d/eisfax
        chmod 0600 /etc/config.d/eisfax

        # Fehlermeldung ausgeben

        mecho
        mecho --info " EISFAX_USER_1_PRN_INFO="
        mecho --info " a2ps"
        mecho --warn " was not installed and so"
        mecho --warn " not added to the config files."
        mecho --warn " Please solve that first"
        mecho
        anykey
        ;;
    esac
    ;;

*)
    : # nothing to do
    ;;
esac

9.4.17. /var/install/bin/check-folder

Mit diesem Skript lässt sich überprüfen, ob ein Folder/Verzeichnis vorhanden ist. Ist das nicht der Fall, wird das Verzeichnis im Dialog angelegt.

Die Aufruf-Syntax:

check-folder
             -f, --setfolder       /x/y/z
             msg_do_now            write a message do now

Example: check-folder -f /tmp/myfolder/attention "EISFAX_USER_${idx}_COPY_TO_PATH"

9.4.18. /etc/init.d/functions

Dieses Skript stellt Funktionen für das Init-Skript bereit. Es wird analog der eislib in das Init-Skript eingebunden. Das benutzen der eislib im Init-Skipt ist nicht erwünscht.

Beispiel für ein Init-Script:

#!/bin/sh
# -----------------------------------------------------------------------
# /etc/init.d/foo - init script for foo
#
# Creation:     2010-12-30  hbfl
# Last Update:  2010-12-30  hbfl
#
# Copyright (c) 2001-2019 the eisfair team, team(at)eisfair(dot)org
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# -----------------------------------------------------------------------

# include functions
. /etc/init.d/functions

# include configuration
. /etc/config.d/foo

_do_start ()
{
    boot_mesg " * Starting foo ..."
    loadproc foo
}

_do_stop ()
{
    boot_mesg " * Stopping foo ..."
    killproc foo
}

_do_status ()
{
    statusproc foo
}
_do_usage ()
{
    echo "Usage: $0 [-q|--quiet] {start|status|stop|restart}"
{

#--------------------------------------------------------------------------
# main
#--------------------------------------------------------------------------

while [ ${#} -gt 0 ]
do
    case "${1}" in
    -q|--quiet)
        _quiet=true
        shift
        ;;
    *)
        _action=${1}
        shift
        ;;
    esac
done

case "${_action}" in
start)
    _do_start
    ;;
stop)
    _do_stop
    ;;
restart)
    _do_stop
    sleep 3
    _do_start
    ;;
status)
    _do_status
    ;;
*)
    _do_usage
    exit 1
    ;;
esac

exit 0

Die Funktionen im Überblick

  • boot_mesg

    Ausgabe einer allgemeinen Meldung

    Dies sollte der Standardfall bei der Ausgabe von Meldungen sein. Ein Beispiel dafür ist die Ausgabe von Statusmeldungen beim Starten oder Stoppen eines Dienstes.

* Starting foo ...
  • loadproc

    Angabe des Programms das gestartet werden soll

  • killproc

    Angabe des Programms das gestoppt werden soll

    Dabei wird automatisch das Ergebnis [ OK ] [ FAIL ] [ WARN ] am rechten Rand der Arbeitsfläche hinter der boot_mesg Ausgabe gesetzt.

Beispiel:

boot_mesg " * Starting foo ... "
loadproc foo
* Starting foo ...                                                         [  OK  ]
  • statusproc

    Angabe des Programms für das der Status ausgegeben werden soll.

Unhabhängig von load- killproc lassen sich auch die Ausgaben von [ OK ] [ FAIL ] [ WARN ] erzeugen.

  • echo_ok

    Ausgabe von [ OK ].

  • echo_failure

    Ausgabe von [ FAIL ].

  • echo_warning

    Ausgabe von [ WARN ].

Diese Ausgaben erfolgen jeweils eine Zeile Höher an den rechten Rand der Arbeitsfläche.

Beispiel:

boot_mesg " Do foo ... "
_do_foo
retval=${?}
if [ ${retval} -eq 0 ]
then
    echo_ok
else
    echo_failure
    _do_bar
fi

Das Skript functions unterdrückt die Ausgaben auf die Console, wenn der Parameter _quiet=true gesetzt ist.

9.4.19. /var/install/bin/convert-encoding

Mit diesem Skript lässt sich die Kodierung in einem Skript an das vorhandene Encoding auf dem System anpassen. Wenn das Skript in UTF-8 Kodiert ist und das System UTF-8 Kodierung hat, wird nichts ausgeführt, wenn das System in ISO-8859-15 läuft wird das Skript nach ISO-8859-15 Kodiert.

Die Aufruf-Syntax:

convert-encoding
                  /pfad/zum/skript/

Example:  convert-encoding  /tmp/myfolder/myskript