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.
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.
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
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.
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.
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.
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.
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.
Wird die Option -debug an die genannten Scripte übergeben, so werden detailliertere Informationen über eventuell gefundene Fehler ausgegeben.
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 ...
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 |
| 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 |
| 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