Bug 18002 - Logrotate-Konfigurationsdateien sollten in die jeweiligen Pakete verschoben werden
Logrotate-Konfigurationsdateien sollten in die jeweiligen Pakete verschoben w...
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: General
UCS 2.3
Other Linux
: P5 normal (vote)
: UCS 3.0 - RC
Assigned To: Felix Botner
Philipp Hahn
:
Depends on:
Blocks: 24889 26615
  Show dependency treegraph
 
Reported: 2010-03-30 09:48 CEST by Moritz Muehlenhoff
Modified: 2012-03-26 16:19 CEST (History)
2 users (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:


Attachments
Corrections (17.23 KB, patch)
2011-11-18 15:51 CET, Philipp Hahn
Details | Diff
Code cleanup (11.18 KB, patch)
2011-11-18 15:53 CET, Philipp Hahn
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Moritz Muehlenhoff univentionstaff 2010-03-30 09:48:47 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.
Comment 1 Janis Meybohm univentionstaff 2010-07-05 15:13:32 CEST
Dieses Problem hat uns intern die Nagios SMS-Benachrichtigung zerlegt da Nagios in die rotierte Logdatei nicht schreiben konnte.
Comment 2 Stefan Gohmann univentionstaff 2010-07-19 06:21:59 CEST
Das sollten wir uns zur 3.0 anschauen.
Comment 3 Philipp Hahn univentionstaff 2011-02-25 17:12:48 CET
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.
Comment 4 Philipp Hahn univentionstaff 2011-05-12 11:41:41 CEST
Im univention-config-registry-Paket wurde das Rotieren von /var/log/univention/* entfernt.

svn24078
Comment 5 Felix Botner univentionstaff 2011-10-12 12:52:44 CEST
Ü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?
Comment 6 Philipp Hahn univentionstaff 2011-10-21 09:28:30 CEST
(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)
Comment 7 Felix Botner univentionstaff 2011-10-24 14:38:42 CEST
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.
Comment 8 Philipp Hahn univentionstaff 2011-11-18 15:51:21 CET
Created attachment 3825 [details]
Corrections
Comment 9 Philipp Hahn univentionstaff 2011-11-18 15:53:07 CET
Created attachment 3826 [details]
Code cleanup
Comment 10 Philipp Hahn univentionstaff 2011-11-18 15:53:49 CET
Das sind noch ein paar Dinge offen, siehe vorallem Attachment 3825 [details]
Comment 11 Felix Botner univentionstaff 2011-11-18 17:19:23 CET
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
Comment 12 Felix Botner univentionstaff 2011-11-21 09:45:40 CET
Die beiden Pakete wurden noch gebaut, aus dem logrotate Template in univention-join ist der Teil für die join.log entfernt wurden.
Comment 13 Felix Botner univentionstaff 2011-11-21 16:35:05 CET
In den Templates für univention-virtual-machine-manager-daemon, univention-s4-connector und univention-managment-console wurden die Wildcards aus den Variablennamen entfernt.
Comment 14 Philipp Hahn univentionstaff 2011-11-24 16:36:24 CET
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.
Comment 15 Felix Botner univentionstaff 2011-11-24 16:47:38 CET
ergänzt
Comment 16 Philipp Hahn univentionstaff 2011-11-25 11:12:10 CET
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
Comment 17 Sönke Schwardt-Krummrich univentionstaff 2011-12-13 15:49:19 CET
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"