#!/bin/bash ############################################################################################################## # PandoraFMS Community online installation script for Ubuntu 22.04 ############################################################################################################## ## Tested versions ## # Ubuntu 22.04.1 # Ubuntu 22.04.2 #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 S_VERSION='202302201' LOGFILE="/tmp/pandora-deploy-community-$(date +%F).log" rm -f $LOGFILE &> /dev/null # remove last log before start # define default variables [ "$TZ" ] || TZ="Europe/Madrid" [ "$PHPVER" ] || PHPVER=8.0 [ "$DBHOST" ] || DBHOST=127.0.0.1 [ "$DBNAME" ] || DBNAME=pandora [ "$DBUSER" ] || DBUSER=pandora [ "$DBPASS" ] || DBPASS=pandora [ "$DBPORT" ] || DBPORT=3306 [ "$DBROOTPASS" ] || DBROOTPASS=pandora [ "$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 [ "$PANDORA_LTS" ] || PANDORA_LTS=1 # 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 () { execute_cmd "ping -c 2 firefly.artica.es" "Checking Community repo" 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 } 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" } ## Main echo "Starting PandoraFMS Community deployment Ubuntu 22.04 ver. $S_VERSION" # Ubuntu Version 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}" [ $(sed -nr 's/VERSION_ID+=\s*"([0-9][0-9].[0-9][0-9])"$/\1/p' /etc/os-release) == "22.04" ] 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 INSTALLING_VER="${green}RRR version enable using RRR PandoraFMS packages${reset}" [ "$PANDORA_BETA" -ne '0' ] && INSTALLING_VER="${red}BETA version enable using nightly PandoraFMS packages${reset}" [ "$PANDORA_LTS" -ne '0' ] && INSTALLING_VER="${green}LTS version enable using LTS PandoraFMS packages${reset}" echo -e $INSTALLING_VER # Connectivity check_repo_connection #Install awk, sed, grep if not present execute_cmd "apt install -y gawk sed grep" 'Installing needed tools' # 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' execute_cmd "apt --version" 'Checking needed tools: apt' # 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" execute_cmd "apt install -y net-tools vim curl wget software-properties-common apt-transport-https ca-certificates gnupg lsb-release" "Installing utils" #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 \ libnet-telnet-perl \ whois \ cron" 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 \ xprobe \ 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 \ cron \ libgeo-ip-perl \ openjdk-8-jdk " execute_cmd "apt install -y $server_dependencies" "Installing Pandora FMS Server dependencies" execute_cmd "installing_docker" "Installing Docker for debug" # wmic and pandorawmic execute_cmd "curl -O https://firefly.artica.es/pandorafms/utils/bin/wmic" "Downloading wmic" execute_cmd "curl -O https://firefly.artica.es/pandorafms/utils/bin/pandorawmic" "Downloading pandorawmic" 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" check_cmd_status "Error Installing phanromjs" # phantomjs echo -en "${cyan}Installing phantomjs...${reset}" export PHANTOM_JS="phantomjs-2.1.1-linux-x86_64" export OPENSSL_CONF=/etc/ssl curl -LSs -O "https://firefly.artica.es/pandorafms/utils/$PHANTOM_JS.tar.bz2" &>> "$LOGFILE" && \ tar xvjf "$PHANTOM_JS.tar.bz2" &>> "$LOGFILE" && \ mv $PHANTOM_JS/bin/phantomjs /usr/bin &>> "$LOGFILE" && \ /usr/bin/phantomjs --version &>> "$LOGFILE" check_cmd_status "Error Installing phanromjs" # create symlink for fping rm -f /usr/sbin/fping &>> "$LOGFILE" ln -s /usr/bin/fping /usr/sbin/fping &>> "$LOGFILE" # Chrome rm -f /usr/bin/chromium-browser &>> "$LOGFILE" execute_cmd "wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb" "Downloading google chrome" execute_cmd "apt install -y ./google-chrome-stable_current_amd64.deb" "Intalling google chrome" execute_cmd "ln -s /usr/bin/google-chrome /usr/bin/chromium-browser" "Creating /usr/bin/chromium-browser Symlink" # SDK VMware perl dependencies vmware_dependencies="\ lib32z1 \ 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" execute_cmd "wget https://firefly.artica.es/pandorafms/utils/VMware-vSphere-Perl-SDK-7.0.0-16453907.x86_64.tar.gz" "Downloading VMware SDK" 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_ENV' #!/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=" \ xprobe \ 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 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}" env DEBIAN_FRONTEND=noninteractive apt install -y percona-server-server &>> "$LOGFILE" check_cmd_status "Error Installing MySql Server" #Configuring Database if [ "$SKIP_DATABASE_INSTALL" -eq '0' ] ; then execute_cmd "systemctl start mysql" "Starting database engine" echo """ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$DBROOTPASS'; """ | mysql -uroot &>> "$LOGFILE" export MYSQL_PWD=$DBROOTPASS 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 character-set-server=utf8mb4 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 innodb_io_capacity = 300 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 skip-log-bin 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 if [ "$PANDORA_LTS" -eq '1' ] ; then [ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/LTS/pandorafms_server-7.0NG.tar.gz" [ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/LTS/pandorafms_console-7.0NG.tar.gz" [ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/LTS/pandorafms_agent_linux-7.0NG.tar.gz" elif [ "$PANDORA_LTS" -ne '1' ] ; then [ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/pandorafms_server-7.0NG.tar.gz" [ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/pandorafms_console-7.0NG.tar.gz" [ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/pandorafms_agent_linux-7.0NG.tar.gz" fi if [ "$PANDORA_BETA" -eq '1' ] ; then [ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="http://firefly.artica.es/pandora_enterprise_nightlies/pandorafms_server-latest_x86_64.tar.gz" [ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="http://firefly.artica.es/pandora_enterprise_nightlies/pandorafms_console-latest.tar.gz" [ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/pandorafms_agent_linux-7.0NG.tar.gz" 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" curl -LSs --output pandorafms_agent_linux-7.0NG.tar.gz "${PANDORA_AGENT_PACKAGE}" &>> "$LOGFILE" # 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: execute_cmd "apt install -y libyaml-tiny-perl perl coreutils wget curl unzip procps python3 python3-pip" "Installing PandoraFMS Agent Dependencies" echo -en "${cyan}Installing PandoraFMS Agent...${reset}" 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 check_cmd_status "Error installing PandoraFMS Agent" # Copy gotty utility cd $WORKDIR &>> "$LOGFILE" execute_cmd "wget https://firefly.pandorafms.com/pandorafms/utils/gotty_linux_amd64.tar.gz" 'Dowloading gotty util' 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 /etc/apache2/conf-enabled/pandora_security.conf << EO_CONFIG_F Options Indexes FollowSymLinks AllowOverride All Require all granted EO_CONFIG_F #Enable quickshell proxy cat >> /etc/apache2/mods-enabled/00-proxy.conf << 'EO_HTTPD_WSTUNNEL' ProxyRequests Off Require all granted 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 #adding 900s to httpd timeout #echo 'TimeOut 900' > /etc/httpd/conf.d/timeout.conf cat > /var/www/html/index.html << EOF_INDEX 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 # 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 # 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_ENV' #!/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 < /etc/logrotate.d/pandora_server < /etc/logrotate.d/pandora_agent <> "$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" # Enabling console cron 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 # 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 ## 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 sed --follow-symlinks -i -e "s/^openssl_conf = openssl_init/#openssl_conf = openssl_init/g" /etc/ssl/openssl.cnf &>> "$LOGFILE" #SSH banner [ "$(curl -s ifconfig.me)" ] && ipplublic=$(curl -s ifconfig.me) cat > /etc/issue.net << EOF_banner Welcome to Pandora FMS appliance on Ubuntu ------------------------------------------ Go to Public http://$ipplublic/pandora_console$to to login web console $(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" 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"}'