IBM Thinkpad T60p

Entfernten Router ohne Portfreigabe und Ping in Nagios auf Verfügbarkeit überprüfen

26. Januar 2012

Hosts lassen sichmit einem Trick auch dann auf Verfügbarkeit überprüfen, wenn sie keine offenen Dienste anbieten. Ich verwende den folgenden Trick beispielsweise um mitzubekommen, wenn in meiner alten Heimat das Internet ausfällt. Da ich dort keinen Server hinter der Firewall im Router hängen habe, gehe ich also direkt an den Router. Dieser benötigt dringend die Dyndns-Funktion, damit er nach jedem Reconnect seine IP auf einen Hostname mappt.

Wenn dies gegeben ist, schaut man mit einem NMAP-Scan einfach mal, welche Ports der Router zur Verfügung stellt – hierbei werden auf nicht offene Ports angezeigt:

 

# nmap -PN HOSTNAME-DES-ROUTERS

Starting Nmap 5.00 ( http://nmap.org ) at 2012-01-26 22:14 CET
Interesting ports on hostname-des-routers (ip-adresse-des-routers):
Not shown: 999 filtered ports
PORT     STATE  SERVICE
5060/tcp closed sip

Nmap done: 1 IP address (1 host up) scanned in 76.13 seconds

 

In diesem Fall ist der Router über den Port 5060 (VoIP) erreichbar (typisch für aktuelle Router mit VoIP-Funktionalität) – ein Verbindungsversuch wird abgewiesen:

 

# telnet HOSTNAME-DES-ROUTERS 5060
Trying xx.yy.zz.iii...
telnet: Unable to connect to remote host: Connection refused

 

Wenn der Router nicht zur Verfügung steht, kommt es hier zum Timeout anstatt zur Ablehnung der Anfrage – diesen Effekt kann man sich zunutze machen und herauszufinden, ob der Router am Netz hängt. Es wird also einfach ein Host für den Router in Nagios definiert. Normalerweise überprüft Nagios definierte Hosts erstmal anhand der hinterlegten IP und PING auf Verfügbarkeit – da dies hier ja nicht möglich ist, wird ein dediziertes Check-Kommando und ein höherer Überprüfungsintervall definiert. Als Folge hiervon wird der Host z.B. alle 30 Minuten überprüft und als Online markiert, wenn die Verbindungsanfrage abgewiesen wird.

 

Zunächst einmal wird das Kommando definiert:

 

# nano commands.cfg
...
define command{
        command_name    check-host-alive-by-voip-refused
        command_line    $USER1$/check_tcp -H $HOSTADDRESS$ -p 5060 -r ok
}

…dannach folgt der Host mit oben genannter Anpassung:

 

# nano router-blah.cfg
define host{
        use linux-server
        host_name router-blah
        alias blah
        address HOSTNAME-DES-ROUTERS
        check_command check-host-alive-by-voip-refused
        check_interval 30
        max_check_attempts 2
        }

 

Die Zuordnung check_interval 30 steht hier für eine Überprüfung im Abstand von 30 Minuten. Ich persönlich würde hier nicht den Standard-Wert von 5 Minuten übernehmen – ich kann mir vorstellen, dass der ISP hier vielleicht einen Angriff vermutet und Gegenschritte unternimmt (wenn einer der Admins wirklich mal auf die Leitung schauen sollte :P ).

Nach einem erneuten Einlesen der Nagios-Konfiguration sollte das Ganze ohne Probleme funktionieren:

 

# service nagios reload

 

Router-Überwachung in Nagios

Router-Überwachung in Nagios

 

Mal schauen, wie lange es dauert, bis der ISP mir Stress macht. :D

“ORA-12154: TNS: could not resolve the connect identifier specified”-Fehler bei Spacewalk

26. Januar 2012

Bei der Verwendung von Spacewalk in Kombination einer Oracle-Datenbank (die ja vorrausgesetzt wird, da der PostgreSQL-Support eingestellt wird) kann es zu folgenden Fehlern kommen:

 

# less /usr/share/tomcat6/logs/catalina.out
...
java.sql.SQLException: ORA-12154: TNS:could not resolve the connect identifier specified

 

Die Lösung war bei mir, dass der Connection-String bei der Installation nicht korrekt angegeben wurde. Ich verwende die Oracle Database 10g Express Edition und habe, wie in der Anleitung angegeben, die SID XE angegeben. Offensichtlich war das nicht korrekt, nach langer Sucherei habe ich den Tipp gefunden, dort //localhost/XE einzutragen. Und siehe da, damit ist die Installation geglückt.

 

Darüber hinaus müssen die folgenden Variablen in der Datei /etc/sysconfig/osa-dispatcher eingetragen werden:

 

# less /etc/sysconfig/osa-dispatcher
 ...
 ORACLE_SID=XE
 export ORACLE_SID
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
 export ORACLE_HOME

 

…und schon klappt’s auch mit der Oracle Datenbank. :)

Lenovo Thinkpad Advanced Dock

25. Januar 2012

Ein Arbeitskollege hat mir heute seine nahezu unbenutzte Thinkpad Advanced Dock geschenkt – darüber freut man sich doch. :)

Die Advanced Dock ersetzt meine Advanced Mini Dock und bietet mir die Möglichkeit, eine dedizierte PCI Express-Grafikkarte einzubauen. Damit könnte ich den Engpass der flachbrüstigen ATI-Grafikkarte meines R500 umgehen.

Die Dock ist ein wenig größer als die Advanced Mini Dock bzw. Essential Dock und bietet darüber hinaus noch ein fest eingebautes Netzteil und eine zusätzliche Ultrabay – letztere allerdings leider nur mit IDE.

 

Mehr Infos zur Advanced Dock finden sich hier: http://thinkpad-wiki.org/Advanced_dock und http://www.thinkwiki.org/wiki/ThinkPad_Advanced_Dock

 

Mal schauen, welche Grafikkarte sich am Besten für die Dock eignet. Die Herausforderung ist es nämlich, eine passive Karte zu finden, die erstens Low Profile/Half-Length ist und zweitens in den Sockel passt. Idealerweise nimmt man hier eine Karte ohne große Kühlrippen. Darüber hinaus darf die Karte nicht mehr als 50 Watt verbrauchen und damit zurecht kommen, dass sie nur mit einem Lane angebunden wird. Die Risercard wird nämlich auf einem PCIe x1-Port an das Thinkpad angebunden.

 

Anbei noch einige Fotos:

 

 

:)

HP StorageWorks DAT72x10 Autoloader ohne Deckel in Aktion

22. Januar 2012

Hat einer von Euch schon mal einen Bandroboter ohne Deckel in Aktion gesehen? Ich finde das echt beeindruckend.

Ich musste meinen DAT72-Autoloader heute zerlegen, weil sich ein Band quergestellt hat und das Gerät somit nicht mehr wollte. Bei der Gelegenheit habe ich mir mal den Initialisierungsprozess ganz aus der Nähe angeschaut und in einem Video dokumentiert.

Interessant fand ich auch, dass sich hinter einer abgeklebten Stelle (von der ich dachte, sie verdeckt einige Schrauben, die das Gehäuse zusammenhalten) noch ein RJ45- und ein USB-Port versteckten. Leider kann ich nicht herausfinden, wozu die gut sind.

 

 

BlockOutTraffic und IPCop 2.x: The requested URL /cgi-bin/fwrulesadm.cgi was not found on this server.

12. Januar 2012

Die Tage habe ich ein wenig mit der neuen IPCop-Version 2.x “gespielt” und meinen produktiven IPCop nachgebaut, um diesen vor der Umstellung ausgiebig zu testen. Dabei habe ich auch alle vorher genutzten Plugins nachinstalliert. Dabei habe ich nicht bemerkt, dass beispielsweise das Plugin BlockOutTraffic für IPCop 1.4.x nicht mehr notwendig ist – die Funktionalität dieses Plugins ist mittlerweile fester Bestandteil von IPCop und versteckt sich hinter der “erweiterten Firewall”.

 

Wenn man das Plugin dennoch installiert, zerstört man sich die Webseite zur Administration der Firewall-Regeln – das kennzeichnet sich dadurch, dass man danach beispielsweise die folgende Fehlermeldung erhält:

 

The requested URL /cgi-bin/fwrulesadm.cgi was not found on this server.

 

Eine Versionsüberprüfung wird im Installationsskript von BlockOutTraffic offensichtlich nicht durchgeführt, daher wird einfach installiert und – in diesem Fall – das ein oder andere überschrieben und zerstört.

 

Im IPCop-Forum gibt es eine sehr übersichtliche Liste der Plugins, die es mittlerweile für IPCop 2.x gibt und der, die obsolet sind und nicht mehr dediziert installiert werden müssen: http://www.ipcop-foruhttp://www.ipcop-forum.de/forum/viewtopic.php?f=57&t=26035m.de/forum/viewtopic.php?f=57&t=26035

 

Und siehe da – wer liest, der schrottet auch seine Firewall nicht. :D

NETDriod – jetzt auch mit Koukaam NETIO-230B Support

8. Januar 2012

Dank der zahlreichen interessierten Beta-Tester habe ich die Tage herausgefunden, dass sich meine App bisher nicht mit der Koukaam NETIO-230B zurecht kam. Der Grund war hierfür, dass sich das TCP/IP-Socket ein wenig “empfindlicher” verhält als das der NETIO-230A.

 

Freundlicherweise hat mir Dennis seine NETIO-230B zur Verfügung gestellt, damit ich diesen Bug fixen kann (besten Dank nochmals! :) ) – das ist heute geschehen.

 

Die nächste Alpha-Version von NETDriod kann somit auch NETIO-230B Steckdosenleisten verwalten. Mir ist allerdings aufgefallen, dass die NETIO-230B ein wenig “zickiger” ist, als die 230A – es kann also gut sein, dass die erste Verbindung zwei oder drei Mal hergestellt werden muss. Dieses Verhalten ist nicht reproduzierbar. Einfach im Hinterkopf behalten. :)

 

Genug der Worte – schaut es euch mal an:

 

 

Vielen herzlichen Dank nochmals an die zahlreichen Beta-Tester, die mich erst auf diesen Bug aufmerksam gemacht haben! :)

Somebody That I Used to Know – Walk off the Earth

8. Januar 2012

 

 

Sehr gelungener und amüsanter Cover! :-)

Wie öffentliche IP-Adresse vom Heimnetzwerk herausfinden wenn der DynDNS-Hostname nicht funktioniert?

6. Januar 2012

Genau diese Frage habe ich mir heute gestellt. Offensichtlich gibt es bei DynDNS technische Probleme oder Limitierungen bei den begehrten Free-Accounts, die es einem beispielsweise ermöglichen, auf einfache Art und Weise auf das Netzwerk zuhause zuzugreifen ohne täglich IPs zu notieren.

 

Ich verwende einen solchen DynDNS-Hostname, um mich täglich ab und an daheim einzuwählen um auf meine Nagios-Instanz zuzugreifen. Die letzten Wochen und Monate habe ich regelmäßig das Problem, dass mein DynDNS-Hostname nicht auf die aktuelle IP-Adresse gelinkt wird. Das ist natürlich unschön, da mein VPN-Login mit dem DynDNS-Hostname vorgenommen wird. In einem solchen Fall kann ich mich also nicht einloggen, da mich der Hostname ins Timeout-Nirvana führt.

 

Hierfür habe ich jetzt eine schicke Lösung – benötigt wird lediglich ein Webserver im Internet und ein aktiver Host im Heimnetzwerk, auf dem man 2 kleine PHP-Skripte und ein temporäres Lockfile anlegt. Heutzutage kein Problem, einen öffentlichen Webspace haben die meisten ohnehin. Das Prinzip ist folgendes:

  • Tritt der DynDNS Hostname-Fehler auf, wird Skript 1 (ip.php) aufgerufen, welches ein temporäres Lockfile anlegt (dem entsprechenden Zielordner müssen vorher Schreibrechte eingeräumt worden sein)
  • Der aktive Host im Heimnetzwerk prüft periodisch mittels Skript 2 (ip_request.php) ob ein Lockfile vorhanden ist
  • Ist ein Lockfile vorhanden wird mittels PHP mail() eine Mail mit der öffentlichen IP versendet und das Lockfile gesendet
  • Idealerweise schützt man das Verzeichnis auf dem Webserver mittels HTAccess

 

Am besten realisiert man das Ganze auf dem Host im Heimnetzwerk mit einem kleinen Cronjob:

 

*/2 * * * * root        wget http://BENUTZERNAME:PASSWORT@WEBSERVER.TLD/ip_request.php -O /dev/null

 

 

ip.php:

 

<?php
 if(is_file("tmp/ip_request") == false)
 {
 $datei = fopen("tmp/ip_request","w");
 fwrite($datei, "foo");
 fclose($datei);
 echo "Request sent.";
 }
 else { echo "Request to get IP was already sent."; }
 ?>

 

 

 

ip_request.php:

 

<?php
 if(is_file("tmp/ip_request"))
 {
 mail("DEINE-MAIL@SERVER.TLD", "My current IP",
 "My current IP is: ".$_SERVER['REMOTE_ADDR'],
 "From: DEIN NAME <DEINE-MAIL@SERVER.TLD>");
 unlink("tmp/ip_request");
 echo "Request answered, thanks.";
 }
 ?>

 

 

Funktioniert bei mir wunderbar – ideal, wenn man ohnehin irgendwo noch einen Host im Netzwerk am Laufen hat. :-)

Oracle Database 11g Express Edition bleibt schwarz

29. Dezember 2011

Wenn Oracle 11g Express Edition sich nach der Installation nicht konfigurieren lässt:

 

# service oracle-xe configure
...
Starting Oracle Net Listener...Done
Configuring database...
Database Configuration failed.  Look into /u01/app/oracle/product/11.2.0/xe/config/log for details

 

…und sich im Log ähnliche Meldungen wie…

 

# less /u01/app/oracle/product/11.2.0/xe/config/log/*
...
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0

…finden, dann ist es gut möglich, dass der Listener einfach nicht funktioniert, weil er seinen eigenen FQDN nicht auflösen kann.

Einfach mal schauen, welchen Hostname der Oracle Listener verwendet:

 

# grep "HOST =" /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
      (ADDRESS = (PROTOCOL = TCP)(HOST = tvm-db02.testdomain.loc)(PORT = 1521))

 

…wenn dieser Hostname nicht “angepingt” werden kann, ist das vermutlich schon die Problemursache. Einfach den Hostname in die /etc/hosts eintragen und die Konfiguration noch einmal vornehmen:

 

# ping tvm-dbo2.testdomain.loc
ping: unknown host tvm-db02.testdomain.loc
# echo "192.168.1.31    tvm-db02.testdomain.loc   tvm-db02" >> /etc/hosts
# service oracle-xe configure
...
Configuring database...Done
Starting Oracle Database 11g Express Edition instance...Done
Installation completed successfully.

 

Und schon klappt’s. :)

RPM-Datenbank nach größerem CentOS Update hinüber

27. Dezember 2011

Bei größeren Updates von RHEL 3.x bzw. CentOS 3.x kann es vorkommen, dass sich die RPM-Datenbank verabschiedet. Dies ist an der folgenden Fehlermeldung beim Verwenden von YUM zu erkennen:

 

# yum install foo bar
rpmdb: Program version 4.2 doesn't match environment version
error: db4 error(22) from dbenv->open: Das Argument ist ungültig
error: cannot open Packages index using db3 - Das Argument ist ungültig (22)
error: cannot open Packages database in /var/lib/rpm
Traceback (most recent call last):
  File "/usr/bin/yum", line 30, in ?
    yummain.main(sys.argv[1:])
  File "/usr/share/yum/yummain.py", line 163, in main
    (log, errorlog, filelog, conf, cmds) = parseCmdArgs(args)
  File "/usr/share/yum/yummain.py", line 75, in parseCmdArgs
    conf=yumconf(configfile=yumconffile)
  File "/usr/share/yum/config.py", line 155, in __init__
    self.yumvar['releasever'] = self._getsysver()
  File "/usr/share/yum/config.py", line 285, in _getsysver
    idx = ts.dbMatch('provides', self.distroverpkg)
TypeError: rpmdb open failed

Abhilfe schafft das händische Löschen des RPM-Katalogcaches und nachträgliche Neuanlegen des selbigen:

 

# rm -rf /var/lib/rpm/__db*
# rpm --rebuilddb

Nächste Einträge »