8. Sonstiges

8.1. Loggen von Meldungen

Um Status- oder Fehlermeldungen mitzuloggen gibt es unter Linux den Dienst „syslogd“. Über diesen Daemon werden die Meldungen an ein oder mehrere konfigurierbare Ziele weitergeleitet. Diese Einstellungen werden über die „Base configuration“ vorgenommen.

Es empfiehlt sich daher, kurze Status- und Fehlermeldungen aus dem Paket über den syslogd mitzuloggen. Dies kann einfach über den Aufruf

/usr/bin/logger -t $PACKAGE             \
                -p $FACILITY.$LEVEL     \
                "Text der Meldung"

# FACILITY: auth, authpriv (for security information of a sensitive nature),
#           cron, daemon, ftp, kern, lpr, mail, news, syslog, user, uucp,
#           local0 .. local7
# LEVEL:    alert, crit, debug, emerg, err, info, notice, warning

erfolgen. Details zum Aufruf sowie zu den möglichen Werten kann der Dokumentation zum logger entnommen werden und steht an verschiedenen Stellen im Internet zur Verfügung (Tip: Benutzung einer Suchmaschine).

Die Logausgaben werden dabei üblicherweise in die Datei /var/log/messages geschrieben. Damit diese Datei nicht endlos wächst, gibt es den logrotate, der in regelmäßigen Abständen die aktuelle logdatei mit xz komprimiert und eine neue Logdatei beginnt. Nach einer gewissen Zeitspanne werden dann die ältesten Archive gelöscht.

Da sehr viele verschiedene Dienste den Service des syslogd nutzen, ist dieser Dienst nicht besonders gut für umfangreichere Logausgaben geeignet. Daher sollen diese in eine eigene Logdatei /var/log/log.$PACKAGE erfolgen.

Um zu verhindern dass auch diese Dateien unbegrenzt wachsen, kann auch jedes Paket den logrotate-Mechanismus für seine eigenen Logausgaben nutzen. Der logrotate wird dabei durch die Anlage einer Steuerdatei im Verzeichnis /etc/logrotate.d/ gesteuert. Der Name dieser Steuerdatei muss wiederum dem Paketnamen entsprechen.

Beispiel für eine Logrotate-Konfigurationsdatei (Paket foo):

#-----------------------------------------------------------------------------
# /etc/logrotate.d/foo - foo logrotate configuration
#
# Creation:     2005-02-01  max
# Last Update:  2005-03-06  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.
#-----------------------------------------------------------------------------

/var/log/log.foo {
    rotate 7
    daily
    compress
    missingok
    notifempty
    create 644 root root
    }

Details zu dieser Steuerdatei können der Dokumentation des logrotate entnommen werden.

8.2. Cronjobs

Um automatisch zeitgesteuert ein Script ausführen zu können, beispielsweise um einen Statusreport zu erstellen, gibt es unter Unix „Cronjobs“. Diese können von eisfair-Paketen mittels eines einfachen Mechanismus angelegt werden. Es muss lediglich eine Steuerdatei in /var/cron/etc/root/ mit dem Namen des Pakets erstellt und die Aktualisierung des Cron-Daemon angestossen werden. Diese Aktualisierung geschieht mit dem Aufruf:

# update crontab file
/var/install/config.d/cron.sh

Beispiel für eine Cron-Konfigurationsdatei (Paket foo):

#
# Do not edit this file, edit /etc/config.d/foo
# Creation date: Fri Mar 11 19:54:43 CET 2005
53 3 * * * /var/install/bin/foo-cron
12 */2 * * * /var/install/bin/foo-cron2

In diesem Beispiel wird das Script /var/install/bin/foo-cron immer Nachts um 3:53 sowie das Script /var/install/bin/foo-cron2 jede 2. Stunde immer 12 Minuten nach der vollen Stunde gestartet.

Zur Konfiguration der Ausführungszeiten gilt folgende Reihenfolge: Minute Stunde Tag Monat Wochentag

Details dazu können der Dokumentation zu crontab entnommen werden.

8.3. Systemdateien aktualisieren

Manchmal ist es notwendig Einträge zu Systemdateien hinzuzufügen bzw. diese zu ändern. Damit die Dateien nicht direkt bearbeitet werden müssen, wurde ab dem base-Paket v1.0.8 eine einheitliche Schnittstellenfunktion realisiert. Initial wurden Funktionen für das Aktualisieren von /etc/host.allow, /etc/host.deny, /etc/services und /etc/inittab implementiert.

8.3.1. /etc/host.allow

Will ein Programm Einträge zu der Datei /etc/hosts.allow hinzufügen, so muss es eine Datei /etc/hosts.allow.$package schreiben, die wie folgt aussehen sollte:

#
# /etc/hosts.allow.nfsserver list file
# generated by /var/install/config.d/nfsserver.sh v1.0.1-3
#
portmap: 192.168.6.0/24
lockd:   192.168.6.0/24
rquotad: 192.168.6.0/24
mountd:  192.168.6.0/24
statd:   192.168.6.0/24

Um die Änderungen bzw. Ergänzungen abschliessend zu übernehmen, muss noch das Programm /var/install/bin/update-hosts.allow $package aufgerufen werden. Bei der Deinstallation des Paketes muss nur die Datei /etc/hosts.allow.$package gelöscht und erneut das update-hosts.allow-Script aufgerufen werden.

8.3.2. /etc/host.deny

Will ein Programm Einträge zur Datei /etc/hosts.deny hinzufügen, so muss es eine Datei /etc/hosts.deny.$package schreiben, die wie folgt aussehen sollte:

#
# /etc/hosts.deny.nfsserver list file
# generated by /var/install/config.d/nfsserver.sh v1.0.4-1
#
portmap: ALL
lockd:   ALL
mountd:  ALL
rquotad: ALL
statd:   ALL

Um die Änderungen bzw. Ergänzungen abschliessend zu übernehmen, muss noch das Programm /var/install/bin/update-hosts.deny $package aufgerufen werden. Bei der Deinstallation des Paketes muss nur die Datei /etc/hosts.deny.$package gelöscht und erneut das update-hosts.deny-Script aufgerufen werden.

8.3.3. /etc/services

Will ein Programm Einträge zur Datei /etc/services hinzufügen, so muss es eine Datei /etc/services.$package schreiben, die wie folgt aussehen sollte:

#
# /etc/services.antispam list file
# generated by /var/install/config.d/antispam.sh v1.2.2
#
spamd           783/tcp               # SpamAssassin daemon

Um die Änderungen bzw. Ergänzungen abschließend zu übernehmen, muss noch das Programm /var/install/bin/update-services $package aufgerufen werden. Als Basis wird immer die Datei /etc/services.std verwendet deren Einträge dann ersetzt bzw. zu der neue Einträge hinzugefügt werden. Bei der Deinstallation des Paketes muss nur die Datei /etc/services.$package gelöscht und erneut das update-services-Script aufgerufen werden.

8.3.4. /etc/inittab

Will ein Programm Einträge zur Datei /etc/inittab hinzufügen, so muss es eine Datei /etc/inittab.$package schreiben, die wie folgt aussehen sollte:

#
# /etc/inittab.vbox list file
# generated by /var/install/config.d/vbox.sh v1.0.4-1
#
I6:2345:respawn:/usr/local/vbox/sbin/vboxgetty -d /dev/ttyI6
I7:2345:respawn:/usr/local/vbox/sbin/vboxgetty -d /dev/ttyI7

Um die Änderungen bzw. Ergänzungen abschließend zu übernehmen, muss noch das Programm /var/install/bin/update-inittab $package aufgerufen werden. Als Basis wird immer die Datei /etc/inittab.std verwendet deren Einträge dann ersetzt bzw. zu der neue Einträge hinzugefügt werden. Bei der Deinstallation des Paketes muss nur die Datei /etc/inittab.$package gelöscht und erneut das update-inittab-Script aufgerufen werden.

8.3.5. /etc/sudoers

Ab der base Version 1.7.2 gibt es eine Änderung für /etc/sudoers. Sudo kennt nun

# includedir /etc/sudoers.d

Will ein Programm Einträge zur Datei /etc/sudoers hinzufügen, so muss es eine Datei /etc/sudoers.d/$package schreiben, die wie folgt aussehen sollte:

#
# /etc/sudoers.d/eisfax list file generated by eisfax Version 1.2.0
#
Cmnd_Alias EISFAX2PDF = /usr/bin/tiff2pdf
Cmnd_Alias EISFAXCHOWN = /bin/chown
Cmnd_Alias EISFAXCHMOD = /bin/chmod

fax ALL = NOPASSWD: EISFAX2PDF, EISFAXCHOWN, EISFAXCHMOD

Für diese Datei ist ein Filemod von 440 zwingend erforderlich. chmod 0440 /etc/sudoers.d/$package

8.3.6. Debug-Modus

Wird die Option -debug an die genannten Scripte übergeben, so werden detailliertere Informationen über eventuell gefundene Fehler ausgegeben.

8.3.7. Beispiel

Die Implementierung wird am Beispiel der Konfiguration des nfsserver-Paketes gezeigt:

...

pgmname=$(basename $0)

# set file names
configfile=$testroot/etc/config.d/nfsserver
generate_hostsallow=/etc/hosts.allow.nfsserver

# other parameters
nfsserver_version="v1.0.1"

...

echo "#"
echo "# $generate_hostsallow list file"
echo "# generated by $pgmname $nfsserver_version"
echo "#"

...

# set access rights
chown root $generate_hostsallow
chgrp root $generate_hostsallow
chmod 0640 $generate_hostsallow

# update file
/var/install/bin/update-hosts.allow $pgmname

...

8.3.8. Gruppen- und User-IDs

Gruppen und/oder User IDs sollen nicht hart vergeben werden. Es sollen die dafür vorhanden Skripte benutzt werden die die Eigenschaften des System berücksichtigen.

siehe => add-user

/var/install/bin/add-user

und => add-group

/var/install/bin/add-group