September 21, 2012

OS X

Anleitung zur Installation von NeDi 1.0.7 auf OS X

(Only in German for now, but with enough CLI details to follow through anyway, tx Jürgen)

(getestet  mit 17.7.4 (Lion) und 10.8.1 (Mountain Lion)

Vorbemerkung:

Wenn Nedi inkl. apache2 unter einem eigenem Benutzer laufen soll,macht es Sinn unter OS X einen User nedi und eine Gruppe nedi anzulegen.
Dann ist es hinterher auch ganz einfach einen anderen "Mac User" in die nedi Gruppe aufzunehmen.

Grundvoraussetzungen:

1. XCode + Components (Command Line Tool) installieren
     über den AppStore geht das am einfachsten

2. MacPorts installieren + selfupdate

a: Fertige “pkg” Installer findet man unter:
     http://www.macports.org/install.php

b: sudo port -v selfupdate

Installation:

01. "alte" Nedi Version als Grundlage:

 (rsync "Freischaltung" zu den macports repositories nötig)

sudo port -v install nedi

---> Computing dependencies for nedi
....
---> No broken files found

Benötoigt ca 15 min auf einem alten  MacPro1,1  mit 2 x 2,66 GHz Dual-Core Intel Xeon und  Mac OS X Lion 10.7.4
Während der Installation bekommt man auch einige Infos dazu, wie man nedi zum Laufen bekommt.
Habe diese Infos aber unten noch mal zusammengefasst.

02. mysql5-server:

a: mysql5 via macports installieren

sudo port install mysql5-server

b: default db aufsetzen

sudo -u _mysql mysql_install_db5

c: mysql db starten (via launchctl)

sudo launchctl load -w /opt/local/etc/LaunchDaemons/org.macports.mysql5/org.macports.mysql5.plist

stoppen geht wie folgt:

sudo launchctl unload /opt/local/etc/LaunchDaemons/org.macports.mysql5/org.macports.mysql5.plist

c: Set the root MySQL password (replace <mypassword> with your chosen password):

sudo /opt/local/lib/mysql5/bin/mysqladmin -u root password '<mypassword>'

          !!!!!!!!!! Anfuehrungszeichen sind ganz wichtig bei Sonderzeichen im PWD

03. php5 mysql Module:

a: sudo port install php5-mysql

b: die default php.ini aus der development Version anlegen
(kann natürlich nach Belieben angepasst werden)

sudo cp /opt/local/etc/php5/php.ini-development /opt/local/etc/php5/php.ini

c: /opt/local/etc/php5/php.ini anpassen damit php via apache den mysql socket findet

mysql.default_socket /opt/local/var/run/mysql5/mysqld.sock

kurzer Check ob es richtig ist:

opt/local/bin/php -i | grep mysql.default_socket
mysql.default_socket => /opt/local/var/run/mysql5/mysqld.sock => /opt/local/var/run/mysql5/mysqld.sock

d: noch ein paar andere Kleinigkeiten in der php.ini anpassen, wenn sie gerade offen ist

short_open_tag = On
(nedi verwendet die kurzen Tags)

date.timezone = "Europe/Berlin"
(Dieser Eintrag in der php.ini behebt die Date Warnung von php)

04. Install PHP5 with SNMP support and Apache 2

a: sudo port install php5 +apache2 +mysql5 +snmp

b: PHP Modul in apache2 zur Verfügung stellen

cd /opt/local/apache2/modules
!!!! Nicht vergessen sonst kommt das Modul nicht an den richtigen Platz !!!!!

sudo /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so

--> [activating module `php5' in /opt/local/apache2/conf/httpd.conf]

c: httpd.conf etwas anpassen:

User nedi
Group nedi

<FilesMatch \.php$>
     SetHandler application/x-httpd-php
</FilesMatch>

<IfModule dir_module>
     DirectoryIndex index.html index.php
</IfModule>

 

05. Apache starten

   sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist    

   zum Testen der Installation kann man temporär eine phptest.php Datei mit folgendem Inhalt:

<? 
     phpinfo();
?>

unter /opt/local/apache2/htdocs anlegen und aufrufen.
Mit phpinfo() stellt man nun fest, dass noch andere php module fehlen

 

06. Fehlende PHP Module nachinstallieren

a: sudo port install php5-snmp

b: sudo port install php5-gd

# und wenn wir gerade am Installieren sind…
# die folgenden 2 Module habe ich auch immer noch installiert,
# da ich diese eh noch benötige. Bin aber nicht sicher, ob Nedi die wirklich braucht

c: sudo port install p5-net-ssh2

d: sudo port install p5-net-ssh-perl

e: für ssh cli benötigt man noch folgende Perl Module

sudo port install p5.12-io-tty p5.12-io-stty

f: apache2 noch mal neu starten:

sudo launchctl unload  /Library/LaunchDaemons/org.macports.apache2.plist

sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist

 

07. Nedi 1.07 installieren

 Von http://www.nedi.ch/download/ den NeDi Tarball und den nedi-1.0.7-1.patch runterladen
 
a: an die passend Lokation moven:

sudo mv /Users/medianet/Downloads/nedi-1.0.7 /opt/local/share/

sudo mv /Users/medianet/Downloads/nedi-1.0.7-1.patch /opt/local/share/nedi-1.0.7/html/log/

b: patchen:

cd /opt/local/share/nedi-1.0.7/

patch -p0 -i html/log/nedi-1.0.7-1.patch

patching file inc/libsnmp.pm
patching file inc/libcli-iopty.pm
Hunk #6 succeeded at 250 with fuzz 2.
patching file html/Devices-Status.php
patching file inc/libmon.pm

c: das "alte" nedi Verzeichnis löschen:

sudo rm -r  nedi

d: das "neue" nedi neu verlinken:

sudo ln -s /opt/local/share/nedi-1.0.7/ /opt/local/share/nedi

-> lrwxr-xr-x   1 root      admin    28 10 Sep 15:56 nedi -> /opt/local/share/nedi-1.0.7/

e: das nedi html Verzeichnis ins apache2 home verlinken: 

sudo  ln -s /opt/local/share/nedi/html/  /opt/local/apache2/htdocs/nedi

f: Rechte auf den nedi User setzen:

sudo chown -R nedi:nedi /opt/local/share/nedi-1.0.7

sudo chown -R nedi:nedi /opt/local/share/nedi

sudo chown nedi:nedi /opt/local/apache2/htdocs/nedi

 

          08. nedi.conf nach eigenen Bedürfnissen anpassen

Für den Anfang reichen erst mal die Eintrage unter:

a: comm

b: usr

c: # DB params

dbname nedi

dbuser YOURNEDIDBUSER

dbpass YOURDBPASSWORD

dbhost localhost

d: rrdcmd /opt/local/bin/rrdtool

e: nedipath /opt/local/share/nedi

 

09. in nedi.pl den "shebang" ändern:

#!/opt/local/bin/perl

(man könnte aber auch das "Standard" perl von /usr/bin/perl neu auf /opt/local/bin/perl ändern, aber will man das ?!)

 

10. nedi Datenbank anlegen

 

sudo /opt/local/share/nedi/nedi.pl -i

OOPS !!!

Use of :locked is deprecated at /opt/local/lib/perl5/vendor_perl/5.12.4/Net/SNMP.pm line 588.

Jetzt macht auch noch das snmp.pl komische Sachen 🙁
Das bekommen wir aber auch noch weg 🙂

DB, RRDs and configs files will be cleared, bail out if don’t want this!
————————————————————————
MySQL admin user: DEIN-MYSQL-ADMIN-USER
MySQL admin pass:  DEIN-MYSQL-ADMIN-PASSWORT
MySQL Version : 5.1.65
———————————————————————-
Old DB nedi dropped!
Creating nedi for nedi@localhost
INIT:Creating devices,devdel, modules, interfaces, networks, configs, stock, vlans, links, locations, events, monitoring, incidents, nodes, nodetrack, iftrack, iptrack, stolen, users, system, chat, wlan done.
INIT: 0 RRDs and 0 configurations (with dirs) deleted!

 

11. netsnmp.pl error beseitigen

hier nur ein Quick and Dirty Workaround 
(es gibt auch einen "richtigen" Patch der den Fehler komplett beseitigt … (Google ist dein Freund))

in: /opt/local/lib/perl5/vendor_perl/5.12.4/Net/SNMP.pm:

no warnings ‘deprecated’;

einbauen

Erster Nedi Test via Browser

Wenn man bis jetzt alles richtig gemacht hat, dann sollte man auf dem Mac unter:

http://localhost/nedi

sich mit admin/admin in die NeDi Gui enloggen können.

Nacharbeiten:

Einige nedi scripte finden die nedi.conf nicht unter /opt/local/share/nedi

also mal schnell einen symbolic link anlegen
 
sudo  ln -s /opt/local/share/nedi/nedi.conf /etc/nedi.conf

sudo chown nedi:nedi /etc/nedi.conf

 

Für das nedi discovery die crontab Einträge anlegen:

das könnte man auch über den launchd einrichten (man laúnchd)

45 * * * *  /opt/local/share/nedi/startnedi.sh >> /opt/local/share/nedi/STARTLOGS/nedicron.log 2>&1

0 0 * * *  /opt/local/share/nedi/startnediconfigbu.sh >> /opt/local/share/nedi/STARTLOGS/nedicron.log 2>&1

hier meine entsprechenden startscripte als Beispiel:

startnedi.sh:

#!/bin/bash
ulimit -n 2000
#start nedi from crontab. Creates logfiles
# no Backup Config here. Do it only at 0 o clock with
# special crontab
opts="-vp"
CMD="/opt/local/share/nedi/nedi.pl $opts"
LOGPATH="/opt/local/share/nedi/STARTLOGS"
LOGFILE="$LOGPATH/nedi.log"
LASTRUN="$LOGPATH/lastrun.log"
cd /opt/local/share/nedi
now=`date +%Y%m%d:%H%M`
echo "#$now start # $CMD" > $LASTRUN 2>&1
echo "#$now start # $CMD" >> $LOGFILE
NEDIULIMIT=`ulimit -n`
echo "# Value from <ulimit -n>: $NEDIULIMIT" >> $LOGFILE
$CMD >> $LASTRUN 2>&1
#tail -10 $LASTRUN >> $LOGFILE
ERRORTESTTEMP=`grep RetireNod $LASTRUN`
ERRORTEST=`echo $ERRORTESTTEMP | sed -e ‘s/Nod.*/Nod/’`
# echo "ERRORVALUE: $ERRORTEST"
if [[ "$ERRORTEST" = "" ]]
then
     echo "#############################" >> $LOGFILE
     echo "Es ist ein Fehler aufgetreten" >> $LOGFILE
     echo "#############################" >> $LOGFILE
     tail -20 $LASTRUN >> $LOGFILE
else
     echo "OK" >> $LOGFILE
     cat $LASTRUN | sed -n -e ‘/RetireNod/,/stop/p’ >> $LOGFILE
fi
now=`date +%Y%m%d:%H%M`
echo "#$now stop" >> $LOGFILE
echo "#$now stop" >> $LASTRUN
 

starnedibu.sh:

#!/bin/bash
ulimit -n 2000
#start nedi from crontab. Creates logfiles
# next only Backup Config from Devices in DB (A) with condition
# login not avail
opts="-vBA ‘login !=\"\"’ -SsmgrfpitedobwaOA"
CMD="/opt/local/share/nedi/nedi.pl $opts"
LOGPATH="/opt/local/share/nedi/STARTLOGS"
LOGFILE="$LOGPATH/configbu.log"
LASTRUN="$LOGPATH/configbulastrun.log"
cd /opt/local/share/nedi
now=`date +%Y%m%d:%H%M`
echo "#$now start # $CMD" > $LASTRUN 2>&1
echo "#$now start # $CMD" >> $LOGFILE
NEDIULIMIT=`ulimit -n`
# won’t work with the parameters via variable so call it with fixed values
echo "# Value from <ulimit -n>: $NEDIULIMIT" >> $LOGFILE
/opt/local/share/nedi/nedi.pl -vBA ‘login !=""’ -SsmgrfpitedobwaOA >> $LASTRUN 2>&1
#/opt/local/share/nedi/nedi.pl -vBA ‘login !=""’ >> $LASTRUN 2>&1
grep -E ‘MAIN:|UPDT:’ $LASTRUN >> $LOGFILE
now=`date +%Y%m%d:%H%M`
echo "#$now stop" >> $LOGFILE
echo "#$now stop" >> $LASTRUN

 

Die eventuell noch fehlenden Verzeichnisse kann sich sicher jeder selber ohne Anleitung anlegen 😉

 

nedimonitor via launchd starten:

endweder mit sudo:

sudo launchctl load -w /Library/LaunchDaemons/org.macports.nedimonitor.plist

oder einfach nur als user nedi

launchctl load -w /Library/LaunchDaemons/org.macports.nedimonitor.plist

 

In moni.pl muss auch noch der SheBang geändert werden

#!/opt/local/bin/perl

Kurzer Check ob alle nötigen Daemons laufen:

sudo launchctl list | grep macports

86832 - org.macports.nedimonitor
72685 - org.macports.apache2
90636 - org.macports.mysql5