Hi Leute
Ich möchte euch heute einmal ein paar Möglichkeiten zeigen wie man elog Messages anzeigen/archivieren/versenden kann.
Im großen und ganzen sind es 3 Möglichkeiten die ich euch zeigen möchte. Vermutlich wird es aber mehrere geben.
Die hier 3 beschriebenen werden sein:
1. Portage default elog Features
2. portage_mod-jabber
3. Simple bash-Script (thx to maggu)
1. Portage default elog Features:
Ob man es glaubt oder nicht, gentoo bietet sogar per default Möglichkeiten die elog-Messages zu filtern/auszugeben
Das ganze lässt sich bequem über die "
make.conf" einstellen.
Folgende Optionen stehen hier einem zur Verfügung:
|
Quellcode
|
1
2
3
4
5
6
|
PORTAGE_ELOG_CLASSES
PORTAGE_ELOG_SYSTEM
PORTAGE_ELOG_COMMAND
PORTAGE_ELOG_MAILURI
PORTAGE_ELOG_MAILFROM
PORTAGE_ELOG_MAILSUBJECT
|
Was haben nun die einzelnen Optionen für Funktionen:
PORTAGE_ELOG_CLASSES:
Mit dieser Variablen stellt man ein, was alles geloggt werden soll.
Möglichkeiten sind:
info = "
einfo" Meldungen aus ebuilds werden Protokolliert
warn = "
ewarn" Meldungen aus ebuilds werden Protokolliert
error = "
eerror" Meldungen aus ebuilds werden Protokolliert
log = "
elog" Meldungen aus ebuilds werden Protokolliert
qa = "
QA Notice" Meldungen aus ebuilds werden Protokolliert
PORTAGE_ELOG_SYSTEM:
Mit dieser Variablen gibt man an welche Logging-Module verwendent werden sollen:
Möglichkeiten sind:
echo: Zusammenfassung aller Nachrichten nach einem emerge Vorgang.
save: Speichert eine Log per Paket unter
"$PORT_LOGDIR/elog". Wenn die Variable
"$PORT_LOGDIR" nicht gesetzt ist, ist es der Standard-Pfad:
„/var/log/portage/elog“
custom: Die Log's werden mit Befehlen, die in der Variablen „
PORTAGE_ELOG_COMMAND“ stehen, weiter verarbeitet.
syslog: Sendet die Ausgaben an denn
Syslog Dienst.
mail: Versendet die Ausgaben per Mail.
save_summary: Das selbe wie save, nur wird alles in eine Datei gespeichert. (
$PORT_LOGDIR/elog/summary.log)
mail_summary: Wie Mail, nur wird nicht für jedes Paket eine extra Mail verschickt.
PORTAGE_ELOG_COMMAND:
Diese Variable kann nur in Verbindung mit dem „custom“ logging Modul verwendet werden. Hier kann man Befehle angeben welche die Logs verarbeiten.
Folgende Variablen können dabei benutzt werden:
${PACKAGE}: Paketname
${LOGFILE}: Absoluter Pfad zur Logfile
PORTAGE_ELOG_MAILURI:
In dieser Variable werden wichtige Informationen zur Mail-Zustellung angegeben, die man benötigt falls man sich die Messages per Mail zustellen will. (Modul:
mail)
Der Syntax lautet:
|
Quellcode
|
1
|
address [[user:password@]mailserver[:port]]
|
address: Absenderadresse
user: Benutzername für die Anmeldung am Mailserver
password: Password für die Anmeldung am Mailserver
mailserver: Name des mailserver's (Standard ist „localhost“, alternativ kann man auch denn Pfad zum Programm „sendmail“ angeben)
port: port zum mailserver (standard ist port 25, falls man eine starttls Anmeldung benötigt muss man denn Port + 100000 angeben. Das heißt zb, wenn der smtp auf port 25 lauscht und eine starttls Anmeldung erfordert, gibt man als port „
100025“ an)
Beispiel:
|
Quellcode
|
1
|
user@some.domain user:password@mail.some.domain:100025
|
PORTAGE_ELOG_MAILFROM:
Hier kann man denn Absender angeben:
ZB:
"portage@localhost"
PORTAGE_ELOG_MAILSUBJECT:
Hier kann man noch denn Betreff zur Mail angeben. Dazu gibt es 2 Variablen:
${PACKAGE}: Packetname
${HOST}: Hostname des Rechners
Der Betreff könnte dann zb so aussehen:
„
package \${PACKAGE} merged on \${HOST} with notice“
Mail-Einstellungen testen:
Die mail-Einstellungen könnt ihr mittels „glsa-check“ testen. Gebt einfach in die Konsole folgendes ein:
|
Quellcode
|
1
|
/usr/bin/glsa-check -m 200610-14Traceback
|
ACHTUNG: Bei diesem Test werden nur die Maileinstellungen getestet. Das heißt wenn ihr unter
PORTAGE_ELOG_SYSTEM nicht „
mail“ oder „
mail_summary“ angegeben habt, werden trotzdem keine emails verschickt.
Nun ein paar Beispiele:
Zuerst einmal eine Mail-Zustellung, wie ich sie zuhause getestet habe (inkl tls):
Die Messages werden dabei an meinen internen Mail-Server (tunafix) gesendet. (die Mails kann ich dann mittels imap abrufen)
|
Quellcode
|
1
2
3
4
5
|
PORTAGE_ELOG_CLASSES="log warn error"
PORTAGE_ELOG_MAILFROM="portage@asterix"
PORTAGE_ELOG_MAILSUBJECT="[portage] ebuild log for \${PACKAGE} on \${HOST}"
PORTAGE_ELOG_MAILURI="root@tunafix elog:geheim@tunafix:100025"
PORTAGE_ELOG_SYSTEM="save_summary echo mail"
|
Als nächstes ein Beispiel wo alle Messages an denn syslog dienst gehen, und gewisse Messages als Mail versendet werden (lokal):
|
Quellcode
|
1
2
3
4
5
|
PORTAGE_ELOG_SYSTEM="mail:warn,error syslog:* save“
PORTAGE_ELOG_MAILURI="root@localhost localhost"
PORTAGE_ELOG_MAILFROM="portage@some.domain"
PORTAGE_ELOG_MAILSUBJECT="package \${PACKAGE} merged on \${HOST} with notice"
PORTAGE_ELOG_CLASSES="warn error log"
|
Zum Schluss noch ein Beispiel wo die Funktion PORTAGE_ELOG_COMMAND verwendet wird. Hier werden einfach alle Logs nach "/root/log" kopiert:
|
Quellcode
|
1
2
3
|
PORTAGE_ELOG_CLASSES="log warn error"
PORTAGE_ELOG_SYSTEM="save custom"
PORTAGE_ELOG_COMMAND="/bin/cp \${LOGFILE} /root/log/"
|
2. portage-mod_jabber:
Diese Script ist eigentlich nur eine Erweiterung zum vorhanden elog System, um die elog-Nachrichten eben über einen jabber Account zu verschicken.
Zur installation:
|
Quellcode
|
1
|
echo "app-portage/portage-mod_jabber ~x86" >> /etc/portage/package.keywords
|
(geht auch mit ~amd64)
|
Quellcode
|
1
|
emerge -av portage-mod_jabber
|
Eingerichtet wird das Script folgendermaßen:
Zuerst muss man sich einen neuen jabber-Account erstellen. Zb bei jabber.org.
Am einfachsten geht das denk ich über einen Instant-Messanger. (Kopete,Gaim,Psi,usw...)
Danach trägt man folgendes in die make.conf ein:
|
Quellcode
|
1
2
3
|
PORTAGE_ELOG_SYSTEM="jabber"
PORTAGE_ELOG_JABBERFROM="$PASSWORD:$USER@jabber.org/$RESOURCE"
PORTAGE_ELOG_JABBERTO="$EMPFÄNGER"
|
PORTAGE_ELOG_SYSTEM: Kennen wir schon von oben. Mann gibt einfach als elog-Modul „jabber“ ein.
PORTAGE_ELOG_JABBERFROM: Absender
PORTAGE_ELOG_JABBERTO: Empfänger
$PASSWORD = das password des neu erstellten jabber-acc
$USER = ist der username des neu erstellten jabber-acc ("@jabber.org" kann natürlich auch ein anderer jabber-anbieter sein wie zb, gmail)
$RESOURCE = diese option ist optional, hier kann man zb denn computernamen eingeben, damit man weiß woher die message kommt
$EMPFÄNGER = hier gibt man die jabber adresse des empfängers ein.
Fertig sieht das ganze dann zum beispiel so aus:
|
Quellcode
|
1
2
3
|
PORTAGE_ELOG_SYSTEM="jabber"
PORTAGE_ELOG_JABBERFROM="geheim:portage_elog@gmail.com/laptop"
PORTAGE_ELOG_JABBERTO="admin@jabber.org"
|
3. Simple Bash Script (von maggu)
Zum Schluss will ich euch noch das Script von maggu zeigen, welches die alten elog-Messages ausgibt, archiviert (unter "var/log/portage") und die originalen Logs löscht.
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# have a look at the elog files
DATE="$(date +%F_-_%H-%M-%S)"
TAR="/var/log/portage/${DATE}.tar"
TMP="$(mktemp --tmpdir=/tmp ${DATE}.XXXXXXXXXX)"
for FILE in /var/log/portage/elog/*
do
echo -e "\n\n==== ${FILE} ===\n" >> ${TMP}
cat ${FILE} >> ${TMP}
tar rvf ${TAR} ${FILE}
rm ${FILE}
done
tar rvf ${TAR} ${TMP}
less ${TMP}
|
Ich hoffe ich konnte euch ein wenig helfen, falls ihr etwas sucht was eure elog-Massages archiviert/versendet. Die default-Möglichkeiten sind übrigens alle auch in der "
/etc/make.conf.example" beschrieben. Ich habe sie mehr oder weniger nur mit eigenen Worten übersetzt
greetz
Edit's:
Edit 28.08.08: Bessere Erklärung der Variable PORTAGE_ELOG_CLASSES
Edit 09.12.08: Fehler ausgebessert - thx an croonix