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
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:
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
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