Unterabschnitte

Sonstiges

Loggen von Meldungen

Um Statusmeldungen 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 Statusmeldungen 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 gzip 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-2007 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.

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.

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.
Ab dem base-Paket v1.3.0 erfolgt dieses auch fuer /etc/sudoers

/etc/host.allow

Will ein Programm Einträge zu der Datei /etc/hosts.allow hinzufügen, so muß 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 abschließend zu übernehmen, muß noch das Programm /var/install/bin/update-hosts.allow $package aufgerufen werden. Bei der Deinstallation des Paketes muß nur die Datei /etc/hosts.allow.$package gelöscht und erneut das update-hosts.allow-Script aufgerufen werden.

/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 abschließend zu übernehmen, muß noch das Programm /var/install/bin/update-hosts.deny $package aufgerufen werden. Bei der Deinstallation des Paketes muß nur die Datei /etc/hosts.deny.$package gelöscht und erneut das update-hosts.deny-Script aufgerufen werden.

/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, muß 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 muß nur die Datei /etc/services.$package gelöscht und erneut das update-services-Script aufgerufen werden.

/etc/inittab

Will ein Programm Einträge zur Datei /etc/inittab hinzufügen, so muß 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, muß 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 muß nur die Datei /etc/inittab.$package gelöscht und erneut das update-inittab-Script aufgerufen werden.

/etc/sudoers

Will ein Programm Eintraege zur Datei /etc/sudoers hinzufuegen, so muß es eine Datei /etc/sudoers.$package schreiben, die wie folgt aussehen sollte:

#
# /etc/sudoers.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

Um die Aenderungen bzw. Ergaenzungen abschließend zu uebernehmen, muß noch das Programm /var/install/bin/update-sudoers $package aufgerufen werden. Als Basis wird immer die Datei /etc/sudoers.upd130 verwendet deren Eintraege dann ersetzt bzw. zu der neue Eintraege hinzugefuegt werden. Bei der Deinstallation des Paketes muss nur die Datei /etc/sudoers.$package geloescht und erneut das update-sudoers-Script aufgerufen werden.

Debug-Modus

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

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-3"

...

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

...

Gruppen- und User-IDs

Um weiteres Chaos zu vermeiden, wurde jetzt eine Liste von uids und gids festgelegt, an die sich alle weiteren Packages halten sollte. Die Liste wurde aus den Einträgen von Debian Woody und SuSE gemischt, wobei im Zweifelsfall Debian das letzte Wort hatte.

Username uid gid
root 0 0
daemon 1 1
bin 2 2
sys 3 3
games 5 5
man 6 100
lp 7 7
mail 8 8
news 9 9
uucp 10 10
proxy 13 13
at 25 -
postgres 26 26
majordom 30 31
postgres 31 32
wwwrun 30 33
backup 34 34
operator 37 37
list 38 38
irc 39 39
ftp 40 49
gnats 41 41
exim 42 42
named 44 44
postfix 51 51
mysql 60 60
zope 64 2
sshd 71 65
firebird 84 84
nobody 65534 65534
identd 100 65534

Gruppenname gid
root 0
daemon 1
bin 2
sys 3
adm 4
tty 5
cdisk 6
lp 7
mail 8
news 9
uucp 10
proxy 13
kmem 15
dialout 20
fax 21
voice 22
cdrom 24
floppy 25
tape 26
sudo 27
audio 29
dip 30
majordom 31
postgres 32
video 33
backup 34
operator 37
list 38
irc 39
src 40
gnats 41
trusted 42
utmp 43
named 44
ftp 49
staff 50
postfix 51
maildrop 59
mysql 60
man 62
sshd 65
firebird 84
users 100
maschines 777
nobody 65533
nogroup 65534

Wer meint, daß in dieser Liste ein Eintrag fehlt, der solle sich in der Newsgroup spline.eisfair.dev melden.

Jens Vehlhaber 2008-03-01