====== Installing NAV 3 on SuSE Linux Enterprise Server 9 ======
This page is **REALLY FANTASTICALLY** outdated
===== Installing the prerequisites =====
==== RPM and SuSE ====
Apart from what seemed to be installed by default, these packages were
installed using yast2 (some of these packages might not make sense in
a NAV context, but were installed as extra tools during the server
preparation):
* XFree86-libs
* alsa
* apache2
* apache2-mod_php4
* apache2-mod_python
* apache2-prefork
* atftp
* blt
* ctags
* dialog
* emacs
* emacs-info
* emacs-nox
* expat
* findutils-locate
* fontconfig
* freetype2
* gcc
* gd
* glibc-devel
* gpg-pubkey-b481ca4b
* jakarta-tomcat
* java2
* java2-jre
* libapr0
* libjpeg
* liblcms
* libmng
* libpng
* libtiff
* make
* mm
* net-snmp
* perl-Crypt-DES
* perl-DBD-Pg
* perl-DBI
* perl-HTML-Parser
* perl-HTML-Tagset
* perl-Net-SNMP
* perl-SNMP
* perl-TermReadKey
* perl-TimeDate
* perl-libwww-perl
* pgperl
* php4
* php4-gd
* php4-gettext
* php4-pgsql
* php4-session
* postgresql
* postgresql-contrib
* postgresql-devel
* postgresql-libs
* postgresql-pl
* postgresql-server
* python-devel
* python-egenix-mx-base
* python-ldap
* python-tk
* qt3
* rrdtool
* samba-client
* screen
* sudo
* t1lib
* tcl
* tk
* unixODBC
* unzip
* yast2-qt
==== Perform these commands ====
This will install required software that is not
available from //yast2//.
Commands:
umask 0022
wget http://jdbc.postgresql.org/download/pg74.215.jdbc3.jar
cp pg74.215.jdbc3.jar $JAVA_HOME/jre/lib/ext/
# The WestHawk Java SNMP library has been replaced by the library found at
# http://gicl.cs.drexel.edu/people/sevy/snmp/
# Must be compiled from source
wget http://gicl.cs.drexel.edu/people/sevy/snmp/source_1.4.zip
# Follow the build instructions in the archive (make SNMPPackage), you should have snmp.jar in the end:
cp snmp.jar $JAVA_HOME/jre/lib/ext/
wget http://c0re.23.nu/c0de/IPy/IPy-0.42.tar.gz
tar xvzf IPy-0.42.tar.gz
cd IPy-0.42
python setup.py install
cd ..
wget http://belnet.dl.sourceforge.net/sourceforge/py-rrdtool/py-rrdtool-0.2.1.tar.gz
tar xvzf py-rrdtool-0.2.1.tar.gz
cd py-rrdtool-0.2.1
python setup.py install
cd ..
# Get latest pysnmp *2* from http://sourceforge.net/projects/pysnmp
tar xvzf pysnmp-2.*.tar.gz
cd pysnmp-2.*
python setup.py install
cd ..
wget http://belnet.dl.sourceforge.net/sourceforge/cheetahtemplate/Cheetah-0.9.16a2.tar.gz
tar xvzf Cheetah-0.9.16a2.tar.gz
cd Cheetah-0.9.16a2
python setup.py install
cd ..
wget http://belnet.dl.sourceforge.net/sourceforge/forgetsql/forgetSQL-0.5.1.tar.gz
tar xvzf forgetSQL-0.5.1.tar.gz
cd forgetSQL-0.5.1
python setup.py install
cd ..
wget http://forgethtml.sourceforge.net/forgethtml-cvs-2004-10-21.tar.gz
tar xvzf forgethtml-cvs-2004-10-21.tar.gz
cd forgethtml
python setup.py install
cd ..
wget http://initd.org/pub/software/psycopg/psycopg-1.1.18.tar.gz
tar xvzf psycopg-1.1.18.tar.gz
cd psycopg-1.1.18
./configure \
--with-postgres-includes=/usr/include/pgsql \
--with-mxdatetime-includes=/usr/lib/python2.3/site-packages/mx/DateTime/mxDateTime
make
make install
cd ..
wget http://www.switch.ch/misc/leinen/snmp/perl/dist/SNMP_Session-1.07.tar.gz
tar xvzf SNMP_Session-1.07.tar.gz
cd SNMP_Session-1.07
perl Makefile.PL
make
make install
cd ..
# Gammu is packaged in a really shitty way, and the spec file is botched
# somehow. We compile from source in this example.
wget http://www.mwiacek.com/zips/gsm/gammu/gammu.tar.gz
tar xvzf gammu.tar.gz
cd gammu-1.01.0
./configure --prefix=/usr/local --disable-bluetooth
make
make install
cd ..
# Configure gammu to use the first serial port
cat << EOF > /etc/gammurc
[gammu]
port=/dev/ttyS0
EOF
# Test that Gammu sees the phone with this:
gammu --identify
===== Installed NAV 3 from scratch, using RPM =====
First, run this command to install the NAV rpm:
rpm -ivh nav-3.0*.noarch.rpm
In addition to installing NAV, this should create the group //nav// and the user //navcron//.
NAV's SMS Daemon runs as the navcron user, so you need to make sure that the navcron user
is permitted to write to the system's serial ports. If you set up your phone on ///dev/ttyS0//,
check to see which group has write permissions to that device, and add the navcron user to that group (On SLES, this is typically the //uucp// group).
==== Initializing and configuring the database ====
Initialize the database using the recipe from
''/usr/local/nav/doc/sql/README''. Use this file whenever you are
installing NAV. For upgrading use the correct script from
''nav/doc/sql/upgrades/''.
The password for tha nav-user should be set by using the instructions
in this document. If you need to alter the password this can be done
by:
psql template1
ALTER USER nav WITH PASSWORD 'foo';
\q
exit
Configure NAV to use these passwords. Changes made to
''/usr/local/nav/etc/db.conf'':
#
# PostgreSQL user passwords.
#
userpw_nav=foo
We need to be able to connect to PostgreSQL using TCP/IP, and we
should enable statistics to allow pg_autovacuum to do database
maintenance. Make sure these settings are present in
''/var/lib/pgsql/data/postgresql.conf'':
tcpip_socket = true
stats_start_collector = true
stats_row_level = true
And these in ''pg_hba.conf'' in the same directory:
local all postgres ident sameuser
local all all md5
host all all 127.0.0.1 255.255.255.255 md5
host all all ::1 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff md5
We will not assign a password for the postgres user here, but instead
we will demand //ident sameuser// authentication for the postgres user
and grant sudo access to database administrators to perform commands
as the postgres user. This means a database administrator on the
server can execute ''sudo -u postgres psql manage'' to enter SQL
commands in the NAVdb, regardless of whether he/she has root access to
the server.
We restart PostgreSQL (still as root) and start pg_autovacuum (which
should really be started as part of ''/etc/init.d/postgresql''):
/etc/init.d/postgresql restart
su -c "pg_autovacuum -D" postgres
Configure PostgreSQL to automatically start when the server is restarted:
chkconfig postgresql on
==== Installing NAV libraries ====
The RPM packages provided by the NAV team does not install NAV in the
preferred layout of the distribution, but rather puts everything into
''/usr/local/nav''. Therefore, we will need to employ a few tricks to
make the NAV libraries easily available to all programs on the server
(you are free to contribute a .spec file with an alternate
installation layout!).
==== Java ====
In preference to building a long, ugly CLASSPATH, we symlink all the
.jar-files of NAV in the the running JVM's library directory:
cd $JAVA_HOME/jre/lib/ext
ln -s /usr/local/nav/lib/java/*.jar .
Also you need to symlink in the postgres and snmp-drivers. There were
linked to ''/usr/local/nav/lib/java''.
==== Python ====
In preference to setting a PYTHONPATH environment variable pointing to
the NAV Python libraries, we fix **sys.path** by creating the file
''usr/lib/python2.3/site-package/sitecustomize.py'' and placing this
code in it:
import sys
sys.path.append('/usr/local/nav/lib/python')
This will make sure that the NAV python libraries are available to all
running Python programs on the server, without the need to install
these libraries in the library directories of Python.
==== Perl ====
As with the Java libraries, we create a few symlinks to the perl
libraries (although this is not as straightforward as symlinking the
.jar files). Assuming the Perl version on your system is 5.8.3, we
do:
cd /usr/lib/perl5/site_perl/5.8.3
ln -s /usr/local/nav/lib/perl/NAV.pm
ln -s /usr/local/nav/lib/perl/NAV
ln -s /usr/local/nav/lib/perl/NetAddr
==== Tomcat ====
Tomcat needs the postgres-driver as well. It was linked to
''/usr/lib/SunJava2-1.4.2/jre/lib/ext''.
==== Configuring Apache ====
The example Apache 2 configuration from the NAV source tree
(http://svn.itea.ntnu.no/repos/nav/navme/trunk/doc/apache/httpd2.conf.example)
was used as a basis, and the relevant parts were placed into SuSE's
Apache 2 configuration structure.
We recommend installing an SSL server and redirect all non-SSL
requests to this server (so all web server traffic, including
passwords, are encrypted).
Restart Apache2 and configure it to automatically start when the server is restarted:
/etc/init.d/apache2 restart
chkconfig apache2 on
==== Configuring Tomcat and the NAV servlets ====
We configure Tomcat to only listen to the local interface, and the NAV
servlets nee d to be symlinked in to the webapps directory. Edited
''/etc/tomcat/base/server.xml'' so the following was present:
NAV's servlets are then symlinked:
cd /usr/share/tomcat/webapps
ln -s /usr/local/nav/apache/webapps/*.war .
Next, symlink the .jar files as well:
cd /usr/share/tomcat/shared/lib
ln -s /usr/local/nav/lib/java/*.jar .
Restart Tomcat and configure it to automatically start when the server is restarted:
/etc/init.d/tomcat restart
chkconfig tomcat on
==== Installing Cricket ====
'''Please note that this part is not yet complete and needs to be revised
to make sure that server statistics are collected.'''
The user navcron was created by the RPM package, and should have had
its HOME set to ''/usr/local/nav''. The NAV integration of Cricket
will have it running as the user **navcron** and not **cricket**, as the
documentation of Cricket would normally suggest. Run:
chgrp nav /usr/local/nav
chmod g+sw /usr/local/nav
wget http://belnet.dl.sourceforge.net/sourceforge/cricket/cricket-1.0.3.tar.gz
su navcron
mkdir ~/cricket
cp cricket-1.0.3.tar.gz ~/cricket/
cd ~/cricket
tar xvzf cricket-1.0.3.tar.gz
ln -s cricket-1.0.3 cricket
cd cricket
sh configure
cp cricket-conf.pl.sample cricket-conf.pl
Edit cricket-config.pl so that it contains the following lines:
package Common::global;
$gCricketHome = "/usr/local/nav/cricket";
$gInstallRoot = "$gCricketHome/cricket";
$gConfigRoot = "$gCricketHome/cricket-config";
$gDbAccess = "slurp"; # Slurp the database into memory
Then we create directories for the configuration- and data trees of
Cricket, and for the web cgi script:
cd ~/cricket
mkdir public_html
cd public_html
ln -s ../cricket/images
ln -s ../cricket/grapher.cgi
ln -s ../cricket/lib
ln -s ../cricket/mini-graph.cgi
ln -s ../cricket/VERSION
ln -s grapher.cgi index.cgi
cp /usr/local/nav/doc/cricket/public_html/cricket.css .
mkdir ../cricket-data
ln -s ../cricket-data
cp -r /usr/local/nav/doc/cricket/cricket-config ..
ln -s ../cricket-config
cd ~/cricket/cricket
cp /usr/local/nav/doc/cricket/cricket/* .
Finally, you may initialize the Cricket configuration (event though no IP devices have been registered in NAV yet):
cd ~
cricket/cricket/compile
bin/makecricketconfig.pl
exit
For Cricket to be visible on the web, do the following Apache
configuration steps as **root**:
cd /usr/local/nav/apache/webroot
ln -s ~navcron/cricket/public_html cricket
cd cricket
echo "SetHandler none" > .htaccess
This will tell Apache **not** to use the mod_python handler in this
directory.
==== Configuring NAV ====
NAV's configuration files are in ''/usr/local/nav/etc''. We've
already made some changes to ''''db.conf'''' to make sure NAV can connect
to PostgreSQL. Now we need to adjust some essential values of
''nav.conf'' and ''webfront/webfront.conf'' before we are ready for
launch.
==== nav.conf ====
Except for the comments, this is the short version of what needs to be
set:
ADMIN_MAIL =
DOMAIN_SUFFIX =
AUTO_CREATE_DEVICE = yes
NAVROOT=/usr/local/nav
JAVA_HOME = /usr/lib/java
==== webfront/webfront.conf ====
If you would like NAVs web interface to use LDAP authentication, you
can set this up here. Also, many users prefer longer session
timeouts, which can also be configured here.
==== Patches ====
In order to get Alertprofiles to work properly you need to patch
forgetSQL with the patch found in contribs in the NAV-source. If you
forget this, the alertprofiles webinterface will randomly hang because
of a deadlock in the database.