2022-09-01 13:17:03 +02:00
#!/bin/bash
##############################################################################################################
# PandoraFMS Community online installation script for Ubuntu 22.04
##############################################################################################################
## Tested versions ##
# Ubuntu 22.04.1
2023-02-22 10:38:14 +01:00
# Ubuntu 22.04.2
2022-09-01 13:17:03 +02:00
#avoid promps
export DEBIAN_FRONTEND = noninteractive
export NEEDRESTART_SUSPEND = 1
#Constants
PANDORA_CONSOLE = /var/www/html/pandora_console
PANDORA_SERVER_CONF = /etc/pandora/pandora_server.conf
PANDORA_AGENT_CONF = /etc/pandora/pandora_agent.conf
WORKDIR = /opt/pandora/deploy
2023-06-29 10:45:41 +02:00
S_VERSION = '2023062901'
2022-09-01 13:17:03 +02:00
LOGFILE = " /tmp/pandora-deploy-community- $( date +%F) .log "
2023-01-02 20:20:03 +01:00
rm -f $LOGFILE & > /dev/null # remove last log before start
2022-09-01 13:17:03 +02:00
# define default variables
[ " $TZ " ] || TZ = "Europe/Madrid"
2022-10-29 07:07:34 +02:00
[ " $PHPVER " ] || PHPVER = 8.0
2022-09-01 13:17:03 +02:00
[ " $DBHOST " ] || DBHOST = 127.0.0.1
[ " $DBNAME " ] || DBNAME = pandora
[ " $DBUSER " ] || DBUSER = pandora
2023-07-25 09:34:17 +02:00
[ " $DBPASS " ] || DBPASS = 'Pandor4!'
2022-09-01 13:17:03 +02:00
[ " $DBPORT " ] || DBPORT = 3306
2023-07-25 09:34:17 +02:00
[ " $DBROOTPASS " ] || DBROOTPASS = 'Pandor4!'
2022-09-01 13:17:03 +02:00
[ " $SKIP_PRECHECK " ] || SKIP_PRECHECK = 0
[ " $SKIP_DATABASE_INSTALL " ] || SKIP_DATABASE_INSTALL = 0
[ " $SKIP_KERNEL_OPTIMIZATIONS " ] || SKIP_KERNEL_OPTIMIZATIONS = 0
[ " $POOL_SIZE " ] || POOL_SIZE = $( grep -i total /proc/meminfo | head -1 | awk '{printf "%.2f \n", $(NF-1)*0.4/1024}' | sed " s/\\..* $/M/g " )
[ " $PANDORA_BETA " ] || PANDORA_BETA = 0
2023-01-25 17:49:39 +01:00
[ " $PANDORA_LTS " ] || PANDORA_LTS = 1
2023-05-09 10:32:01 +02:00
#Check if possible to get os version
if [ ! -e /etc/os-release ] ; then
echo ' > Imposible to determinate the OS version for this machine, please make sure you are intalling in a compatible OS'
echo ' > More info: https://pandorafms.com/manual/en/documentation/02_installation/01_installing#minimum_software_requirements'
exit -1
fi
2022-09-01 13:17:03 +02:00
# Ansi color code variables
red = "\e[0;91m"
green = "\e[0;92m"
cyan = "\e[0;36m"
reset = "\e[0m"
# Functions
execute_cmd ( ) {
local cmd = " $1 "
local msg = " $2 "
echo -e " ${ cyan } $msg ... ${ reset } "
$cmd & >> " $LOGFILE "
if [ $? -ne 0 ] ; then
echo -e " ${ red } Fail ${ reset } "
[ " $3 " ] && echo " $3 "
echo " Error installing Pandora FMS for detailed error please check log: $LOGFILE "
rm -rf " $WORKDIR " & >> " $LOGFILE "
exit 1
else
echo -e " \e[1A\e ${ cyan } $msg ... ${ reset } ${ green } OK ${ reset } "
return 0
fi
}
check_cmd_status ( ) {
if [ $? -ne 0 ] ; then
echo -e " ${ red } Fail ${ reset } "
[ " $1 " ] && echo " $1 "
echo " Error installing Pandora FMS for detailed error please check log: $LOGFILE "
rm -rf " $WORKDIR " & >> " $LOGFILE "
exit 1
else
echo -e " ${ green } OK ${ reset } "
return 0
fi
}
check_pre_pandora ( ) {
export MYSQL_PWD = $DBPASS
echo -en " ${ cyan } Checking environment ... ${ reset } "
[ -d " $PANDORA_CONSOLE " ] && local fail = true
[ -f /usr/bin/pandora_server ] && local fail = true
echo " use $DBNAME " | mysql -u$DBUSER -P$DBPORT -h$DBHOST & >> /dev/null && local fail = true
[ ! $fail ]
check_cmd_status 'Error there is a current Pandora FMS installation on this node, please remove it to execute a clean install'
}
check_repo_connection ( ) {
2023-05-09 07:50:57 +02:00
execute_cmd "ping -c 2 firefly.pandorafms.com" "Checking Community repo"
2022-09-01 13:17:03 +02:00
execute_cmd "ping -c 2 support.pandorafms.com" "Checking Enterprise repo"
}
check_root_permissions ( ) {
echo -en " ${ cyan } Checking root account... ${ reset } "
if [ " $( whoami) " != "root" ] ; then
echo -e " ${ red } Fail ${ reset } "
echo "Please use a root account or sudo for installing Pandora FMS"
echo " Error installing Pandora FMS for detailed error please check log: $LOGFILE "
exit 1
else
echo -e " ${ green } OK ${ reset } "
fi
}
2023-07-25 09:34:17 +02:00
# Function to check if a password meets the MySQL secure password requirements
is_mysql_secure_password( ) {
local password = $1
# Check password length (at least 8 characters)
if [ [ ${# password } -lt 8 ] ] ; then
echo "Password length should be at least 8 characters."
return 1
fi
# Check if password contains at least one uppercase letter
if [ [ $password = = ${ password ,, } ] ] ; then
echo "Password should contain at least one uppercase letter."
return 1
fi
# Check if password contains at least one lowercase letter
if [ [ $password = = ${ password ^^ } ] ] ; then
echo "Password should contain at least one lowercase letter."
return 1
fi
# Check if password contains at least one digit
if ! [ [ $password = ~ [ 0-9] ] ] ; then
echo "Password should contain at least one digit."
return 1
fi
# Check if password contains at least one special character
if ! [ [ $password = ~ [ [ :punct:] ] ] ] ; then
echo "Password should contain at least one special character."
return 1
fi
# Check if password is not a common pattern (e.g., "password", "123456")
local common_patterns = ( "password" "123456" "qwerty" )
for pattern in " ${ common_patterns [@] } " ; do
if [ [ $password = = *" $pattern " * ] ] ; then
echo "Password should not contain common patterns."
return 1
fi
done
# If all checks pass, the password is MySQL secure compliant
return 0
}
2023-02-20 18:52:35 +01:00
installing_docker ( ) {
#Installing docker for debug
echo "Start installig docker" & >> " $LOGFILE "
mkdir -m 0755 -p /etc/apt/keyrings & >> " $LOGFILE "
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --yes --dearmor -o /etc/apt/keyrings/docker.gpg & >> " $LOGFILE "
echo \
" deb [arch= $( dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$( lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list &>> " $LOGFILE "
apt update -y & >> " $LOGFILE "
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin & >> " $LOGFILE "
systemctl disable docker --now & >> " $LOGFILE "
systemctl disable docker.socket --now & >> " $LOGFILE "
echo "End installig docker" & >> " $LOGFILE "
}
2022-09-01 13:17:03 +02:00
## Main
echo " Starting PandoraFMS Community deployment Ubuntu 22.04 ver. $S_VERSION "
2023-05-09 10:32:01 +02:00
#check tools
if ! grep --version & >> $LOGFILE ; then echo 'Error grep is not detected on the system, grep tool is needed for installation.' ; exit -1 ; fi
if ! sed --version & >> $LOGFILE ; then echo 'Error sed is not detected on the system, sed tool is needed for installation.' ; exit -1 ; fi
if ! curl --version & >> $LOGFILE ; then echo 'Error curl is not detected on the system, curl tool is needed for installation.' ; exit -1 ; fi
if ! ping -V & >> $LOGFILE ; then echo 'Error ping is not detected on the system, ping tool is needed for installation.' ; exit -1 ; fi
2022-09-01 14:15:58 +02:00
# Ubuntu Version
2022-09-01 13:17:03 +02:00
if [ ! " $( grep -Ei 'Ubuntu' /etc/lsb-release) " ] ; then
printf " \n ${ red } Error this is not a Ubuntu system, this installer is compatible with Ubuntu systems only ${ reset } \n "
exit 1
fi
echo -en " ${ cyan } Check Ubuntu Version... ${ reset } "
2023-05-09 10:32:01 +02:00
[ [ $( sed -nr 's/VERSION_ID+=\s*"([0-9][0-9].[0-9][0-9])"$/\1/p' /etc/os-release) = = "22.04" ] ]
2022-09-01 13:17:03 +02:00
check_cmd_status 'Error OS version, Ubuntu 22.04 is expected'
#Detect OS
os_name = $( grep ^PRETTY_NAME= /etc/os-release | cut -d '=' -f2 | tr -d '"' )
execute_cmd " echo $os_name " " OS detected: ${ os_name } "
# initialice logfile
execute_cmd " echo 'Starting community deployment' > $LOGFILE " " All installer activity is logged on $LOGFILE "
echo " Community installer version: $S_VERSION " >> " $LOGFILE "
# Pre checks
# Root permisions
check_root_permissions
# Pre installed pandora
[ " $SKIP_PRECHECK " = = 1 ] || check_pre_pandora
#advicing BETA PROGRAM
2023-01-25 17:49:39 +01:00
INSTALLING_VER = " ${ green } RRR version enable using RRR PandoraFMS packages ${ reset } "
[ " $PANDORA_LTS " -ne '0' ] && INSTALLING_VER = " ${ green } LTS version enable using LTS PandoraFMS packages ${ reset } "
2023-04-11 12:15:14 +02:00
[ " $PANDORA_BETA " -ne '0' ] && INSTALLING_VER = " ${ red } BETA version enable using nightly PandoraFMS packages ${ reset } "
2023-01-25 17:49:39 +01:00
echo -e $INSTALLING_VER
2022-09-01 13:17:03 +02:00
# Connectivity
check_repo_connection
2022-10-29 07:07:34 +02:00
#Install awk, sed, grep if not present
execute_cmd "apt install -y gawk sed grep" 'Installing needed tools'
2022-09-01 13:17:03 +02:00
# Systemd
execute_cmd "systemctl --version" "Checking SystemD" 'This is not a SystemD enable system, if tryng to use in a docker env please check: https://github.com/pandorafms/pandorafms/tree/develop/extras/docker/centos8'
# Check memomry greather or equal to 2G
execute_cmd " [ $( grep MemTotal /proc/meminfo | awk '{print $2}' ) -ge 1700000 ] " 'Checking memory (required: 2 GB)'
# Check disk size at least 10 Gb free space
execute_cmd " [ $( df -BM / | tail -1 | awk '{print $4}' | tr -d M) -gt 10000 ] " 'Checking Disk (required: 10 GB free min)'
# Setting timezone
rm -rf /etc/localtime & >> " $LOGFILE "
execute_cmd " timedatectl set-timezone $TZ " " Setting Timezone $TZ "
# Execute tools check
execute_cmd "awk --version" 'Checking needed tools: awk'
execute_cmd "grep --version" 'Checking needed tools: grep'
execute_cmd "sed --version" 'Checking needed tools: sed'
2022-10-29 07:07:34 +02:00
execute_cmd "apt --version" 'Checking needed tools: apt'
2022-09-01 13:17:03 +02:00
2023-07-25 09:34:17 +02:00
#Check mysql pass
execute_cmd " is_mysql_secure_password $DBROOTPASS " "Checking DBROOTPASS password match policy" 'This password do not match minimum MySQL policy requirements, more info in: https://dev.mysql.com/doc/refman/8.0/en/validate-password.html'
execute_cmd " is_mysql_secure_password $DBPASS " "Checking DBPASS password match policy" 'This password do not match minimum MySQL policy requirements, more info in: https://dev.mysql.com/doc/refman/8.0/en/validate-password.html'
2022-09-01 13:17:03 +02:00
# Creating working directory
rm -rf " $WORKDIR " & >> " $LOGFILE "
mkdir -p " $WORKDIR " & >> " $LOGFILE "
execute_cmd " cd $WORKDIR " " Moving to workdir: $WORKDIR "
## Install utils
execute_cmd "apt update" "Updating repos"
2023-02-20 18:52:35 +01:00
execute_cmd "apt install -y net-tools vim curl wget software-properties-common apt-transport-https ca-certificates gnupg lsb-release" "Installing utils"
2022-09-01 13:17:03 +02:00
#Installing Apache and php-fpm
[ -e "/etc/apt/sources.list.d/ondrej-ubuntu-php-jammy.list" ] || execute_cmd "add-apt-repository ppa:ondrej/php -y" "Enable ppa:ondrej/php repo"
execute_cmd "apt update" "Updating repos"
execute_cmd " apt install -y php $PHPVER -fpm php $PHPVER -common libapache2-mod-fcgid php $PHPVER -cli apache2 " "Installing apache and php-fpm"
#execute_cmd "a2enmod proxy_fcgi setenvif && a2enconf php$PHPVER-fpm" "Enabling php-fpm"
echo -en " ${ cyan } Enabling php $PHPVER -fpm... ${ reset } "
a2enmod proxy_fcgi setenvif & >> " $LOGFILE " && a2enconf php$PHPVER -fpm & >> " $LOGFILE "
check_cmd_status " Error enabling php $PHPVER -fpm "
systemctl restart php$PHPVER -fpm & >> " $LOGFILE "
# Console dependencies
console_dependencies = " \
ldap-utils \
postfix \
wget \
graphviz \
xfonts-75dpi \
xfonts-100dpi \
xfonts-ayu \
xfonts-intl-arabic \
xfonts-intl-asian \
xfonts-intl-phonetic \
xfonts-intl-japanese-big \
xfonts-intl-european \
xfonts-intl-chinese \
xfonts-intl-japanese \
xfonts-intl-chinese-big \
libzstd1 \
gir1.2-atk-1.0 \
libavahi-common-data \
cairo-perf-utils \
libfribidi-bin \
php$PHPVER -mcrypt \
php$PHPVER -gd \
php$PHPVER -curl \
php$PHPVER -mysql \
php$PHPVER -ldap \
php$PHPVER -fileinfo \
php$PHPVER -gettext \
php$PHPVER -snmp \
php$PHPVER -mbstring \
php$PHPVER -zip \
php$PHPVER -xmlrpc \
php$PHPVER -xml \
php$PHPVER -yaml \
2022-09-12 16:22:45 +02:00
libnet-telnet-perl \
2023-02-20 18:52:35 +01:00
whois \
cron"
2022-09-01 13:17:03 +02:00
execute_cmd " apt install -y $console_dependencies " "Installing Pandora FMS Console dependencies"
# Server dependencies
server_dependencies = " \
perl \
nmap \
fping \
sudo \
net-tools \
nfdump \
expect \
openssh-client \
postfix \
unzip \
coreutils \
libio-compress-perl \
libmoosex-role-timer-perl \
libdbd-mysql-perl \
libcrypt-mysql-perl \
libhttp-request-ascgi-perl \
liblwp-useragent-chicaching-perl \
liblwp-protocol-https-perl \
snmp \
libnetaddr-ip-perl \
libio-socket-ssl-perl \
libio-socket-socks-perl \
libio-socket-ip-perl \
libio-socket-inet6-perl \
libnet-telnet-perl \
libjson-perl \
libencode-perl \
2023-02-20 18:52:35 +01:00
cron \
2022-09-01 13:17:03 +02:00
libgeo-ip-perl \
2023-03-21 15:41:15 +01:00
arping \
2023-04-18 09:51:04 +02:00
snmp-mibs-downloader \
2023-07-27 08:30:15 +02:00
snmptrapd \
2023-06-29 10:45:41 +02:00
libnsl2 \
2022-09-01 13:17:03 +02:00
openjdk-8-jdk "
execute_cmd " apt install -y $server_dependencies " "Installing Pandora FMS Server dependencies"
2023-02-20 18:52:35 +01:00
execute_cmd "installing_docker" "Installing Docker for debug"
2022-09-01 13:17:03 +02:00
# wmic and pandorawmic
2023-05-09 07:50:57 +02:00
execute_cmd "curl -O https://firefly.pandorafms.com/pandorafms/utils/bin/wmic" "Downloading wmic"
execute_cmd "curl -O https://firefly.pandorafms.com/pandorafms/utils/bin/pandorawmic" "Downloading pandorawmic"
2022-09-01 13:17:03 +02:00
echo -en " ${ cyan } Installing wmic and pandorawmic... ${ reset } "
chmod +x pandorawmic wmic & >> " $LOGFILE " && \
cp -a wmic /usr/bin/ & >> " $LOGFILE " && \
cp -a pandorawmic /usr/bin/ & >> " $LOGFILE "
2023-06-29 10:45:41 +02:00
check_cmd_status "Error Installing pandorawmic/wmic"
2022-09-01 13:17:03 +02:00
2023-01-25 17:49:39 +01:00
# create symlink for fping
rm -f /usr/sbin/fping & >> " $LOGFILE "
ln -s /usr/bin/fping /usr/sbin/fping & >> " $LOGFILE "
2023-01-02 20:20:03 +01:00
# Chrome
2023-01-25 17:49:39 +01:00
rm -f /usr/bin/chromium-browser & >> " $LOGFILE "
2023-04-11 12:15:14 +02:00
CHROME_VERSION = google-chrome-stable_110.0.5481.177-1_amd64.deb
execute_cmd " wget https://dl.google.com/linux/deb/pool/main/g/google-chrome-stable/ ${ CHROME_VERSION } " "Downloading google chrome"
execute_cmd " apt install -y ./ ${ CHROME_VERSION } " "Intalling google chrome"
2023-01-02 20:20:03 +01:00
execute_cmd "ln -s /usr/bin/google-chrome /usr/bin/chromium-browser" "Creating /usr/bin/chromium-browser Symlink"
2022-09-01 13:17:03 +02:00
# SDK VMware perl dependencies
2023-01-25 17:49:39 +01:00
vmware_dependencies = " \
lib32z1 \
2022-09-01 13:17:03 +02:00
lib32z1 \
build-essential \
uuid uuid-dev \
libssl-dev \
perl-doc \
libxml-libxml-perl \
libcrypt-ssleay-perl \
libsoap-lite-perl \
libmodule-build-perl"
execute_cmd " apt install -y $vmware_dependencies " "Installing VMware SDK dependencies"
2023-05-09 07:50:57 +02:00
execute_cmd "wget https://firefly.pandorafms.com/pandorafms/utils/VMware-vSphere-Perl-SDK-7.0.0-16453907.x86_64.tar.gz" "Downloading VMware SDK"
2022-09-01 13:17:03 +02:00
echo -en " ${ cyan } Installing VMware SDK... ${ reset } "
tar xvzf VMware-vSphere-Perl-SDK-7.0.0-16453907.x86_64.tar.gz & >> " $LOGFILE "
cd vmware-vsphere-cli-distrib/ & >> " $LOGFILE "
sed --follow-symlinks -i -e "s/[^#].*show_EULA().*/ #show_EULA();/g" vmware-install.pl & >> " $LOGFILE "
./vmware-install.pl --default & >> " $LOGFILE "
check_cmd_status "Error Installing VMware SDK"
execute_cmd "cpan Crypt::OpenSSL::AES" "Installing extra vmware dependencie"
cd $WORKDIR & >> " $LOGFILE "
# Instant client Oracle
execute_cmd "mkdir -p /opt/oracle" "Creating Oracle instant client directory /opt/oracle"
execute_cmd "wget https://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-basic-linux.x64-19.8.0.0.0dbru.zip" "Downloading Oracle instant client"
execute_cmd "wget https://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-sqlplus-linux.x64-19.8.0.0.0dbru.zip" "Downloading Oracle sqlplus"
echo -en " ${ cyan } Installing Oracle instant client... ${ reset } "
rm -fr /opt/oracle/* & >> " $LOGFILE "
unzip instantclient-basic-linux.x64-19.8.0.0.0dbru.zip -d /opt/oracle/ & >> " $LOGFILE "
unzip instantclient-sqlplus-linux.x64-19.8.0.0.0dbru.zip -d /opt/oracle/ & >> " $LOGFILE "
check_cmd_status "Error Installing Oracle instant client"
#Configuring env variables
cat >> /root/.profile << 'EOF_E NV'
#!/bin/bash
VERSION = 19.8
export PATH = $PATH :/opt/oracle/instantclient_19_8
export LD_LIBRARY_PATH = $LD_LIBRARY_PATH :/opt/oracle/instantclient_19_8
export ORACLE_HOME = /opt/oracle/instantclient_19_8
EOF_ENV
source '/root/.profile' & >> " $LOGFILE "
#ipam dependencies
ipam_dependencies = " \
libnetaddr-ip-perl \
coreutils \
libdbd-mysql-perl \
libxml-simple-perl \
libgeo-ip-perl \
libio-socket-inet6-perl \
libxml-twig-perl \
libnetaddr-ip-perl"
execute_cmd " apt install -y $ipam_dependencies " "Installing IPAM Dependencies"
# MSSQL dependencies el8
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc & >> " $LOGFILE "
curl -sSL https://packages.microsoft.com/config/ubuntu/20.04/prod.list | tee /etc/apt/sources.list.d/microsoft-prod.list & >> " $LOGFILE "
apt update & >> " $LOGFILE "
execute_cmd "env ACCEPT_EULA=Y apt install -y msodbcsql17" "Installing ODBC Driver for Microsoft(R) SQL Server(R)"
MS_ID = $( head -1 /etc/odbcinst.ini | tr -d '[]' ) & >> " $LOGFILE "
# Disabling apparmor and ufw
systemctl stop ufw.service & >> " $LOGFILE "
systemctl disable ufw & >> " $LOGFILE "
systemctl stop apparmor & >> " $LOGFILE "
systemctl disable apparmor & >> " $LOGFILE "
#install mysql
2023-01-25 17:49:39 +01:00
execute_cmd "curl -O https://repo.percona.com/apt/percona-release_latest.generic_all.deb" "Downloading Percona repository for MySQL8"
execute_cmd "apt install -y gnupg2 lsb-release ./percona-release_latest.generic_all.deb" "Installing Percona repository for MySQL8"
execute_cmd "percona-release setup ps80" "Configuring Percona repository for MySQL8"
echo -en " ${ cyan } Installing Percona Server for MySQL8... ${ reset } "
2023-03-21 15:41:15 +01:00
env DEBIAN_FRONTEND = noninteractive apt install -y percona-server-server percona-xtrabackup-80 & >> " $LOGFILE "
2022-09-01 13:17:03 +02:00
check_cmd_status "Error Installing MySql Server"
#Configuring Database
if [ " $SKIP_DATABASE_INSTALL " -eq '0' ] ; then
execute_cmd "systemctl start mysql" "Starting database engine"
2023-01-25 17:49:39 +01:00
echo "" "
ALTER USER 'root' @'localhost' IDENTIFIED WITH mysql_native_password BY '$DBROOTPASS' ;
"" " | mysql -uroot &>> " $LOGFILE "
2022-09-01 13:17:03 +02:00
export MYSQL_PWD = $DBROOTPASS
2023-07-25 09:34:17 +02:00
echo "INSTALL COMPONENT 'file://component_validate_password';" | mysql -uroot -P$DBPORT -h$DBHOST & >> " $LOGFILE "
2022-09-01 13:17:03 +02:00
echo -en " ${ cyan } Creating Pandora FMS database... ${ reset } "
echo " create database $DBNAME " | mysql -uroot -P$DBPORT -h$DBHOST
check_cmd_status " Error creating database $DBNAME , is this an empty node? if you have a previus installation please contact with support. "
echo " CREATE USER \" $DBUSER \"@'%' IDENTIFIED BY \" $DBPASS \"; " | mysql -uroot -P$DBPORT -h$DBHOST
echo " ALTER USER \" $DBUSER \"@'%' IDENTIFIED WITH mysql_native_password BY \" $DBPASS \" " | mysql -uroot -P$DBPORT -h$DBHOST
echo " GRANT ALL PRIVILEGES ON $DBNAME .* TO \" $DBUSER \"@'%' " | mysql -uroot -P$DBPORT -h$DBHOST
fi
export MYSQL_PWD = $DBPASS
#Generating my.cnf
cat > /etc/mysql/my.cnf << EOF_DB
[ mysqld]
datadir = /var/lib/mysql
user = mysql
2023-02-20 18:52:35 +01:00
character-set-server= utf8mb4
2022-09-01 13:17:03 +02:00
skip-character-set-client-handshake
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links= 0
# Mysql optimizations for Pandora FMS
# Please check the documentation in http://pandorafms.com for better results
max_allowed_packet = 64M
innodb_buffer_pool_size = $POOL_SIZE
innodb_lock_wait_timeout = 90
innodb_file_per_table
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_log_file_size = 64M
innodb_log_buffer_size = 16M
2023-02-20 18:52:35 +01:00
innodb_io_capacity = 300
2022-09-01 13:17:03 +02:00
thread_cache_size = 8
thread_stack = 256K
max_connections = 100
key_buffer_size = 4M
read_buffer_size = 128K
read_rnd_buffer_size = 128K
sort_buffer_size = 128K
join_buffer_size = 4M
2023-01-25 17:49:39 +01:00
skip-log-bin
2022-09-01 13:17:03 +02:00
sql_mode = ""
log-error= /var/log/mysql/error.log
[ mysqld_safe]
log-error= /var/log/mysqld.log
pid-file= /var/run/mysqld/mysqld.pid
EOF_DB
execute_cmd "systemctl restart mysql" "Configuring and restarting database engine"
#Define packages
2023-01-25 17:49:39 +01:00
if [ " $PANDORA_LTS " -eq '1' ] ; then
2023-05-09 07:50:57 +02:00
[ " $PANDORA_SERVER_PACKAGE " ] || PANDORA_SERVER_PACKAGE = "http://firefly.pandorafms.com/pandorafms/latest/Tarball/LTS/pandorafms_server-7.0NG.tar.gz"
[ " $PANDORA_CONSOLE_PACKAGE " ] || PANDORA_CONSOLE_PACKAGE = "http://firefly.pandorafms.com/pandorafms/latest/Tarball/LTS/pandorafms_console-7.0NG.tar.gz"
[ " $PANDORA_AGENT_PACKAGE " ] || PANDORA_AGENT_PACKAGE = "http://firefly.pandorafms.com/pandorafms/latest/Tarball/LTS/pandorafms_agent_linux-7.0NG.tar.gz"
2023-01-25 17:49:39 +01:00
elif [ " $PANDORA_LTS " -ne '1' ] ; then
2023-05-09 07:50:57 +02:00
[ " $PANDORA_SERVER_PACKAGE " ] || PANDORA_SERVER_PACKAGE = "http://firefly.pandorafms.com/pandorafms/latest/Tarball/pandorafms_server-7.0NG.tar.gz"
[ " $PANDORA_CONSOLE_PACKAGE " ] || PANDORA_CONSOLE_PACKAGE = "http://firefly.pandorafms.com/pandorafms/latest/Tarball/pandorafms_console-7.0NG.tar.gz"
[ " $PANDORA_AGENT_PACKAGE " ] || PANDORA_AGENT_PACKAGE = "http://firefly.pandorafms.com/pandorafms/latest/Tarball/pandorafms_agent_linux-7.0NG.tar.gz"
2023-01-25 17:49:39 +01:00
fi
if [ " $PANDORA_BETA " -eq '1' ] ; then
2023-05-09 07:50:57 +02:00
PANDORA_SERVER_PACKAGE = "http://firefly.pandorafms.com/pandora_enterprise_nightlies/pandorafms_server-latest_x86_64.tar.gz"
PANDORA_CONSOLE_PACKAGE = "http://firefly.pandorafms.com/pandora_enterprise_nightlies/pandorafms_console-latest.tar.gz"
PANDORA_AGENT_PACKAGE = "http://firefly.pandorafms.com/pandorafms/latest/Tarball/pandorafms_agent_linux-7.0NG.tar.gz"
2022-09-01 13:17:03 +02:00
fi
# Downloading Pandora Packages
cd $WORKDIR & >> " $LOGFILE "
curl -LSs --output pandorafms_console-7.0NG.tar.gz " ${ PANDORA_CONSOLE_PACKAGE } " & >> " $LOGFILE "
curl -LSs --output pandorafms_server-7.0NG.tar.gz " ${ PANDORA_SERVER_PACKAGE } " & >> " $LOGFILE "
2022-12-23 12:01:16 +01:00
curl -LSs --output pandorafms_agent_linux-7.0NG.tar.gz " ${ PANDORA_AGENT_PACKAGE } " & >> " $LOGFILE "
2022-09-01 13:17:03 +02:00
# Install PandoraFMS Console
echo -en " ${ cyan } Installing PandoraFMS Console... ${ reset } "
tar xvzf pandorafms_console-7.0NG.tar.gz & >> " $LOGFILE " && cp -Ra pandora_console /var/www/html/ & >> " $LOGFILE "
check_cmd_status "Error installing PandoraFMS Console"
rm -f $PANDORA_CONSOLE /*.spec & >> " $LOGFILE "
# Install Pandora FMS Server
echo -en " ${ cyan } Installing PandoraFMS Server... ${ reset } "
useradd pandora & >> " $LOGFILE "
tar xvfz $WORKDIR /pandorafms_server-7.0NG.tar.gz & >> $LOGFILE && cd pandora_server && ./pandora_server_installer --install & >> $LOGFILE && cd $WORKDIR & >> $LOGFILE
check_cmd_status "Error installing PandoraFMS Server"
#Install agent:
2022-09-12 16:22:45 +02:00
execute_cmd "apt install -y libyaml-tiny-perl perl coreutils wget curl unzip procps python3 python3-pip" "Installing PandoraFMS Agent Dependencies"
2022-09-01 13:17:03 +02:00
echo -en " ${ cyan } Installing PandoraFMS Agent... ${ reset } "
2022-12-23 12:01:16 +01:00
tar xvzf $WORKDIR /pandorafms_agent_linux-7.0NG.tar.gz & >> " $LOGFILE " && cd unix && ./pandora_agent_installer --install & >> $LOGFILE && cp -a tentacle_client /usr/local/bin/ & >> $LOGFILE && cd $WORKDIR
2022-09-01 13:17:03 +02:00
check_cmd_status "Error installing PandoraFMS Agent"
# Copy gotty utility
cd $WORKDIR & >> " $LOGFILE "
2023-02-22 10:38:14 +01:00
execute_cmd "wget https://firefly.pandorafms.com/pandorafms/utils/gotty_linux_amd64.tar.gz" 'Dowloading gotty util'
2022-09-01 13:17:03 +02:00
tar xvzf gotty_linux_amd64.tar.gz & >> $LOGFILE
execute_cmd "mv gotty /usr/bin/" 'Installing gotty util'
# Config servicesa
#Configure apache2
#Enable SSL connections
cat > /etc/apache2/conf-available/ssl-params.conf << EOF_PARAM
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off
EOF_PARAM
a2enmod ssl & >> " $LOGFILE "
a2enmod headers & >> " $LOGFILE "
a2enconf ssl-params & >> " $LOGFILE "
a2ensite default-ssl & >> " $LOGFILE "
a2enconf ssl-params & >> " $LOGFILE "
apache2ctl configtest & >> " $LOGFILE "
execute_cmd "systemctl restart apache2" "Enable SSL mod and Restarting Apache2"
execute_cmd "systemctl enable mysql --now" "Enabling Database service"
execute_cmd "systemctl enable apache2 --now" "Enabling Apache2 service"
execute_cmd " systemctl enable php $PHPVER -fpm --now " " Enabling php $PHPVER -fpm service "
# Populate Database
echo -en " ${ cyan } Loading pandoradb.sql to $DBNAME database... ${ reset } "
mysql -u$DBUSER -P$DBPORT -h$DBHOST $DBNAME < $PANDORA_CONSOLE /pandoradb.sql & >> " $LOGFILE "
check_cmd_status 'Error Loading database schema'
echo -en " ${ cyan } Loading pandoradb_data.sql to $DBNAME database... ${ reset } "
mysql -u$DBUSER -P$DBPORT -h$DBHOST $DBNAME < $PANDORA_CONSOLE /pandoradb_data.sql & >> " $LOGFILE "
check_cmd_status 'Error Loading database schema data'
# Configure console
# Set console config file
cat > $PANDORA_CONSOLE /include/config.php << EO_CONFIG_F
<?php
\$ config[ "dbtype" ] = "mysql" ;
\$ config[ "dbname" ] = " $DBNAME " ;
\$ config[ "dbuser" ] = " $DBUSER " ;
\$ config[ "dbpass" ] = " $DBPASS " ;
\$ config[ "dbhost" ] = " $DBHOST " ;
\$ config[ "homedir" ] = " $PANDORA_CONSOLE " ;
\$ config[ "homeurl" ] = "/pandora_console" ;
error_reporting( 0) ;
\$ ownDir = dirname( __FILE__) . '/' ;
include ( \$ ownDir . "config_process.php" ) ;
EO_CONFIG_F
#Enable allow Override
cat > /etc/apache2/conf-enabled/pandora_security.conf << EO_CONFIG_F
<Directory "/var/www/html" >
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
EO_CONFIG_F
#Enable quickshell proxy
cat >> /etc/apache2/mods-enabled/00-proxy.conf << 'EO_HTTPD_WSTUNNE L'
ProxyRequests Off
<Proxy *>
Require all granted
</Proxy>
ProxyPass /ws ws://127.0.0.1:8080
ProxyPassReverse /ws ws://127.0.0.1:8080
EO_HTTPD_WSTUNNEL
# Fixing console permissions
chmod 600 $PANDORA_CONSOLE /include/config.php & >> " $LOGFILE "
chown -R www-data:www-data $PANDORA_CONSOLE & >> " $LOGFILE "
mv $PANDORA_CONSOLE /install.php $PANDORA_CONSOLE /install.done & >> " $LOGFILE "
# Prepare php.ini
## Prepare php config
ln -s /etc/php/$PHPVER /fpm/php.ini /etc/
sed --follow-symlinks -i -e "s/^max_input_time.*/max_input_time = -1/g" /etc/php.ini
sed --follow-symlinks -i -e "s/^max_execution_time.*/max_execution_time = 0/g" /etc/php.ini
sed --follow-symlinks -i -e "s/^upload_max_filesize.*/upload_max_filesize = 800M/g" /etc/php.ini
sed --follow-symlinks -i -e "s/^memory_limit.*/memory_limit = 800M/g" /etc/php.ini
sed --follow-symlinks -i -e "s/.*post_max_size =.*/post_max_size = 800M/" /etc/php.ini
sed --follow-symlinks -i -e "s/^disable_functions/;disable_functions/" /etc/php.ini
2023-06-29 10:45:41 +02:00
#adding 900s to httpd timeout and 300 to ProxyTimeout
echo 'TimeOut 900' > /etc/apache2/conf-enabled/timeout.conf
echo 'ProxyTimeout 300' >> /etc/apache2/conf-enabled/timeout.conf
2022-09-01 13:17:03 +02:00
cat > /var/www/html/index.html << EOF_INDE X
<meta HTTP-EQUIV= "REFRESH" content = "0; url=/pandora_console/" >
EOF_INDEX
execute_cmd "systemctl restart apache2" "Restarting apache2 after configuration"
execute_cmd " systemctl restart php $PHPVER -fpm " " Restarting php $PHPVER -fpm after configuration "
# prepare snmptrapd
cat > /etc/snmp/snmptrapd.conf << EOF
authCommunity log public
disableAuthorization yes
EOF
# Prepare Server conf
sed -i -e " s/^dbhost.*/dbhost $DBHOST /g " $PANDORA_SERVER_CONF
sed -i -e " s/^dbname.*/dbname $DBNAME /g " $PANDORA_SERVER_CONF
sed -i -e " s/^dbuser.*/dbuser $DBUSER /g " $PANDORA_SERVER_CONF
sed -i -e " s|^dbpass.*|dbpass $DBPASS |g " $PANDORA_SERVER_CONF
sed -i -e " s/^dbport.*/dbport $DBPORT /g " $PANDORA_SERVER_CONF
sed -i -e " s/^#.mssql_driver.*/mssql_driver $MS_ID /g " $PANDORA_SERVER_CONF
2022-09-12 16:22:45 +02:00
# Adding group www-data to pandora server conf.
grep -q "group www-data" $PANDORA_SERVER_CONF || \
cat >> $PANDORA_SERVER_CONF << EOF_G
#Adding group www-data to assing remote-config permission correctly for ubuntu 22.04
group www-data
EOF_G
2022-09-01 13:17:03 +02:00
# Enable agent remote config
sed -i " s/^remote_config.* $/remote_config 1/g " $PANDORA_AGENT_CONF
# Set Oracle environment for pandora_server
cat > /etc/pandora/pandora_server.env << 'EOF_E NV'
#!/bin/bash
VERSION = 19.8
export PATH = $PATH :/opt/oracle/instantclient_19_8
export LD_LIBRARY_PATH = $LD_LIBRARY_PATH :/opt/oracle/instantclient_19_8
export ORACLE_HOME = /opt/oracle/instantclient_19_8
export OPENSSL_CONF = /etc/ssl
EOF_ENV
# Kernel optimization
if [ " $SKIP_KERNEL_OPTIMIZATIONS " -eq '0' ] ; then
cat >> /etc/sysctl.conf <<EO_KO
# Pandora FMS Optimization
# default=5
net.ipv4.tcp_syn_retries = 3
# default=5
net.ipv4.tcp_synack_retries = 3
# default=1024
net.ipv4.tcp_max_syn_backlog = 65536
# default=124928
net.core.wmem_max = 8388608
# default=131071
net.core.rmem_max = 8388608
# default = 128
net.core.somaxconn = 1024
# default = 20480
net.core.optmem_max = 81920
EO_KO
2023-05-09 13:01:38 +02:00
echo -en " ${ cyan } Applying Kernel optimization... ${ reset } "
sysctl --system & >> $LOGFILE
if [ $? -ne 0 ] ; then
echo -e " ${ red } Fail ${ reset } "
echo -e " ${ yellow } Your kernel could not be optimized, you may be running this script in a virtualized environment with no support for accessing the kernel. ${ reset } "
echo -e " ${ yellow } This system can be used for testing but is not recommended for a production environment. ${ reset } "
echo " $old_sysctl_file " > old_sysctl_file
else
echo -e " ${ green } OK ${ reset } "
fi
2022-09-01 13:17:03 +02:00
fi
# Fix pandora_server.{log,error} permissions to allow Console check them
chown pandora:www-data /var/log/pandora
chmod g+s /var/log/pandora
cat > /etc/logrotate.d/pandora_server <<EO_LR
/var/log/pandora/pandora_server.log
/var/log/pandora/web_socket.log
/var/log/pandora/pandora_server.error {
su root apache
weekly
missingok
size 300000
rotate 3
maxage 90
compress
notifempty
copytruncate
create 660 pandora apache
}
/var/log/pandora/pandora_snmptrap.log {
su root apache
weekly
missingok
size 500000
rotate 1
maxage 30
notifempty
copytruncate
create 660 pandora apache
}
EO_LR
cat > /etc/logrotate.d/pandora_agent <<EO_LRA
/var/log/pandora/pandora_agent.log {
su root apache
weekly
missingok
size 300000
rotate 3
maxage 90
compress
notifempty
copytruncate
}
EO_LRA
chmod 0644 /etc/logrotate.d/pandora_server
chmod 0644 /etc/logrotate.d/pandora_agent
# Add websocket engine start script.
mv /var/www/html/pandora_console/pandora_websocket_engine /etc/init.d/ & >> " $LOGFILE "
chmod +x /etc/init.d/pandora_websocket_engine
# Start Websocket engine
/etc/init.d/pandora_websocket_engine start & >> " $LOGFILE "
# Configure websocket to be started at start.
systemctl enable pandora_websocket_engine & >> " $LOGFILE "
# Enable pandora ha service
execute_cmd "/etc/init.d/pandora_server start" "Starting Pandora FMS Server"
systemctl enable pandora_server & >> " $LOGFILE "
# starting tentacle server
execute_cmd "service tentacle_serverd start" "Starting Tentacle Server"
systemctl enable tentacle_serverd & >> " $LOGFILE "
2023-02-20 18:52:35 +01:00
# Enabling console cron
2023-02-03 12:35:20 +01:00
execute_cmd " echo \"* * * * * root wget -q -O - --no-check-certificate --load-cookies /tmp/cron-session-cookies --save-cookies /tmp/cron-session-cookies --keep-session-cookies http://127.0.0.1/pandora_console/enterprise/cron.php >> $PANDORA_CONSOLE /log/cron.log\" >> /etc/crontab " "Enabling Pandora FMS Console cron"
echo " * * * * * root wget -q -O - --no-check-certificate --load-cookies /tmp/cron-session-cookies --save-cookies /tmp/cron-session-cookies --keep-session-cookies http://127.0.0.1/pandora_console/enterprise/cron.php >> $PANDORA_CONSOLE /log/cron.log " >> /etc/crontab
2022-09-01 13:17:03 +02:00
2023-02-20 18:52:35 +01:00
# Enabling pandoradb cron
execute_cmd " echo 'enabling pandoradb cron' >> $PANDORA_CONSOLE /log/cron.log\" >> /etc/crontab " "Enabling Pandora FMS pandoradb cron"
echo "@hourly root bash -c /etc/cron.hourly/pandora_db" >> /etc/crontab
2022-09-01 13:17:03 +02:00
## Enabling agent adn configuring Agente
sed -i " s/^remote_config.* $/remote_config 1/g " $PANDORA_AGENT_CONF & >> " $LOGFILE "
execute_cmd "/etc/init.d/pandora_agent_daemon start" "Starting PandoraFSM Agent"
systemctl enable pandora_agent_daemon & >> " $LOGFILE "
#fix path phantomjs
2022-09-01 14:15:58 +02:00
sed --follow-symlinks -i -e "s/^openssl_conf = openssl_init/#openssl_conf = openssl_init/g" /etc/ssl/openssl.cnf & >> " $LOGFILE "
2022-09-01 13:17:03 +02:00
2023-06-29 10:45:41 +02:00
# Enable postfix
systemctl enable postfix --now & >> " $LOGFILE "
2023-07-27 08:30:15 +02:00
# Disable snmptrapd
systemctl disable --now snmptrapd & >> " $LOGFILE "
systemctl disable --now snmptrapd.socket & >> " $LOGFILE "
2022-09-01 13:17:03 +02:00
#SSH banner
[ " $( curl -s ifconfig.me) " ] && ipplublic = $( curl -s ifconfig.me)
cat > /etc/issue.net << EOF_banner
2023-02-21 15:36:37 +01:00
Welcome to Pandora FMS appliance on Ubuntu
2022-09-01 13:17:03 +02:00
------------------------------------------
2023-05-09 07:50:57 +02:00
Go to Public http://$ipplublic /pandora_console to login web console
2022-09-01 13:17:03 +02:00
$( ip addr | grep -w "inet" | grep -v "127.0.0.1" | grep -v "172.17.0.1" | awk '{print $2}' | awk -F '/' '{print "Go to Local http://"$1"/pandora_console to login web console"}' )
You can find more information at http://pandorafms.com
EOF_banner
rm -f /etc/issue
ln -s /etc/issue.net /etc/issue
echo 'Banner /etc/issue.net' >> /etc/ssh/sshd_config
# Remove temporary files
execute_cmd "echo done" "Pandora FMS Community installed"
cd " $HOME "
execute_cmd " rm -rf $WORKDIR " "Removing temporary files"
# Print nice finish message
GREEN = '\033[01;32m'
NONE = '\033[0m'
printf " -> Go to Public ${ green } http:// " $ipplublic " /pandora_console ${ reset } to manage this server "
2023-05-09 07:50:57 +02:00
ip addr | grep -w "inet" | grep -v "127.0.0.1" | grep -v -e "172.1[0-9].0.1" | awk '{print $2}' | awk -v g = $GREEN -v n = $NONE -F '/' '{printf "\n -> Go to Local "g"http://"$1"/pandora_console"n" to manage this server \n -> Use these credentials to log in Pandora Console "g"[ User: admin / Password: pandora ]"n" \n"}'