Kleine und große Linux AHAs
perl
MailMig Teil 6: Hokus Pokus Fidibus – Thunderbird Konfiguration wie von Zauberhand
28. Okt
Wie im letzten Artikel angekündigt hier nun ein paar Tipps, wie man Thunderbird in größeren Umgebungen automatisch konfigurieren kann. In unserem Beispiel im Zusammenspiel mit Group-Office, allerdings ist das recht flexibel.
Die Lösung für ISPs
Was schon recht bekannt ist, ist die automatische Konfiguration der Server für ein Konto entsprechend der Domain. Das ganze ist beschrieben im MDC. Das ist jedoch nur eine Unterstützung, da dieses Verfahren lediglich – anhand der Domain aus der Email Adresse – die Server (Name, Ports, SSL…) für den Email Empfang bzw. Versandt bestimmt.
Die Lösung für den Mittelstand
Weniger bekannt ist die Möglichkeit, die komplette Konfiguration beim Start, beispielsweise per http, zur Verfügung zu stellen. Wir haben damit bisher folgendes realisiert:
- Mailkonto komplett konfiguriert, inkl. einheitlicher Signatur, speziellen Ordnern (…)
- LDAP Addressbuch fertig konfiguriert
- vorgegebene Startseite
- vorgegebene Schriftarten
- Proxy Konfiguration
- automatische Updates disabled
Man bedenke, dass all diese Einstellungen komplett automatisch geschehen ohne zutun des Anwenders oder Admins.
Nagios Plugin: check_snmp_storage – kleines Hilfswerkzeug
19. Jul
In meinem Artikel “Nagios Plugin – check_snmp_storage” hatte ich einen von mir erweiterten Nagios Plugin vorgestellt der mit einem Aufruf mehrere Partitionen/Platten prüft, und dabei trotzdem für jede Prüfung verschiedene warn/crit Werte akzeptiert.
Wer damit arbeitet und zwischendurch einmal bei der ein oder anderen Partition die Grenzwerte angepasst hat wird wissen, dass es je nach Menge der Partitionen recht mühsam ist die richtigen Wertepaare zu finden. Bei mir gibt es beispielsweise öfter mal sowas:
check-snmp-storage-multi!nagios!80,80,80,80,80,80,80,80,80!90,90,90,90,90,90,90,90,90!/,/var,/custom,/opt,/opt/om,/svc,/sbase,/estore,/opt/trans
ITler sind faule Menschen. Also hab ich mir ein Script geschrieben. Dieses Script zeigt mir das alles in einer Tabelle und lässt mich ganz easy Änderungen durchführen. Bei der Erstellung des Scripts habe ich nicht wirklich darauf geachtet das ganze für viele nutzbar zu machen. Wer Interesse hat sollte sich das also vorher mal anschauen
Linux & Windows Links: schöner öffnen mit win_path
20. Apr
Wer einen Linux Desktop beruflich nutzt, bekommt je nach Umgebung diverse Aufgaben gestellt um sich in einem heterogenen Netzwerk zurecht zu finden. Dazu gehört zum Beispiel Lotus Notes ans Laufen zu bringen oder auch der gemeinsame Zugriff auf zentrale Laufwerke.
Fileserver werden (leider) recht selten unter Linux betrieben. Von daher muss man Möglichkeiten und Wege finden sich damit zu arrangieren. Im folgenden möchte ich ein Script vorstellen, welches einen Teil dieser Interoperabilität sehr einfach unterstützt.
Worum geht es ?
Man bekommt eine eMail. In dieser Mail wird auf ein zentral abgelegtes Dokument verwiesen. Wie ? Na ganz einfach per “I:\Ordner\Dokument.doc” – ein Link auf ein gemapptes Laufwerk. Unter Ubuntu darauf klicken und Firefox (das wird als Link verstanden) sagt “Ich weiß nicht wirklich was ich damit machen soll !”.
Lösung !
Ich habe ein Script geschrieben, welches dieses Szenario wie folgt löst:
- Link kopieren
- Script starten
- es öffnet sich Nautilus, bzw. die Anwendung
Das ganze hört sich erst einmal komplizierter an als es ist. Das Script starten kann man eleganter weise nämlich z.B. über gnome-do oder mit einem einfachen Shortcut unter Gnome erledigen. Dann macht das ganze auch Sinn und ist komfortabel.
Prerequisites:
- libnotify-bin
- xclip
- um gemappte Laufwerke (s. Beispiel oben) zu nutzen, müssen diese an einem zentralen Punkt beispielsweise per auto-mounter zur Verfügung stehen. Im Script ist das ganze bei mir unter /mnt/cifs/ gemappt. Diese einzelnen Laufwerke und deren Pfade müssen im Script angepasst werden.
#!/usr/bin/perl -w
#
# Script zum oeffnen von Windows "Links" unter Ubuntu
#
# - Umsetzung von Links wie I:\Ordner\dokument.doc
# - das Dokument wird direkt geoeffnet
# - Umsetzung von Links wie I:\Ordner
# - der Ordner wird in Nautilus geoeffnet
# - Umsetzung von Links wie \\Server\... wird ebenfalls unterstuetzt
#
# Prerequisites:
# - libnotify-bin
# - xclip
#
# Ronny Becker, 02.2009
# get clipboard data
$path=`xclip -o -selection c`;
chomp($path);
# show information
system("DISPLAY=:0.0 dbus-launch /usr/bin/notify-send -u low -t 3000 \"Win Path\" \"\nöffne\n\n\'$path\'\"");
if ( $path !~ /[a-zA-Z]/ ) { exit; }
# LW \\...
if ( $path =~ /^\\\\/ ) {
$path =~ s/^\\\\/smb:\/\//;
}
# for each drive a separate config
# LW Q (Dokumentation)
if ( $path =~ /^[qQ]:/ ) {
$path =~ s/^[qQ]:/\/mnt\/cifs\/Q/;
}
# mapped drive I
if ( $path =~ /^[iI]:/ ) {
$path =~ s/^[iI]:/\/mnt\/cifs\/I/;
}
# mapped drive W
if ( $path =~ /^[wW]:/ ) {
$path =~ s/^[wW]:/\/mnt\/cifs\/W/;
}
# mapped drive L
if ( $path =~ /^[lL]:/ ) {
$path =~ s/^[lL]:/\/mnt\/cifs\/L/;
}
# set \ to /
$path =~ s/\\/\//g;
# if the link target is a document use xdg-open, otherwise open with nautilus (folder)
if ( $path =~ /\.[a-z]{3}$/ ) {
system("xdg-open \"$path\"");
} else {
system("nautilus \"$path\"");
}
Download: win_path
Damit man sieht, dass das Script auch ausgeführt wird, wird der an das Script übergebene Link per “Bubble” angezeigt. Das Script kann natürlich auch auf der Konsole ausgeführt werden – z.B. zur Fehlersuche.
[Update]
Ein Update wegen eines xclip Problems gibt es hier.
DS4800 Monitoring mit Hilfe von Cacti
26. Jan
Ohne die von IBM mitgelieferten Tools ein graphisches Monitoring der Auslastung (I/Os, kb/s, cachehit) der DS4800 zu bekommen ist nicht so einfach – aber gelöst. Im folgenden das Wie? .
Teil I: Woher kommen die Daten ?
Die Daten bekommt man mit dem von IBM verfügbaren “SMcli” (Storage Manager Command Line Interface Utility). Dieses Programm kann sich mit den beiden Controllern eines Subsystems verbinden und gibt mit diversen Parametern einen “Haufen” Zahlen aus, die es im zweiten Schritt zu analysieren gilt.
Der Befehl:
/opt/IBM_DS/client/SMcli 192.168.12.100 192.168.12.101 -c "set session performanceMonitorInterval=60 performanceMonitorIterations=5; show allLogicalDrives performanceStats;"
Das Ergebnis (nach 5 Minuten):
Performing syntax check... Syntax check complete. Executing script... Performance Monitor Statistics for Storage Subsystem: DS4800_1_EG Date/Time: 1/26/10 11:29:05 AM Polling interval in seconds: 60 Storage Subsystems,Total,Read,Cache Hit,Current,Maximum,Current,Maximum ,IOs,Percentage,Percentage,KB/second,KB/second,IO/second,IO/second Capture Iteration: 1 Date/Time: 1/26/10 11:29:05 AM CONTROLLER IN SLOT A,30661.0,59.4,63.6,42082.3,42082.3,502.6,502.6, Logical Drive DLX001_VOL11_ASM7,1459.0,67.9,13.0,237.5,237.5,23.9,23.9, Logical Drive DLX001_VOL3_MD1,102.0,2.9,0.0,28.0,28.0,1.7,1.7, Logical Drive DLX001_VOL5_ASM3,2031.0,75.5,25.6,363.4,363.4,33.3,33.3, Logical Drive DLX002_VOL1_ASM1,961.0,85.7,97.0,795.8,795.8,15.8,15.8, Logical Drive DLX002_VOL5_ASM3,830.0,84.2,97.6,959.2,959.2,13.6,13.6, ...
Auf die Zahlen möchte ich an dieser Stelle nicht weiter eingehen. Das wichtige dabei zu wissen ist, dass dieses Programm alle 60 Sekunden die Zahlen erfasst, jedoch erst nach 5 Minuten (performanceMonitorIterations=5) die Zahlen ausgibt und ebenfalls konsolidiert. Danach beendet sich das Programm. Das macht die Integration in Cacti schwieriger. Cacti erwartet quasi “jetzt” Daten.
Das ganze wurde durch einen cronjob gelöst. Die SMcli Processe werden alle 5 Minuten gestartet – um eine Minute versetzt; also zu jeder 4,9,13… Minute. Dadurch hat SMcli noch genügend Zeit um die Daten auszugeben, bevor Cacti zu jeder 0,5,10… die Daten abfragt. Das Script für den cronjob sieht so aus:
#!/bin/bash
CACHE_PATH="/var/cache/cacti"
FILE_EXT=`date +%s`
# DS4800_1_eg
( /opt/IBM_DS/client/SMcli 192.168.12.100 192.168.12.101 -c "set session performanceMonitorInterval=60 performanceMonitorIterations=5; show allLogicalDrives performanceStats;" > ${CACHE_PATH}/1_eg_${FILE_EXT}; mv ${CACHE_PATH}/1_eg_${FILE_EXT} ${CACHE_PATH}/last_1_eg ) &
# DS4800_2_bu
( /opt/IBM_DS/client/SMcli 192.168.12.110 192.168.12.111 -c "set session performanceMonitorInterval=60 performanceMonitorIterations=5; show allLogicalDrives performanceStats;" > ${CACHE_PATH}/2_bu_${FILE_EXT}; mv ${CACHE_PATH}/2_bu_${FILE_EXT} ${CACHE_PATH}/last_2_bu ) &
Die IP Adressen sind dabei die Controller Adressen (ob dazu irgendwelche Rechte notwendig sind weiß ich leider nicht). Wie man sieht wird der Output zuerst in eine temporäre Datei geschrieben. Nachdem SMcli beendet ist, wird diese Datei zu last_X.. gemoved – das ganze muss man natürlich anpassen. Notwendig ist das, damit in der Theorie ein SMcli laufen kann, während ein anderes bereits für diese Datei gestartet wird.
Teil II: Das cacti Script (LUNs & Controller).
Am Ende möchten wir Graphen der Controller, als auch von den LUNs haben. Von daher gibt es für cacti zwei Scripte, welche die Daten der oben generierten Dateien auslesen. Das erste Script (ds_perfmon.pl) bekommt als Parameter den Namen einer LUN (so ist sie auch in Cacti (hostname) angelegt).
host#./ds_perfmon.pl SDS1_SILBER_DS4800_1_02 totios:1890.6 readpercent:0.26 cachehit:0 currentkb:127.9 maxkb:179.2 currentio:10.06 maxio:15.64
Nebenbei meldet das Script per logger (syslog) jeden morgen um 08:00 Uhr, wenn die gewünschte LUN nicht mehr vorhanden ist.
Download: DS Perfmon LUN Script.
Das zweite Script ist für die Auswertung der Controller zuständig.
Dabei gibt es zwei Aufrufmöglichkeiten:
- als Parameter die Controller Nummer (entsprechend der Konfiguration innerhalb des Scripts)
- als Parameter s – für “summary” (Statistik über alle Controller)
Innerhalb des Scripts werden die Controller und die zugehörigen Dateien definiert. Dabei gibt es – sofern in jeder DS zwei Controller stecken – immer einmal “CONTROLLER IN SLOT A” und “… IN SLOT B” für jede Datei. Die Variablen “all_controller” und “data_files” sind also korrespondierend und müssen jeweils über gleich viele Einträge verfügen. Am Ende werden dann die Controller durchnummeriert – entsprechend der Position im Array (all_controller/data_files; angefangen bei 1).
host# ./ds_perfmon_Controller.pl 1 readpercent:51.54 cachehit:66.2 currentkb:11804.82 currentio:542.58
host# ./ds_perfmon_Controller.pl s readpercent:2846.4 cachehit:3345.6 currentkb:45.4075049471902 currentio:35744.4
Download: DS Perfmon Controller
Teil III: Die Cacti Konfiguration.
Die cacti Konfiguration ist – für Euch – ganz einfach. Die Konfiguration kann einfach per .xml heruntergeladen werden.
DS4000 Cacti Konfig (.tgz(.xml))
Danach kann mit Hilfe der folgenden Schritte das Monitoring eingerichtet werden:
- “create new Host”
- Description/Hostname für die LUNs = Name der LUN; für den Controller = beliebig (bspw. DS 4800 Controller 1)
- “Host Template” für die LUNs = “DS4000″; für die Controller = “DS4000 Controller”
- “Downed Device Detection” -> none
- create
- “create graphs for this host” -> alle angebotenen anklicken und “create”
- (für Controller wird noch die Nummer des Controllers (s. Teil II) abgefragt)
Damit sollte dann alles erledigt sein.
Nagios Plugin – check_snmp_storage (update)
20. Mai
Plugin Update
Der Plugin akzeptiert in der “ursprünglichen” Form für Fenster (im englischen Windows) Systeme nicht einfach die Angabe des Laufwerkbuchstabens. Das ganze habe ich nun ebenfalls angepasst. Man kann also nun mit dem gleichen Aufruf Linux und Fester Systeme abfragen.
ex. --> check_snmp_storage_dld.pl -H pw300eg -m C,D -C public -w 80,80 -c 90,90 -r
Download: check_snmp_storage
Nagios Plugin – check_snmp_storage
18. Mai
Schon lange benutze ich den Nagios Plugin check_snmp_storage von dieser Seite um per SNMP und Nagios den Plattenplatz auf Systemen zu prüfen. Dabei hat man leider nur zwei Wahlmöglichkeiten um Partitionen zu checken (im groben). Entweder man nimmt alle – oder man nimmt nur eine. Dadurch hat man im einen Fall entweder zu viel drin, oder auf der anderen Seite muss man mehrere Dienste in Nagios anlegen um alle Informationen zu bekommen die man haben möchte. Was mehr Dienste bedeutet und auch mehr Traffic.
Den Plugin habe ich ein wenig angepasst, so dass der Plugin mehrere Partitionen mit einem Aufruf prüfen kann und man auch – und das war eben wichtig – für jede Partition eigene Schwellenwerte angeben kann.
Vorher: ... -m / -w 80 -c 90 -r (-> prüfe / mit einem Warning Schwellwert von 80% und einem Critical Schwellwert von 90%)
Nachher: ... -m /,/var,/tmp -w 80,70,90 -c 90,85,95 -r (-> prüfe / (W80%, C90%),/var (W70%, C85%) und /tmp (W90%,C95%) )
Hier gibt es das von mir abgewandelte check_snmp_storage zum Download.
perl daemon mit input aus einer named pipe
07. Mai
Auch sowas wo ich lange nach gesucht habe. Möchte man, dass ein Perl Programm den Input einer named pipe verarbeitet, so wird man als erstes auf ein Problem stossen. Das Programm wird sich nach jeder Eingabe beenden. Mein erster Code sah zum Beispiel so aus:
#!/usr/bin/perl -w
open(THISPIPE, ") {
echo $_;
}
close THISPIPE;
So würde wohl jeder erste Versuch aussehen. Das Problem liegt darin, dass sobald Daten über die Pipe ausgetauscht werden, auch ein EOF mitgegeben wird. Dieses EOF wird von Perl als solches auch interpretiert und die Datei wird geschlossen.
Umgehen kann man das, indem man einen Trick anwendet und die Datei nicht nur zum lesen öffnet, sondern zum Lesen und Schreiben. Dadurch wird die Datei nicht nach einem EOF geschlossen und der Daemon lauscht weiterhin auf der Pipe. Das sieht dann so aus:
#!/usr/bin/perl -w
open(THISPIPE, "+) {
echo $_;
}
close THISPIPE;





