======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:
* IPCop-Entwicklungssystem, idealerweise über das folgende Abbild installiert: [[http://it-connect-unix.de/index.php?option=com_jdownloads&view=viewcategory&catid=18&Itemid=78]]
* Quellcode von **libmcrypt**: [[http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download]]
* Quellcode von **nsca** 2.7 oder 2.9+ (//je nach verwendeter NSCA-Version des Nagios/Icinga Monitoringssystems//): [[http://sourceforge.net/projects/nagios/files/nsca-2.x/]]
======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