294 lines
9.4 KiB
Bash
Executable File
294 lines
9.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Pandora FMS Server Installer (c) 2008-2009 Artica ST
|
|
# Linux Version (generic), for SuSe and Debian/Ubuntu only
|
|
# other Linux distros could not work properly without modifications
|
|
# Please see http://www.pandorafms.org
|
|
# v3.0 Build 090810
|
|
# This code is licensed under GPL 2.0 license.
|
|
# **********************************************************************
|
|
|
|
MODE=$1
|
|
SECOPT=$2
|
|
|
|
get_distro () {
|
|
# Get Linux Distro type and version
|
|
# We assume we are on Linux unless told otherwise
|
|
LINUX=YES
|
|
if [ -f "/etc/SuSE-release" ]
|
|
then
|
|
OS_VERSION=`cat /etc/SuSE-release | grep VERSION | cut -f 3 -d " "`
|
|
LINUX_DISTRO=SUSE
|
|
elif [ -f "/etc/lsb-release" ]
|
|
then
|
|
OS_VERSION=`cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -f 2 -d "="`
|
|
LINUX_DISTRO=UBUNTU
|
|
OS_VERSION="UBUNTU $OS_VERSION"
|
|
elif [ -f "/etc/debian_version" ]
|
|
then
|
|
OS_VERSION=`cat /etc/debian_version`
|
|
OS_VERSION="DEBIAN $OS_VERSION"
|
|
LINUX_DISTRO=DEBIAN
|
|
elif [ -f "/etc/fedora-release" ]
|
|
then
|
|
OS_VERSION=`cat /etc/fedora-release | cut -f 4 -d " "`
|
|
OS_VERSION="FEDORA $OS_VERSION"
|
|
LINUX_DISTRO=FEDORA
|
|
elif [ `uname -s` == "Darwin" ]
|
|
then
|
|
# For future reference, Darwin doesn't have /etc/init.d but uses LaunchDaemons
|
|
LINUX_DISTRO="Darwin"
|
|
OS_VERSION=`uname -r`
|
|
LINUX=NO
|
|
elif [ `uname -s` == "AIX" ]
|
|
then
|
|
# For future reference, AIX doesn't have /etc/init.d
|
|
LINUX_DISTRO="AIX"
|
|
OS_VERSION=`uname -r`
|
|
LINUX=NO
|
|
elif [ `uname -s` == "SunOS" ]
|
|
then
|
|
# Some Solaris and other Unices don't have /etc/init.d, some have /usr/spool instead of /var/spool
|
|
LINUX_DISTRO="Solaris"
|
|
OS_VERSION=`uname -r`
|
|
LINUX=NO
|
|
elif [ `uname -s` == "Linux" ]
|
|
then
|
|
# Test for Linux to make sure we're on Linux
|
|
LINUX_DISTRO="GENERIC"
|
|
OS_VERSION=`uname -r`
|
|
else
|
|
# Default to Linux is false, test for real Linux above - that way we don't assume we can just plunk down files everywhere
|
|
LINUX_DISTRO=`uname -s`
|
|
OS_VERSION=`uname -r`
|
|
LINUX=NO
|
|
fi
|
|
echo "$LINUX_DISTRO:$OS_VERSION:$LINUX"
|
|
}
|
|
|
|
|
|
install () {
|
|
|
|
perl Makefile.PL > output 2>&1 #&& sleep 2 && cat output | grep "found" | wc -l
|
|
DEPENDENCIAS=`cat output | grep "found" | wc -l`
|
|
if [ $DEPENDENCIAS -gt 0 ]
|
|
then
|
|
echo "You are missing the following dependencies"
|
|
echo " "
|
|
cat output | awk -F ": prerequisite" '{print $2}' | awk -F " " '{print $1}'
|
|
echo "The complete installation guide is at: "http://www.openideas.info/wiki/index.php?title=Pandora_2.0:Documentation_en:Install_Server#Pandora_FMS_Server_installation" "
|
|
echo " "
|
|
echo "Debian-based distribution do:"
|
|
echo " $ apt-get install snmp snmpd libtime-format-perl libxml-simple-perl libnetaddr-ip-perl libdbi-perl libxml-simple-perl libnetaddr-ip-perl libhtml-parser-perl wmi-client xprobe2 libmail-sendmail-perl"
|
|
echo " "
|
|
echo "RPM distribution do"
|
|
echo " "
|
|
echo " $ yum perl-XML-SAX* perl-Tie* perl-XML-Simple* perl-IO-Socket* perl-Time-modules* perl-NetAddr-IP* perl-DateTime* perl-ExtUtils perl-DBI"
|
|
echo " "
|
|
echo "To get it from source through CPAN do"
|
|
echo " "
|
|
echo " $ cpan Digest::MD5 Time::Local DBI XML::Simple IO::Socket Time::HiRes Time::Format NetAddr::IP Mail::Sendmail Net::Traceroute::PurePerl HTML::Entities"
|
|
echo " "
|
|
rm output
|
|
else
|
|
|
|
# This returns a multiple value string, separated with ":" -> $LINUX_DISTRO:$OS_VERSION:$LINUX
|
|
GET_DISTRO="`get_distro`"
|
|
DISTRO=`echo $GET_DISTRO | cut -f 1 -d ":"`
|
|
OS_VERSION=`echo $GET_DISTRO | cut -f 2 -d ":"`
|
|
LINUX=`echo $GET_DISTRO | cut -f 3 -d ":"`
|
|
|
|
if [ "$DISTRO" == "UBUNTU" ]
|
|
then
|
|
echo "UBUNTU distribution detected"
|
|
elif [ "$DISTRO" == "SUSE" ]
|
|
then
|
|
echo "SUSE distribution detected"
|
|
fi
|
|
|
|
echo "Installing binaries and libraries"
|
|
make
|
|
make install
|
|
|
|
echo "Creating common Pandora FMS directories"
|
|
id pandora
|
|
if [ $? -eq 0 ]; then
|
|
echo " "
|
|
echo "User pandora does exist, make sure the SSH directories are correct"
|
|
else
|
|
echo "Are you sure we can create a standard 'pandora' user locally? [y/N]"
|
|
read AREYOUSURE
|
|
if [ "$AREYOUSURE" == "y" ]; then
|
|
useradd pandora
|
|
mkdir /home/pandora 2> /dev/null
|
|
mkdir /home/pandora/.ssh 2> /dev/null
|
|
chown -R pandora /home/pandora
|
|
else
|
|
echo "Please create the 'pandora' user manually according to your authentication scheme then restart the installation"
|
|
echo "Aborting..."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
mkdir /var/spool/pandora 2> /dev/null
|
|
mkdir /var/spool/pandora/data_in 2> /dev/null
|
|
mkdir /var/spool/pandora/data_in/conf 2> /dev/null
|
|
mkdir /var/spool/pandora/data_in/md5 2> /dev/null
|
|
mkdir /var/log/pandora 2> /dev/null
|
|
|
|
echo "Giving proper permission to /var/spool/pandora"
|
|
id -g www-data > /dev/null
|
|
if [ $? -eq 0 ]
|
|
then
|
|
chown -R pandora:www-data /var/spool/pandora/
|
|
else
|
|
id -g www > /dev/null
|
|
if [ $? -eq 0 ]
|
|
then
|
|
chown -R pandora:www /var/spool/pandora/
|
|
else
|
|
id -g apache > /dev/null
|
|
if [ $? -eq 0 ]
|
|
then
|
|
chown -R pandora:apache /var/spool/pandora/
|
|
else
|
|
echo "No web server user found, some functionality might not perform correctly"
|
|
chown -R pandora:root /var/spool/pandora
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
|
|
echo "Creating setup directory in /etc/pandora"
|
|
mkdir /etc/pandora 2> /dev/null
|
|
if [ -e /etc/pandora/pandora_server.conf ]
|
|
then
|
|
OLDFILENAMETMP=`date +"%Y-%m-%d"`
|
|
echo "Old installation detected, backing up pandora_server.conf.$ODFILENAMETMP"
|
|
mv /etc/pandora/pandora_server.conf /etc/pandora/pandora_server.conf.$OLDFILENAMETMP
|
|
fi
|
|
cp conf/pandora_server.conf /etc/pandora/
|
|
chmod 770 /etc/pandora/pandora_server.conf
|
|
|
|
if [ "$LINUX" == "YES" ]
|
|
then
|
|
echo "Copying the daemon script into /etc/init.d/pandora_server"
|
|
cp util/pandora_server /etc/init.d/
|
|
|
|
if [ "$DISTRO" == "UBUNTU" ]
|
|
then
|
|
echo "Linking startup script to /etc/rc2.d"
|
|
ln -s /etc/init.d/pandora_server /etc/rc2.d/S90pandora_server
|
|
else
|
|
INITLV=`cat /etc/inittab | grep "[0-9]\:initdefault" | cut -f 2 -d ":"`
|
|
echo "Linking startup script to /etc/rc.d/rc$INITLV.d"
|
|
ln -s /etc/init.d/pandora_server /etc/rc.d/rc$INITLV.d/S90pandora_server
|
|
fi
|
|
fi
|
|
|
|
if [ -d /etc/logrotate.d ]; then
|
|
echo "Creating logrotate.d entry for Pandora FMS log management"
|
|
cp util/pandora_logrotate /etc/logrotate.d/pandora
|
|
else
|
|
echo "Please add a log rotation schedule manually to your log rotation daemon (if any)"
|
|
fi
|
|
|
|
if [ "$LINUX" == "YES" ]
|
|
then
|
|
if [ "$SECOPT" != "--no-tentacle" ]
|
|
then
|
|
if [ "$DISTRO" == "UBUNTU" ]
|
|
then
|
|
# Tentacle server install (Ubuntu)
|
|
echo "Installing tentacle server in /etc/rc2.d/S80tentacle_serverd"
|
|
cp bin/tentacle_server /usr/local/bin
|
|
cp util/tentacle_serverd /etc/init.d/tentacle_serverd
|
|
ln -s /etc/init.d/tentacle_serverd /etc/rc2.d/S80tentacle_serverd
|
|
else
|
|
# Tentacle server install (SUSE)
|
|
echo "Installing tentacle server in /etc/rc.d/rc$INITLV.d/S80tentacle_serverd"
|
|
cp bin/tentacle_server /usr/local/bin
|
|
cp util/tentacle_serverd /etc/init.d/tentacle_serverd
|
|
ln -s /etc/init.d/tentacle_serverd /etc/rc.d/rc$INITLV.d/S80tentacle_serverd
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo "Creating Pandora FMS distribution directory in /usr/share/pandora"
|
|
mkdir /usr/share/pandora 2> /dev/null
|
|
cp -R util /usr/share/pandora
|
|
|
|
if [ -d /etc/cron.daily ]
|
|
then
|
|
echo "#!/bin/bash" > /etc/cron.daily/pandora_purge_db
|
|
echo "perl /usr/share/pandora/util/pandora_db.pl /etc/pandora/pandora_server.conf" >> /etc/cron.daily/pandora_purge_db
|
|
chmod +x /etc/cron.daily/pandora_purge_db
|
|
else
|
|
echo "You're probably not using cron for automatic scheduling. You should schedule the following command to run frequently (daily) on your master server:"
|
|
echo " perl /usr/share/pandora/util/pandora_db.pl /etc/pandora/pandora_server.conf"
|
|
fi
|
|
rm output
|
|
fi
|
|
|
|
}
|
|
|
|
uninstall () {
|
|
if [ "`uname -s`" != "Linux" ]; then
|
|
echo "This is not a Linux-based distro. Uninstaller is currently not working for your OS"
|
|
fi
|
|
echo "Removing Pandora Servers"
|
|
rm -Rf /var/spool/pandora/data_in/
|
|
|
|
echo "If the user Pandora is not being used for any other operations, please delete using the following commands:"
|
|
echo " userdel pandora"
|
|
echo " rm -Rf /home/pandora/"
|
|
|
|
## Just to clarify here. Some people (like me) are using the pandora user
|
|
## for other purposes and/or using an LDAP-based user management
|
|
## I would hate to have a script clear out this users' information without any notification
|
|
|
|
rm -Rf /var/log/pandora/ 2> /dev/null
|
|
rm -Rf /etc/pandora/pandora_server.conf 2> /dev/null
|
|
rm -Rf /etc/init.d/pandora_server 2> /dev/null
|
|
rm -Rf /etc/rc2.d/S90pandora_server 2> /dev/null
|
|
rm -Rf /etc/rc.d/rc3.d/S90pandora_server 2> /dev/null
|
|
rm -Rf /usr/local/bin/pandora_server 2> /dev/null
|
|
rm -Rf /usr/bin/pandora_server 2> /dev/null
|
|
rm -Rf /usr/share/pandora
|
|
rm -Rf /etc/cron.daily/pandora_purge_db
|
|
echo "Done"
|
|
}
|
|
|
|
help () {
|
|
echo " --install To install Pandora FMS Servers on this system (You have to be root)"
|
|
echo " --uninstall To uninstall and remove Pandora FMS Servers on this System"
|
|
echo " "
|
|
echo " Additional parameters (after --install) "
|
|
echo " "
|
|
echo " --no-tentacle Skip tentacle server installation (by default tentacle server installed)"
|
|
echo " "
|
|
}
|
|
|
|
# Script banner at start
|
|
echo " "
|
|
echo "Pandora FMS 3.0 Server Installer (c) 2008-2009 Artica ST"
|
|
echo "This program is licensed under GPL2 Terms. http://pandorafms.org"
|
|
echo " "
|
|
|
|
case "$MODE" in
|
|
|
|
'--install')
|
|
install
|
|
exit
|
|
;;
|
|
|
|
'--uninstall')
|
|
uninstall
|
|
exit
|
|
;;
|
|
|
|
*)
|
|
help
|
|
esac
|
|
|