Inhaltsverzeichnis

Vorwort und Voraussetzungen

Dieser Artikel stellt ein „Kochrezept“ für mein fertiges IPCop-Plugin send_nsca (http://ipcop.stankowic-development.net) dar

Mithilfe von NSCA kann ein Host ein Nagios/Icinga Monitoringsystem über System-/Status-Veränderungen informieren. Dieser Mechanismus ist das exakte Gegenteil des herkömmlichen Prinzips von NRPE, da der Host Informationen selbst verschickt (mithilfe des send_nsca-Kommandos, um das es in diesem Artikel/Plugin geht) und Nagios/Icinga nicht „pollen“ muss. NSCA lässt sich für passive Systeme oder passive Checks (auch in Kombination mit aktiven Checks) verwenden.

Zwischen den Versionen 2.7 und 2.9 gibt es erhebliche Unterschiede, da die Packetgrößen verändert wurden (siehe auch http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=670373). Je nach NSCA-Erweiterung auf dem Nagios/Icinga Monitoringsystem muss die entsprechende Version verwendet werden.

Benötigt wird:

libmcrypt

Eine Voraussetzung von send_nsca ist libmcrypt - diese wird zur Verschlüsselung der Nachrichten benötigt. Die Bibliothek muss zuerst einmal kompiliert und lokal installiert werden.

# cd libmcrypt-2.5.8
# ./configure --prefix=/opt
...
# make
...
# make install
# echo "/opt/lib/" >> /etc/ld.so.conf
# ldconfig && ldconfig -p|grep mcrypt
	libmcrypt.so.4 (libc6) => /opt/lib/libmcrypt.so.4
	libmcrypt.so (libc6) => /opt/lib/libmcrypt.so

Nur wenn die Bibliothek erfolgreich installiert wurde, funktioniert die Übersetzung von send_nsca im nächsten Schritt!

send_nsca

Das Configure-Skript wird mit einem Hinweis auf den alternativen Speicherort von libmcrypt hingewiesen, anschließend wird lediglich send_nsca und nicht das gesamte NSCA kompiliert. Wichtig ist, dass das kompilierte Programm seine Bibliotheken findet und den Selbsttest durchlläuft:

# cd nsca-VERSION
# ./configure --with-mcrypt-inc=/root/dev/libmcrypt-2.5.8/include --with-libmcrypt-prefix=/opt/
...
# make send_nsca
# ldd src/send_nsca
	linux-gate.so.1 =>  (0xb7775000)
	libmcrypt.so.4 => /opt/lib/libmcrypt.so.4 (0xb773d000)
	libnsl.so.1 => /lib/libnsl.so.1 (0xb7724000)
	libc.so.6 => /lib/libc.so.6 (0xb75c2000)
	/lib/ld-linux.so.2 (0xb7776000)
# src/send_nsca |grep "Encryption Routines"
Encryption Routines: AVAILABLE

Tarball erstellen

Für das spätere Archiv wird ein Ordner angelegt, in welchem die später unterhalb /var/ipcop/addons/nsca einzufügenden Addon-Dateien in einem Tarball komprimiert werden.

# mkdir nsca-ipcop-VERSION
# cd nsca-ipcop-VERSION
# mkdir -p build/nsca/libs
# cp /PFAD-ZU-NSCA-VERSION/src/send_nsca build/nsca/
# cp /PFAD-ZU-NSCA-VERSION/sample-config/send_nsca.cfg build/nsca/
# cp --preserve=all -r /opt/lib/* build/nsca/libs
# cd build/
# tar cvfz ../nsca.tar.gz nsca/*

Installer

Herzstück des Addons ist ein Installationsskript, welches den send_nsca-Tarball unterhalb von /var/ipcop/addons entpackt und die notwendigen Eintragungen in /etc/ld.so.conf vornimmt. Mithilfe der Funktionen addtofiletail und removefromfile werden diese Eintragungen entsprechend maskiert, damit das Addons auch wieder sauber deinstalliert werden kann.

# echo "/var/ipcop/addons/nsca/libs" >> local.add
# vi install
#!/bin/bash
# ipcop addon binary installer Ver 0.9b for IPCop 2.0

CMD="$1"

# clear screen
/usr/bin/tput clear

# check
if [ ! -e /usr/lib/ipcop/library.sh ]; then
    echo "Upgrade your IPCop, library.sh is missing"
    exit 1
fi

. /usr/lib/ipcop/library.sh
ismachine i486

if [ ${?} -ne 0 ]; then
    echo "This Addon is for i486 architecture only"
    exit 1
fi

# error handling
err()
{
        echo " "
        echo "Error : $1 "
        echo " "
        echo "Choose your option:"
        echo " "
        echo "./install -i   ---> to install"
        echo "./install -u   ---> to uninstall"
        echo " "
exit;exit;
}

# installation
ai()
{
        #create user
        /usr/sbin/useradd -d /dev/null -M -r -s /bin/false nagios
        #extract tarball
        tar xfz nsca.tar.gz -C /var/ipcop/addons > /dev/null
        #add libs path to ld cache configuration
        addtofiletail nsca local.add /etc/ld.so.conf
        #refresh ld cache
        ldconfig > /dev/null
}

# deinstallation
au()
{
        #kill nrpe and delete user/files
        /usr/bin/killall -KILL send_nsca 2> /dev/null
        rm -rf /var/ipcop/addons/nsca
        /usr/sbin/userdel nagios
        removefromfile nsca /etc/ld.so.conf
        #refresh ld cache
        ldconfig > /dev/null
}


case $CMD in
         -i|i|install)
                echo " "
                echo "Installing now ..."
                ai
                echo "Successfully done!"
                echo " "
                echo "NOTE: dont forget to check /var/ipcop/addons/nsca/send_nsca.cfg"
                echo " ";;

        -u|u|uninstall)
                echo " "
                echo "Deinstalling now ..."
                au
                echo "Successfully done!"
                echo " ";;
        *)
        err "Invalid Option";;
esac
sync
#end of file

ESC ZZ

# chmod +x install

Packen und Aufräumen

Letztendlich kann der Addon-Ordner (mit Ausnahme des build-Ordners) in einen Tarball verwandelt werden, damit das Addon komfortabel installiert werden kann:

# tar cfz nsca-ipcop-VERSION.tar.gz nsca-ipcop-VERSION/{local.add,install,nsca.tar.gz}
# md5sum nsca-ipcop-VERSION.tar.gz > nsca-ipcop-VERSION.tar.gz.md5sum

Auf dem Entwicklungssystem können der vorhin temporär angelegte Eintrag in der /etc/ld.so.conf und die Daten unterhalb /opt entfernt werden:

# vi /etc/ld.so.conf
/opt/
dd

ESC ZZ

# rm -rf /opt