#!/bin/bash
#
# NINO installation script for LiNUX
#
# This script will:
# - Setup start/stop script for NINO services
# - Create httpd-nino.conf
# - Include this into the main httpd.conf
#
# The NINO files must be located in /var/nino (BASEDIR)
#
# NINO basedir:

BASEDIR=`dirname $0 `
cd ${BASEDIR}
BASEDIR=` pwd | sed s/[/]scripts// `

LOG="${BASEDIR}/scripts/install.log"
echo "NINO installation on `date` " > ${LOG}

# Setup snmp.ini

HTTPD=`find /usr/sbin -name "httpd" -print  2> /dev/null | head -1 `
if [ "${HTTPD}" == "" ] ; then
  HTTPD=`find /usr/sbin -name "httpd2" -print  2> /dev/null | head -1 `
fi
HTTP_VERSION=` ${HTTPD} -v | grep "version" `
echo $HTTP_VERSION >> ${LOG}
if [ "`echo $HTTP_VERSION | grep "1.3" `" != "" ] ; then
  VERSION="13"
else
  VERSION="20"
fi

HTPASSWD=`find /usr/bin /usr/sbin -name "htpassw*" -print  2> /dev/null | head -1 `
cp -f ${BASEDIR}/conf/snmpbuild.ini ${BASEDIR}/conf/snmp.ini
echo "httpdir = ${BASEDIR}" >> ${BASEDIR}/conf/snmp.ini
echo "htpasswd = ${HTPASSWD}" >> ${BASEDIR}/conf/snmp.ini
echo "passwd = ${BASEDIR}/conf/passwd" >> ${BASEDIR}/conf/snmp.ini
echo "groups = ${BASEDIR}/conf/groups" >> ${BASEDIR}/conf/snmp.ini

# Setup NINO services
echo "NINO Services:" >> ${LOG}

NINOSERVICES="nino"
cp ${BASEDIR}/scripts/${NINOSERVICES}.txt /etc/init.d/${NINOSERVICES}
echo "BASEDIR=\"${BASEDIR}\"" >> /etc/init.d/${NINOSERVICES}
cat ${BASEDIR}/scripts/${NINOSERVICES}.script >> /etc/init.d/${NINOSERVICES}
chmod a+rx /etc/init.d/${NINOSERVICES}
ls -al /etc/init.d/${NINOSERVICES} >> ${LOG}
#RC3=`find /etc -name "rc3.d" -print | head -1 `
#cd ${RC3}
#ln -f -s /etc/init.d/${NINOSERVICES} S99${NINOSERVICES}
#ls -al S99${NINOSERVICES} >> ${LOG}

# Setup Apache configuration

HTTPD_CONF=`find /etc /usr/local/etc -type f -name "httpd2.conf" -print  2> /dev/null | sort | head -1 `
if [ "${HTTPD_CONF}" == "" ] ; then
  HTTPD_CONF=`find /etc /usr/local/etc -type f -name "httpd.conf" -print  2> /dev/null | sort | head -1 `
fi


echo "Configure ${HTTPD_CONF}:" >> ${LOG}
if [ "${HTTPD_CONF}" != "" ] ; then

  INCL="Include ${BASEDIR}/conf/httpd-nino.conf"
  NINO=`grep "httpd-nino.conf" ${HTTPD_CONF} `

  if [ "${NINO}" == "" ] ; then
    echo ${INCL} >> ${HTTPD_CONF} 
  fi
  grep "nino.conf" ${HTTPD_CONF} >> ${LOG}
fi


# Build config file:
echo "Configure httpd-nino.conf:" >> ${LOG}

cp ${BASEDIR}/conf/build_txt.conf ${BASEDIR}/conf/httpd-nino.conf

MOD_PERL=`find /usr/lib /usr/local -type f -name "mod_perl.so" -print 2> /dev/null | head -1 `


if [ "${MOD_PERL}" != "" ] ; then
  echo LoadModule perl_module   ${MOD_PERL} >> ${BASEDIR}/conf/httpd-nino.conf
fi

STARTUP=`find /etc/httpd /etc/apache2 /etc/apache /usr/local/etc -type f -name "*startup*.pl" -print 2> /dev/null | head -1 `


if [ "${STARTUP}" != "" ] ; then
  echo PerlRequire "${STARTUP}" >> ${BASEDIR}/conf/httpd-nino.conf
fi



printf "<IfModule mod_alias.c>\n\
    ScriptAlias /mod_perl/ \"$BASEDIR/mod_perl/\"\n\
    <Location \"/mod_perl\">\n\
      AuthName \"NINO Authentication\"\n\
      AuthType Basic\n\
      AuthUserFile   $BASEDIR/conf/passwd\n\
      AuthGroupFile  $BASEDIR/conf/groups\n\
      Require valid-user\n\
    </Location>\n\n\
\
    <Directory \"$BASEDIR/mod_perl/\">\n\n\
\
# If the perl module is installed, this will allow execution of mod_perl\n\
# to compile your scripts to subroutines which it will execute directly,\n\
# avoiding the costly compile process for most requests.\n\
#\n" >>  ${BASEDIR}/conf/httpd-nino.conf

if [ "$VERSION" == "20" ] ; then
printf "# mod_perl for apache 2.0\n\n\
\
        SetHandler perl-script\n\
        PerlResponseHandler ModPerl::Registry\n\
        PerlOptions +ParseHeaders\n\n\
\
\n" >>  ${BASEDIR}/conf/httpd-nino.conf

else

printf "# mod_perl for apache 1.3\n\
#\n\
#        SetHandler perl-script\n\
#        PerlHandler Apache::Registry\n\
#        PerlSendHeader On\n\ 
#\n\
#\n" >>  ${BASEDIR}/conf/httpd-nino.conf

fi

printf "# End mod_perl\n\
# For normal CGI next lines are needed:\n\n\
\
        Options FollowSymLinks ExecCGI\n\
        AllowOverride None\n\
        Order allow,deny\n\
        Allow from all\n\
    </Directory>\n\n\
\
    Alias /nino/ \"$BASEDIR/htdocs/nino/\"\n\n\
\
    <Directory \"$BASEDIR/htdocs/nino\">\n\
        Options Indexes MultiViews\n\
        AllowOverride None\n\
        Order allow,deny\n\
        Allow from all\n\
    </Directory>\n\
</IfModule>\n\
\n" >>  ${BASEDIR}/conf/httpd-nino.conf



#cat ${BASEDIR}/conf/build.conf  >> ${BASEDIR}/conf/httpd-nino.conf
cat ${BASEDIR}/conf/httpd-nino.conf >> ${LOG}

## Setup file permissions


chmod a+rwx ${BASEDIR}/conf
chmod a+rw  ${BASEDIR}/conf/*
chmod a+rx  ${BASEDIR}/mod_perl
chmod a+rx  ${BASEDIR}/mod_perl/*.pl
chmod a-w   ${BASEDIR}/mod_perl/*.pl
chmod a+r   ${BASEDIR}/mod_perl/lib/*.pm
chmod a+rwx ${BASEDIR}/mod_perl/statistics
chmod a+rw  ${BASEDIR}/mod_perl/nodes.txt
chmod a+rw  ${BASEDIR}/htdocs/nino/nodes
chmod a+rx  ${BASEDIR}/htdocs
chmod a+rx  ${BASEDIR}/htdocs/nino/
chmod a+r   ${BASEDIR}/htdocs/nino/*.*
chmod a+rwx ${BASEDIR}/htdocs/nino/reports
chmod a+rwx ${BASEDIR}/htdocs/nino/reports/statistics
chmod a+rwx ${BASEDIR}/htdocs/nino/reports/template
chmod a+rw  ${BASEDIR}/htdocs/nino/reports/template/*
chmod a+rwx ${BASEDIR}/htdocs/nino/mibs
chmod a+rwx ${BASEDIR}/htdocs/nino/upload
chmod a+rwx ${BASEDIR}/htdocs/nino/images
chmod a+rx  ${BASEDIR}/htdocs/nino/css


## Setup Perl libs:
## Is UCD SNMP installed or Net::SNMP DTown ?

perl -e "use SNMP;" 2> /dev/null
if [ "$?" != "0" ] ; then
  echo Net::SNMP DTown is installed >> ${LOG}
  mv ${BASEDIR}/mod_perl/lib/NINOSNMP.pm  ${BASEDIR}/mod_perl/libcompat/
  cp ${BASEDIR}/mod_perl/libcompat/NINOSNMP-dtown.pm  ${BASEDIR}/mod_perl/lib/NINOSNMP.pm
else
  echo SNMP UCD/NetSNMP is installed >> ${LOG}
  mv ${BASEDIR}/mod_perl/lib/NINOSNMP.pm  ${BASEDIR}/mod_perl/libcompat/
  cp ${BASEDIR}/mod_perl/libcompat/NINOSNMP-ucd.pm  ${BASEDIR}/mod_perl/lib/NINOSNMP.pm
fi

echo Setup complete >> ${LOG}

 
