Univention Bugzilla – Bug 18002
Logrotate-Konfigurationsdateien sollten in die jeweiligen Pakete verschoben werden
Last modified: 2012-03-26 16:19:39 CEST
Bei der Korrektur von Bug 17795 fiel auf, dass die Log-Rotation für die UCS-eigenen Logdateien momentan direkt in /etc/logrotate.conf-UCR-Template gepflegt wird: /var/log/univention/*.log { weekly missingok rotate @%@log/rotate/weeks@%@ create 640 root adm lastaction Der Debian-Standard ist das jedes Paket eine eigene Konfigurationsdatei unter /etc/logrotate.d mitbringt. Das ermöglicht auch Dienst-spezifische Berechtigungen, z.B. für /var/log/univention/directory-manager-web.log und /var/log/univention/management-console-web.log werden die Berechtigungen z.Zt. als Workaround durch ein externes Skript auf www-user geändert.
Dieses Problem hat uns intern die Nagios SMS-Benachrichtigung zerlegt da Nagios in die rotierte Logdatei nicht schreiben konnte.
Das sollten wir uns zur 3.0 anschauen.
Die zentrale Konfiguration für alle /var/log/univention/*.log Dateien verhindert auch, daß der UVMMd für sein spezielles Logfile sich dort einklinken kann, um nach der Rotation sein Logfile neu zu öffnen; siehe Bug #20465.
Im univention-config-registry-Paket wurde das Rotieren von /var/log/univention/* entfernt. svn24078
Über "univention-base-files" werden nun folgende "logrotate" UCR Variablen gesetzt. Die beiden alten Variablen "log/rotate/weeks" und "log/rotate/univention/compress" werden auf ihre neuen Pendants umgesetzt. Das Template für /etc/logrotate.conf wurde entsprechend angepasst. logrotate/rotate?weekly logrotate/rotate/count?12 logrotate/compress?yes logrotate/missingok?yes logrotate/create?"640 root adm" logrotate/notifempty?yes Über die Funktion "getLogrotateConfig(name, ucr)" in ucrLogrotate.py() aus "univention-lib" können anhand eines Namens diese Variablen ausgewertet werden. Zunächst werden die globalen Variablen geprüft (logrotate/rotate) dann die Variable mit dem übergebenen Namen, damit neben der globalen Konfiguration auch eine Konfiguration pro Logdatei möglich ist. -> import univention.lib.ucrLogrotate -> import univention.config_registry -> ucr = univention.config_registry.ConfigRegistry() -> ucr.load() -> print univention.lib.ucrLogrotate.getLogrotateConfig("aaa", ucr)["rotate"] weekly -> ucr["logrotate/aaa/rotate"] = "daily" -> univention.lib.ucrLogrotate.getLogrotateConfig("aaa", ucr)["rotate"] daily Die Pakte können dann für ihre Logdateien entsprechende Templates der Logrotate Konfig mitbringen: -> cat /etc/univention/templates/files/etc/logrotate.d/univention-pkgdb @%@UCRWARNING=# @%@ @!@ import univention.lib.ucrLogrotate name = "pkgdb" settings = univention.lib.ucrLogrotate.getLogrotateConfig(name, configRegistry) print "/var/log/univention/%s.log {" % name for setting in settings.keys(): print "\t%s" % settings[setting] @!@ } Ohne eigene Logrotate Konfiguration in univention-pkgdb werden nur die globalen Variablen verwendet, die Konfig würde dann so aussehen: -> cat /etc/logrotate.d/univention-pkgdb /var/log/univention/pkgdb.log { rotate 12 create 640 root adm weekly compress missingok notifempty } Falls für "pkgdb.log" eine abweichende Konfiguration gewünscht ist, kann diese durch Setzen der entsprechenden Variablen erzeugt werden: -> ucr set logrotate/pkgdb/rotate/count="99" -> ucr set logrotate/pkgdb/rotate=yearly -> cat /etc/logrotate.d/univention-pkgdb /var/log/univention/pkgdb.log { rotate 99 create 640 root adm yearly compress missingok notifempty } Die Pakete die Logdateien verwenden wurden wie folgt angepasst: * Abhängigkeit auf python-univention-lib (>= 1.0.25-1) in debian/control * neues ucr Template /etc/logrotate.d/PAKETNAME, welches die entsprechenden Logdateien enthält * univention-config-registry Konfiguration für das Template Folgende sind es: * base/univention-maintenance * base/univention-heimdal * services/univention-dhcp * base/univention-server * base/univention-ssl * base/univention-system-setup * management/univention-directory-listener * mail/univention-spamassassin * management/univention-directory-logger * management/univention-directory-manager-modules * base/univention-updater * management/univention-directory-notifier * management/univention-directory-policy * management/univention-directory-replication * management/univention-directory-reports * management/univention-join * management/univention-management-console * services/univention-log-collector * services/univention-ad-connector * services/univention-pkgdb * services/univention-s4-connector * services/univention-samba4 * services/univention-samba * services/univention-shares * services/univention-printserver * virtualization/univention-virtual-machine-manager-daemon QA sind dies alle?
(In reply to comment #5) > Über die Funktion "getLogrotateConfig(name, ucr)" in ucrLogrotate.py() aus > "univention-lib" können anhand eines Namens diese Variablen ausgewertet werden. ... > * base/univention-ssl Dieses Paket wird bereits im PreUp zwangsweise aktualisiert. Zu dem Zeitpunkt ist aber noch die ale univention-lib installiert, die noch kein ucsLogrotate kennt. Im Update-Log ist dass ein entsprechender Traceback zu sehen, wenn die Datei durch UCR commited wird. Hier sollte getestet werden, ob das kritisch ist. Entweder muß hier univention-lib auch ins PreUp vorgezogen werden, oder eine andere Lösung für univention-ssl gefunden werden, oder nach dem Update ein allgemeines "u-c-r commit" ausgeführt werden, um alle Dateien neu zu generieren. (ggf. ist letzteres bereits der Fall)
Das Template in univention-ssl wurde so angepasst, das es eine fehlende univention.lib.ucrLogrotate abfängt und nichts macht. Da bei den Logrotate UCR Variablen eh immer alle Templates gebaut werden, wird die univention-ssl logrotate Konfig dann einfach später korrigiert.
Created attachment 3825 [details] Corrections
Created attachment 3826 [details] Code cleanup
Das sind noch ein paar Dinge offen, siehe vorallem Attachment 3825 [details]
univention-base-file: add dpkg-divert univention-heimdal: fixed path, add heimdal-database univemtion-server: added check_connection.log (mobile, managed) univention-ssl: fixed try,except univention-updater: @!@ stuff, added errata-updates, removed security-updates univention-directory-manager-modules: @!@ stuff univention-join: @!@ stuff univention-ad-connector: @!@ stuff univention-s4-connector: fixed univention-samba: @!@ stuff univention-samba4: @!@ stuff univention-virtual-machine-manager-daemon: added sharedscripts univention-printserver: INVALID /var/log/univention/printserver-start.log is used in /etc/init.d/cups Für die "Code cleanup" Sachen bitte einen neuen Bug anlegen (-> 3.x) TODO: univention-virtual-machine-manager-daemon, univention-samba4 bauen
Die beiden Pakete wurden noch gebaut, aus dem logrotate Template in univention-join ist der Teil für die join.log entfernt wurden.
In den Templates für univention-virtual-machine-manager-daemon, univention-s4-connector und univention-managment-console wurden die Wildcards aus den Variablennamen entfernt.
OK: Die Logrotate-Konfigurationsdateien wurden alle verschoben: # find /var/log/ -type f | grep -E -v -f <(grep -h --only '/var/log/\S\+' /etc/logrotate.d/* | sed -re 's,\*,.*,;s,$,(\.[0-9]+(\.gz)?)?,') /var/log/univention/join.log /var/log/univention/debootstrap.log.gz /var/log/univention/installer.log.gz /var/log/univention/installation.log.gz OK: i.d.R. nur einmalig angelegt, kein LR gewünscht. /var/log/univention/security-updates.log OK: Altlast aus UCS-2.4 /var/log/univention/directory-reports-cleanup.log OK: Das wurde in svn29538 korrigiert. FAIL: ChangeLog fehlt? Da die Änderung Benutzer-sichtbar ist, sollte da IMHO was stehen.
ergänzt
OK: ChangeLog svn11105 OK: Weitere Verbesserungen an Bug #24889 #!/bin/sh set -e -x C=virtual-machine-manager-daemon DC=$(ucr get logrotate/rotate/count) DR=$(ucr get logrotate/rotate) DM=$(ucr get logrotate/missingok) ucr () { /usr/sbin/ucr "$@" >/dev/null 2>&1; } grep () { /bin/grep -q "$1" "/etc/logrotate.d/univention-$C"; } ucr set logrotate/$C/missingok=0 ; ! grep missingok ucr set logrotate/$C/missingok=1 ; grep missingok ucr set logrotate/$C/missingok=yes ; grep missingok ucr set logrotate/$C/missingok=no ; ! grep missingok ucr unset logrotate/$C/missingok ; grep missingok ucr set logrotate/missingok=no ; ! grep missingok ucr set logrotate/missingok="$DM" ; grep missingok ucr set logrotate/$C/rotate=monthly ; grep monthly ucr set logrotate/$C/rotate/count=42 ; grep rotate\ 42 ucr unset logrotate/$C/rotate/count ; grep "rotate $DC" ucr unset logrotate/$C/rotate ; grep "$DR" ucr set logrotate/rotate=monthly ; grep monthly ucr set logrotate/rotate="$DR" ; grep "$DR" OK: VERIFIED
UCS 3.0-0 wurde veröffentlicht. Sollte der hier beschriebene Bug mit einer neueren Version von UCS erneut auftreten, so sollte dieser Bug dupliziert werden: "Clone This Bug"