414 lines
12 KiB
Bash
Executable File
414 lines
12 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Tentacle Server Installer
|
|
# Linux/FreeBSD Version (generic), for SuSe, Debian/Ubuntu and FreeBSD only
|
|
# other Linux distros could not work properly without modifications
|
|
# Please see http://www.pandorafms.org
|
|
# v1.0 Build 13062022
|
|
# This code is licensed under GPL 2.0 license.
|
|
# **********************************************************************
|
|
|
|
PI_VERSION="7.0NG.762"
|
|
PI_BUILD="220613"
|
|
|
|
MODE=$1
|
|
if [ $# -gt 1 ]; then
|
|
shift
|
|
fi
|
|
|
|
# Defaults
|
|
PREFIX=/usr
|
|
PANDORA_SPOOL=/var/spool/pandora
|
|
TENTACLE_SERVER=/etc/init.d/tentacle_serverd
|
|
TENTACLE_CFG_DIR=/etc/tentacle
|
|
TENTACLE_CFG_FILE=$TENTACLE_CFG_DIR/tentacle_server.conf
|
|
TENTACLE_CFG_FILE_DIST=conf/tentacle_server.conf.new
|
|
TENTACLE_INIT_SCRIPT=util/tentacle_serverd
|
|
PERL=perl
|
|
MANDIR=$PREFIX/share/man/man1
|
|
INITDIR=/etc/init.d
|
|
WITHOUT_TENTACLE=0
|
|
|
|
#
|
|
# set_global_vars
|
|
# Check platform and set DISTRO, OS_VERSION and LINUX.
|
|
# Also, define some platform sepcific variables (e.g. PANDORA_RC_VAR for (Free|Net)BSD)
|
|
# and override some of defaults defined above if needed.
|
|
#
|
|
set_global_vars () {
|
|
# Default
|
|
LINUX=NO
|
|
OS_VERSION=`uname -r`
|
|
DISTRO=`uname -s`
|
|
|
|
# set correct value for LINUX_DISTRO
|
|
case $DISTRO in
|
|
Linux)
|
|
# Default for Linux
|
|
LINUX=YES
|
|
DISTRO="GENERIC"
|
|
# Get Linux Distro type and version
|
|
# We assume we are on Linux unless told otherwise
|
|
if [ -f "/etc/SuSE-release" ]
|
|
then
|
|
OS_VERSION=`cat /etc/SuSE-release | grep VERSION | cut -f 3 -d " "`
|
|
DISTRO=SUSE
|
|
elif [ -f "/etc/lsb-release" ] && [ ! -f "/etc/redhat-release" ]
|
|
then
|
|
OS_VERSION=`cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -f 2 -d "="`
|
|
DISTRO=UBUNTU
|
|
OS_VERSION="UBUNTU $OS_VERSION"
|
|
elif [ -f "/etc/debian_version" ]
|
|
then
|
|
OS_VERSION=`cat /etc/debian_version`
|
|
OS_VERSION="DEBIAN $OS_VERSION"
|
|
DISTRO=DEBIAN
|
|
elif [ -f "/etc/fedora-release" ]
|
|
then
|
|
OS_VERSION=`cat /etc/fedora-release | cut -f 4 -d " "`
|
|
OS_VERSION="FEDORA $OS_VERSION"
|
|
DISTRO=FEDORA
|
|
fi
|
|
;;
|
|
Darwin|AIX)
|
|
# For future reference, Darwin doesn't have /etc/init.d but uses LaunchDaemons.
|
|
# AIX doesn't have /etc/init.d
|
|
;;
|
|
SunOS)
|
|
# Some Solaris and other Unices don't have /etc/init.d, some have /usr/spool instead of /var/spool
|
|
DISTRO="Solaris"
|
|
;;
|
|
FreeBSD)
|
|
PREFIX=/usr/local
|
|
TENTACLE_SERVER=$PREFIX/etc/rc.d/tentacle_server
|
|
TENTACLE_CFG_DIR=$PREFIX/etc/tentacle
|
|
TENTACLE_CFG_FILE=$TENTACLE_CFG_DIR/tentacle_server.conf
|
|
TENTACLE_INIT_SCRIPT=$DISTRO/tentacle_server
|
|
MANDIR=$PREFIX/man/man1
|
|
INITDIR=$PREFIX/etc/rc.d
|
|
PERL=/usr/local/bin/perl
|
|
TENTACLE_RC_VAR="tentacle_server_enable"
|
|
;;
|
|
NetBSD)
|
|
PREFIX=/usr/local
|
|
TENTACLE_CFG_DIR=$PREFIX/etc/tentacle
|
|
TENTACLE_CFG_FILE=$TENTACLE_CFG_DIR/tentacle_server.conf
|
|
TENTACLE_SERVER=/etc/rc.d/tentacle_server
|
|
TENTACLE_INIT_SCRIPT=$DISTRO/tentacle_server
|
|
PERL=/usr/pkg/bin/perl
|
|
INITDIR=/etc/rc.d
|
|
PANDORA_RC_VAR="pandora_server"
|
|
TENTACLE_RC_VAR="tentacle_server"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
#
|
|
# install_startup_script [options...] SRC
|
|
# copy SRC into the $INITDIR and do additional required operation according to $DISTRO
|
|
# if $INITDIR is not set or empty, do nothing.
|
|
# If $DESTDIR is set, skip enabling service
|
|
# OPTIONS:
|
|
# -s SPRIO specify startup priority for service
|
|
#
|
|
install_startup_script () {
|
|
[ "$INITDIR" ] || return 1
|
|
if [ "$1" = "-s" ]
|
|
then
|
|
SPRIO=$2
|
|
shift;shift
|
|
fi
|
|
SRC=$1
|
|
SCRIPT_NAME=`basename $SRC`
|
|
|
|
echo "Copying the daemon script into $DESTDIR$INITDIR"
|
|
[ -d $DESTDIR$INITDIR ] || mkdir -p $DESTDIR$INITDIR
|
|
cp $SRC $DESTDIR$INITDIR
|
|
|
|
[ "$DESTDIR" ] && return
|
|
|
|
case $DISTRO in
|
|
UBUNTU|DEBIAN)
|
|
echo "Linking startup script to /etc/rc2.d"
|
|
update-rc.d $SCRIPT_NAME defaults
|
|
;;
|
|
SUSE)
|
|
echo "Creating startup daemons"
|
|
insserv $SCRIPT_NAME
|
|
;;
|
|
FeeBSD|NetBSD)
|
|
chmod 555 $DESTDIR$INITDIR/$SCRIPT_NAME
|
|
;;
|
|
*)
|
|
if [ "$LINUX" = YES ]
|
|
then
|
|
# Pandora FMS Server install (Other Distros)
|
|
INITLV=`grep '[0-9]:initdefault' /etc/inittab | cut -f 2 -d ':'`
|
|
: ${INITLV:=2}
|
|
echo "Linking startup script to /etc/rc.d/rc$INITLV.d/S$SPRIO$SCRIPT_NAME"
|
|
ln -s $INITDIR/$SCRIPT_NAME /etc/rc.d/rc$INITLV.d/S$SPRIO$SCRIPT_NAME
|
|
fi
|
|
;;
|
|
esac
|
|
}
|
|
|
|
install () {
|
|
set_global_vars
|
|
|
|
FORCE=0
|
|
|
|
# parse options
|
|
while :
|
|
do
|
|
case $1 in
|
|
--force) FORCE=1;;
|
|
--destdir) DESTDIR=$2;shift;;
|
|
*) break;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ "$LINUX" = YES ]
|
|
then
|
|
echo "$DISTRO distribution detected"
|
|
else
|
|
echo "$DISTRO detected"
|
|
fi
|
|
|
|
$PERL -v &> /dev/null
|
|
if [ $? != 0 ]; then
|
|
echo ' '
|
|
echo 'Error, no PERL Interpeter found, please install perl on your system'
|
|
exit 1
|
|
fi
|
|
|
|
#Check dependenciaes.
|
|
if [ $FORCE -eq 0 ]; then
|
|
# Execute tools check
|
|
execute_cmd "ps --version" 'Checking dependencies: ps' "Error ps not found, please install procps"
|
|
execute_cmd "sudo --version" 'Checking dependencies: sudo' "Error sudo not found, please install sudo"
|
|
execute_cmd "perl -MIO::Compress::Zip -le 'pass'" 'Checking dependencies: perl IO::Compress' "Error perl IO::Compress not found, please install perl IO::Compress"
|
|
|
|
execute_cmd "perl -MGetopt::Std -le 'pass'" 'Checking dependencies: perl Getopt::Std' "Error perl IO::Compress not found, please install perl Getopt::Std"
|
|
execute_cmd "perl -MIO::Select -le 'pass'" 'Checking dependencies: perl IO::Select' "Error perl IO::Select not found, please install perl IO::Select"
|
|
execute_cmd "perl -MIO::Uncompress::Unzip -le 'pass'" 'Checking dependencies: perl IO::Uncompress::Unzip' "Error perl IO::Uncompress::Unzip not found, please install perl IO::Uncompress::Unzip"
|
|
execute_cmd "perl -Mthreads -le 'pass'" 'Checking dependencies: perl threads' "Error perl IO::Compress not found, please install perl threads"
|
|
execute_cmd "perl -MThread::Semaphore -le 'pass'" 'Checking dependencies: perl Thread::Semaphore' "Error perl Thread::Semaphore, please install perl Thread::Semaphore"
|
|
|
|
execute_cmd "perl -MPOSIX -le 'pass'" 'Checking dependencies: perl POSIX' "Error perl POSIX not found, please install perl POSIX"
|
|
execute_cmd "perl -MTime::HiRes -le 'pass'" 'Checking dependencies: perl Time::HiRes' "Error perl Time::HiRes not found, please install perl Time::HiRes"
|
|
execute_cmd "perl -MScalar::Util -le 'pass'" 'Checking dependencies: perl Scalar::Util' "Error perl Scalar::Util not found, please install perl Scalar::Util"
|
|
fi
|
|
|
|
# install tentacle
|
|
[ -d $DESTDIR$PREFIX/bin/ ] || mkdir -p $DESTDIR$PREFIX/bin/
|
|
echo ">Installing the tentacle_server binary to $DESTDIR$PREFIX/bin/..."
|
|
cp -f tentacle_server "$DESTDIR$PREFIX/bin/"
|
|
|
|
echo ">Installing the tentacle_client binary to $DESTDIR$PREFIX/bin/..."
|
|
cp -f tentacle_client "$DESTDIR$PREFIX/bin/"
|
|
|
|
echo "Creating common Pandora FMS directories"
|
|
id pandora 2> /dev/null
|
|
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
|
|
if [ "$DISTRO" = "FreeBSD" ]
|
|
then
|
|
echo "pandora:41121:::::Pandora FMS:/home/pandora:/usr/sbin/nologin:" | adduser -f - -w no 2> /dev/null
|
|
else
|
|
useradd pandora
|
|
mkdir /home/pandora 2> /dev/null
|
|
mkdir /home/pandora/.ssh 2> /dev/null
|
|
chown -R pandora /home/pandora
|
|
fi
|
|
else
|
|
echo "Please create the 'pandora' user manually according to your authentication scheme, then start again the installation"
|
|
echo "Aborting..."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
mkdir -p $DESTDIR$PANDORA_SPOOL/data_in 2> /dev/null
|
|
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in
|
|
mkdir $DESTDIR$PANDORA_SPOOL/data_in/conf 2> /dev/null
|
|
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/conf
|
|
mkdir $DESTDIR$PANDORA_SPOOL/data_in/md5 2> /dev/null
|
|
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/md5
|
|
mkdir $DESTDIR$PANDORA_SPOOL/data_in/collections 2> /dev/null
|
|
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/collections
|
|
mkdir $DESTDIR$PANDORA_SPOOL/data_in/netflow 2> /dev/null
|
|
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/netflow
|
|
mkdir $DESTDIR$PANDORA_SPOOL/data_in/trans 2> /dev/null
|
|
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/trans
|
|
mkdir $DESTDIR$PANDORA_SPOOL/data_in/commands 2> /dev/null
|
|
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/commands
|
|
|
|
|
|
echo "Giving proper permission to $DESTDIR$PANDORA_SPOOL/"
|
|
for group in "www-data" wwwrun www apache
|
|
do
|
|
IDGROUP=`id -g "$group" 2> /dev/null`
|
|
if [ $? -eq 0 ]
|
|
then
|
|
GROUPNAME=`grep ":$IDGROUP:" /etc/group | awk -F":" '{print $1}'`
|
|
break
|
|
fi
|
|
done
|
|
if [ -z "$GROUPNAME" ]
|
|
then
|
|
echo "No web server user found, some functionality might not perform correctly"
|
|
GROUPNAME=0
|
|
fi
|
|
# when fakeroot installation, this can fail
|
|
chown -R pandora:$GROUPNAME $DESTDIR$PANDORA_SPOOL 2>/dev/null
|
|
|
|
chown apache:$GROUPNAME $DESTDIR$PANDORA_SPOOL/data_in/customer_key 2>/dev/null
|
|
|
|
# install tentacle_server
|
|
install_startup_script -s 80 $TENTACLE_INIT_SCRIPT
|
|
|
|
# Create the directory to locate the Tentacle configuration file
|
|
echo "Creating setup Tentacle directory in $DESTDIR$TENTACLE_CFG_DIR"
|
|
mkdir -p $DESTDIR$TENTACLE_CFG_DIR 2> /dev/null
|
|
if [ -f "$DESTDIR$TENTACLE_CFG_FILE" ]
|
|
then
|
|
echo cp $TENTACLE_CFG_FILE_DIST $DESTDIR$TENTACLE_CFG_DIR
|
|
cp $TENTACLE_CFG_FILE_DIST $DESTDIR$TENTACLE_CFG_DIR
|
|
else
|
|
echo cp $TENTACLE_CFG_FILE_DIST $DESTDIR$TENTACLE_CFG_FILE
|
|
cp $TENTACLE_CFG_FILE_DIST $DESTDIR$TENTACLE_CFG_FILE
|
|
chmod 774 $DESTDIR$TENTACLE_CFG_FILE
|
|
fi
|
|
|
|
echo "Installing Tentacle Server manual"
|
|
[ -d $DESTDIR$MANDIR ] || mkdir -p $DESTDIR$MANDIR
|
|
cp man/man1/tentacle_server.1.gz $DESTDIR$MANDIR
|
|
|
|
# Fix util paths
|
|
sed -i -e "s|directory.*|directory $DESTDIR$PANDORA_SPOOL/data_in|g" $DESTDIR$TENTACLE_CFG_FILE
|
|
sed -i -e "s|TENTACLE_PATH=\"/usr/bin\"|TENTACLE_PATH=$DESTDIR$PREFIX/bin|g" $DESTDIR$TENTACLE_SERVER
|
|
sed -i -e "s|^TENTACLE_CONFIG_FILE=.*|TENTACLE_CONFIG_FILE=$DESTDIR$TENTACLE_CFG_FILE|g" $DESTDIR$TENTACLE_SERVER
|
|
|
|
echo "Tentacle Server installed"
|
|
|
|
|
|
}
|
|
|
|
uninstall () {
|
|
set_global_vars
|
|
|
|
# parse options
|
|
while :
|
|
do
|
|
case $1 in
|
|
--destdir) DESTDIR=$2;shift;;
|
|
*) break;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ "$LINUX" != "YES" ] && [ "$DISTRO" != "FreeBSD" ] && [ "$DISTRO" != "NetBSD" ]
|
|
then
|
|
echo "This is not a Linux-based distro. Uninstaller is currently not working for your OS"
|
|
exit 1
|
|
fi
|
|
|
|
|
|
echo "Removing Tentacle Server"
|
|
if [ -d $DESTDIR$PANDORA_SPOOL/data_out ]; then
|
|
rm -Rf $DESTDIR$PANDORA_SPOOL/data_in
|
|
else
|
|
rm -Rf $DESTDIR$PANDORA_SPOOL
|
|
fi
|
|
|
|
echo "If the user Pandora is not being used for any other operations, please delete using the following commands:"
|
|
if [ "$DISTRO" != "FreeBSD" ] || [ "$DISTRO" != "NetBSD" ]
|
|
then
|
|
echo " rmuser pandora"
|
|
else
|
|
echo " userdel pandora"
|
|
echo " rm -Rf /home/pandora/"
|
|
fi
|
|
|
|
## 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 -f $DESTDIR$TENTACLE_CFG_FILE 2> /dev/null
|
|
rm -f "$DESTDIR$TENTACLE_CFG_FILE.new" 2> /dev/null
|
|
# Do not remove tentacle files if agent is still installed...
|
|
[ -e $DESTDIR$PREFIX/bin/pandora_agent ] || rm -f $DESTDIR$PREFIX/bin/tentacle_server 2> /dev/null
|
|
[ -e $DESTDIR$PREFIX/bin/pandora_agent ] || rm -f $DESTDIR$PREFIX/bin/tentacle_client 2> /dev/null
|
|
if [ "$DESTDIR" ]
|
|
then
|
|
rm -f $DESTDIR$TENTACLE_SERVER
|
|
elif [ "$DISTRO" = "UBUNTU" ] || [ "$DISTRO" = "DEBIAN" ]
|
|
then
|
|
update-rc.d -f tentacle_serverd remove
|
|
fi
|
|
|
|
rm -f $DESTDIR/etc/rc2.d/S80tentacle_serverd 2> /dev/null
|
|
rm -f $DESTDIR/etc/rc.d/rc3.d/S80tentacle_serverd 2> /dev/null
|
|
|
|
echo "Done"
|
|
echo $DESTDIR$TENTACLE_SERVER
|
|
}
|
|
|
|
help () {
|
|
echo " --install To install Tentacle Server on this system (You have to be root)"
|
|
echo " --uninstall To uninstall and remove Tentacle Server on this System"
|
|
echo " "
|
|
echo " Additional second parameter (after --install) "
|
|
echo " "
|
|
echo " --force Ignore dependency problems and do the install"
|
|
echo " --destdir DIR Specify root directory for \"fakeroot\" installation"
|
|
echo " "
|
|
}
|
|
|
|
execute_cmd () {
|
|
cmd="$1"
|
|
msg="$2"
|
|
|
|
echo "$msg"
|
|
$cmd &>> /dev/null
|
|
if [ $? -ne 0 ]; then
|
|
echo "Fail"
|
|
[ "$3" ] && echo "$3"
|
|
echo "Error installing Tentacle server"
|
|
exit 1
|
|
else
|
|
echo "Ok"
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
##Main
|
|
|
|
# Script banner at start
|
|
echo " "
|
|
echo "Tentacle Server Installer $PI_VERSION $PI_BUILD (c) 2008-2022 Artica ST"
|
|
echo "This program is licensed under GPL2 Terms. http://pandorafms.com"
|
|
echo " "
|
|
|
|
case "$MODE" in
|
|
|
|
'--install')
|
|
install "$@"
|
|
exit 0
|
|
;;
|
|
|
|
'--uninstall')
|
|
uninstall "$@"
|
|
exit 0
|
|
;;
|
|
|
|
*)
|
|
help
|
|
esac
|