Categories
Programmierung

PHP: IP ranges überprüfen

Quick and dirty PHP-Script zum überprüfen ob eine IP-Adresse in einem angegebenen IP-Range ist.


$ranges = array(
    "10.10.10.2-4",
    "192.168.0-255.0-255",
    "10.20.0.1",
    );

if (inIpRange("10.10.10.3", $ranges)) {
    echo "bingo!";
}

function inIpRange($needle, $haystack) {

    if (!is_array($haystack)) {
        $haystack = array($haystack);
    }

    foreach ($haystack as $ip) {

        $d = explode('.', $ip);
        $r = explode('.', $needle);

        foreach ($d as $key => $num) {

            if (strpos($num, '-') !== false) {
                $range = explode('-', $num);

                if ($r[$key] < $range[0] || $r[$key] > $range[1]) {
                    continue 2;
                }
            } elseif ($num != $r[$key]) {
                continue 2;
            }
        }

        return true;
    }

    return false;
}
Categories
Linux

OpenNMS: Performance tuning

Nachdem OpenNMS zwei Jahre gelaufen ist wurde es zuletzt immer langsamer. Klar, neue Nodes, Services etc. erhöhen die Last. Also Zeit für eine Optimierung. Die in meinem Fall wichtigsten Punkte:

  • Postgres Konfiguration
  • eigene RRD Partition (noatime,nodiratime)
  • Events aufräumen

Generell ist die IO Performance der Bereich worauf es bei OpenNMS am meisten ankommt. Nebenbei bemerkt läuft OpenNMS hier in einer Virtuellen Maschine. Zwar wird generell davon abgeraten OpenNMS in einer VM laufen zu lassen, aber das bezieht sich hauptsächlich auf die meist geringere IO Performance. Da hier in diesem Fall KVM mit virtio (auf lokalem Storage) im Einsatz ist und nicht an einem NAS/SAN hängt ist ist die Warnung denke ich zu vernachlässigen ;).

Bzgl. der Postgres Performance habe ich im wesentlichen die Config von hier übernommen.

Wichtige Links:
http://www.opennms.org/wiki/Performance_tuning
http://www.opennms.org/wiki/RRD_performance_fundamentals
http://www.opennms.org/wiki/Event_Configuration_How-To#The_Database

Vorher/Nachher:

PS. das Nachlassen der Last hat natürlich nichts mit dem Wochenende zu tun…

Categories
Linux Tools

nmon: Linux Performance Monitor

Nmon ist ein gutes Tool um sich auf der Konsole schnell einen Überblick über eventuelle Performanceprobleme zu verschaffen. CPU Auslastung, Netzwerk, IO Daten/Laufwerke, Prozesse etc. werden übersichtlich und z.T. grafisch dargestellt. Es gibt sogar auch eine CPU Langzeitstatistik welche auf der Console (!) einen “schönen” Graphen zeichnet – nicht unbedingt ein Mehrwert aber nett anzusehen ;).

Bei Ubuntu ist “nmon” in den Standard-Repositories enthalten, bei Centos/RHEL leider nicht.

Categories
Allgemein Linux

Firefox 4 RC

Habe mir soeben den Release Candiate von Firefox 4 installiert. Bis jetzt alles sehr positiv. Er fühlt sich vorallem spürbar schneller an als der Vorgänger. Firefox Sync ist jetzt integriert. Schade ist allerdings, dass sich unter Ubuntu/Linux die Tabs und die Menüleiste nicht so verhalten wie bei der neuen Version unter Windows.

Praktisch sind die neuen “App”-Tabs mit denen man häufig benötigte Seiten “anpinnen” kann. Dabei fällt auf, das OpenNMS noch kein Favicon hat ;)

Categories
Linux

OpenNMS: Services löschen

Wenn man bei OpenNMS einige Services aus der poller-configuration.xml entfernt, werden diese zwar nicht mehr überwacht, tauchen aber nach wie vor in der Serviceliste des jeweiligen Interface auf (“Not Monitored”). Theoretisch sollte OpenNMS diese Services nach 5 Tagen (Default) entfernen. Ich bin mir allerdings nicht sicher ob diese dann komplett entfernt werden oder nur auf “Not Monitored” gesetzt werden. Die Doku bzw. einige Einträge auf der Mailingliste sind da etwas widersprüchlich – und 5 Tage warten wollte ich nicht.

Manuell können die Services im Webinterface gelöscht werden indem man auf das Interface geht, dann den Service auswählt und schließlich auf “Delete” klickt. Bei hunderten Interfaces ist das etwas mühsam. Daher habe ich folgendes Script gebastelt welches die gewünschten Services bei allen Nodes und Interfaces löscht (Benutzung auf eigene Gefahr!):

#!/bin/bash

for i in `psql -qAt -F";" -c 'select ipaddr,nodeid from ipinterface;' -d opennms opennms`; do
  IF=`echo $i | awk -F ";" '{print $1}'`
  NODE=`echo $i | awk -F ";" '{print $2}'`
  echo "deleting services from $IF on $NODE..."
  # entferne den Service "Qmail-queue" von allen Nodes und Interfaces
  /usr/share/opennms/bin/send-event.pl uei.opennms.org/nodes/deleteService \
  --service Qmail-queue \
  --interface $IF \
  --node $NODE
done;

Auf jeden Fall sollte man die zu entfernenden Services auch aus der capsd-configuration.xml herausnehmen – ansonsten werden diese immer wieder neu erkannt (wiederum als “Not Monitored”).

Categories
Plesk

Plesk: FastCGI wrapper unter Ubuntu

Um eine Domainspezifische php.ini laden zu können verwende ich einen angepassten Wrapper für die FastCGI Schnittstelle. Plesk verwendet das Script /var/www/cgi-bin/cgi_wrapper/cgi_wrapper als Wrapper für PHP-Scripts.

#!/bin/bash

DIR=`fgrep "$UID" /etc/passwd | cut --delimiter=: -f6`

if [ -f "$DIR/private/php/php.ini" ]; then
        PHPRC=$DIR/private/php/php.ini
else
        PHPRC=/etc/php5/cgi/php.ini
fi

export PHPRC
exec /usr/bin/php-cgi

Nebenbei erwähnt: Hier findet sich der Grund warum der angepasste Wrapper für FastCGI unter Ubuntu zunächst nicht funktioniert hat.

Categories
Linux

Ubuntu/Centos: /bin/sh Unterschiede

Mal wieder Zeit verplempert: Wenn man Shell-Scripts programmiert sollte man wissen welchen Interpreter man verwendet. Etwas achtlos verwendet man meist den Shebang “#!/bin/sh”. /bin/sh ist meist nur ein Link auf die jeweilige Default-Shell der Distribution.

Unter Centos/RedHat ist /bin/sh ein Link auf /bin/bash (die Bourne-Again-Shell):

[root@centos ~]# ls -la /bin/sh
lrwxrwxrwx 1 root root 4 Apr 28  2010 /bin/sh -> bash

Unter Ubuntu/Debian hingegen verlinkt /bin/sh auf /bin/dash (Debian-Almquist-Shell).

root@debian:~# ls -la /bin/sh
lrwxrwxrwx 1 root root 4 2010-11-02 16:47 /bin/sh -> dash

Aufgefallen ist mir der Unterschied beim Verwenden der Bash-Variable $UID. Die dash enthält diese Variable nämlich nicht. Weitere Unterschiede sind mir bisher nicht bekannt (habe aber auch nicht danach gesucht).

Categories
Linux Networking

Linux als Router (z.B. UMTS)

Zugegeben, ich arbeite nicht sooo oft mit iptables. Daher hier mein Spickzettel um mein Notebook temporär als UMTS Router zu nutzen:

sudo su 
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward

Hintergrund: Am Wochenende hatte sich mein Linux-Router/Server verabschiedet und natürlich hatte ich kein aktuelles ISO Image zur Hand. Die Netzwerkinstallation war aber dann dank des Notebook-Routers kein Problem.

Categories
Plesk

Plesk 10.1.1

Mittlerweile ist Plesk 10.1.1 erschienen (Changelog).

Die hier genannten Bugs wurden behoben (und noch viele andere). Jedoch ist auch ein neuer Bug beim Migrieren von Domains mit Postfächern aufgetaucht: Enthalten die Postfächer Weiterleitungen, werden diese zwar mit übernommen – sie werden jedoch nicht in die Qmail-Konfiguration eingetragen. D.h. die in der Oberfläche aktivierten Weiterleitungen funktionieren nicht (die Mail landet im Nirvana).

Zwei Möglichkeiten zur Abhilfe: Die betreffenden Weiterleitungen ein- und wieder ausschalten. Oder die Mailkonfiguration komplett neu schreiben lassen:

/usr/local/psa/admin/sbin/mchk --without-spam
Categories
Linux

Thinkpad T410i: Ubuntu Helligkeit/Brightness

Die Helligkeitseinstellung unter Ubuntu funktioniert mit meinem Thinkpad T410i nicht. Zwar wird (wie hier rechts zu sehen) der Balken angezeigt, aber die Helligkeit ändert sich nicht. Scheint an den proprietären Nvidia Treibern zu liegen.

Abhilfe schafft ein Eintrag in der “Device” Sektion in der /etc/X11/xorg.conf:

Option "RegistryDwords" "EnableBrightnessControl=1"

Quelle