diff --git a/extras/deploy-scripts/pandora_deploy_community_el9.sh b/extras/deploy-scripts/pandora_deploy_community_el9.sh new file mode 100644 index 0000000000..176c1bbea8 --- /dev/null +++ b/extras/deploy-scripts/pandora_deploy_community_el9.sh @@ -0,0 +1,782 @@ +#!/bin/bash +####################################################### +# PandoraFMS Community online installation script +####################################################### +## Tested versions ## +# Rockylinux 9.3 +# RHEL 9.3 + +#Constants +PANDORA_CONSOLE=/var/www/html/pandora_console +PANDORA_SERVER_CONF=/etc/pandora/pandora_server.conf +PANDORA_AGENT_CONF=/etc/pandora/pandora_agent.conf + + +S_VERSION='2024021301' +LOGFILE="/tmp/pandora-deploy-community-$(date +%F).log" + +# define default variables +[ "$TZ" ] || TZ="Europe/Madrid" +[ "$MYVER" ] || MYVER=80 +[ "$PHPVER" ] || PHPVER=8 +[ "$DBHOST" ] || DBHOST=127.0.0.1 +[ "$DBNAME" ] || DBNAME=pandora +[ "$DBUSER" ] || DBUSER=pandora +[ "$DBPASS" ] || DBPASS='Pandor4!' +[ "$DBPORT" ] || DBPORT=3306 +[ "$DBROOTUSER" ] || DBROOTUSER=root +[ "$DBROOTPASS" ] || DBROOTPASS='Pandor4!' +[ "$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_LTS" ] || PANDORA_LTS=1 +[ "$PANDORA_BETA" ] || PANDORA_BETA=0 +[ "$RHEL_CHECK_SUBSCRIPTION" ] || RHEL_CHECK_SUBSCRIPTION=1 + +#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 + +# Ansi color code variables +red="\e[0;91m" +green="\e[0;92m" +cyan="\e[0;36m" +yellow="\e[33m" +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 "$HOME"/pandora_deploy_tmp &>> "$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 "$HOME"/pandora_deploy_tmp/*.rpm* &>> "$LOGFILE" + exit 1 + else + echo -e "${green}OK${reset}" + return 0 + fi +} + +check_pre_pandora () { + + echo -en "${cyan}Checking environment ... ${reset}" + rpm -qa | grep 'pandorafms_' | grep -v pandorafms_agent_* | grep -v "pandorawmic" | grep -v "pandorafms_made" &>> /dev/null && local fail=true + [ -d "$PANDORA_CONSOLE" ] && local fail=true + [ -f /usr/bin/pandora_server ] && local fail=true + + if [ "$SKIP_DATABASE_INSTALL" -eq '0' ]; then + export MYSQL_PWD=$DBPASS + echo "use $DBNAME" | mysql -u$DBUSER -P$DBPORT -h$DBHOST &>> /dev/null && local fail=true + fi + + [ ! $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.pandorafms.com" "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" + dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo &>> "$LOGFILE" + dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin &>> "$LOGFILE" + systemctl disable --now docker &>> "$LOGFILE" + systemctl disable docker.socket --now &>> "$LOGFILE" + echo "End installig docker" &>> "$LOGFILE" +} + +# 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 +} + +## Main +echo "Starting PandoraFMS Community deployment EL8 ver. $S_VERSION" + +#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 + +# Centos Version +if [ ! "$(grep -Ei 'centos|rocky|Almalinux|Red Hat Enterprise' /etc/redhat-release)" ]; then + printf "\n ${red}Error this is not a Centos/Rocky/Almalinux Base system, this installer is compatible with RHEL/Almalinux/Centos/Rockylinux systems only${reset}\n" + exit 1 +fi + + +echo -en "${cyan}Check Centos Version...${reset}" +[[ $(sed -nr 's/VERSION_ID+=\s*"([0-9]).*"$/\1/p' /etc/os-release) -eq '9' ]] +check_cmd_status 'Error OS version, RHEL/Almalinux/Centos/Rockylinux 8.x 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_LTS" -ne '0' ] && INSTALLING_VER="${green}LTS version enable using LTS PandoraFMS packages${reset}" +[ "$PANDORA_BETA" -ne '0' ] && INSTALLING_VER="${red}BETA version enable using nightly PandoraFMS packages${reset}" +echo -e $INSTALLING_VER + +# Connectivity +check_repo_connection + +# Systemd +execute_cmd "systemctl status" "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 "dnf --version" 'Checking needed tools: dnf' + +#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' + +# Creating working directory +rm -rf "$HOME"/pandora_deploy_tmp/*.rpm* &>> "$LOGFILE" +mkdir "$HOME"/pandora_deploy_tmp &>> "$LOGFILE" +execute_cmd "cd $HOME/pandora_deploy_tmp" "Moving to workspace: $HOME/pandora_deploy_tmp" + +## Extra steps on redhat envs +if [ "$(grep -Ei 'Red Hat Enterprise' /etc/redhat-release)" ]; then + ## In case REDHAT + if [ "$RHEL_CHECK_SUBSCRIPTION" -eq '1' ] ; then + + # Check susbscription manager status: + echo -en "${cyan}Checking Red Hat Enterprise subscription... ${reset}" + subscription-manager list &>> "$LOGFILE" + subscription-manager status &>> "$LOGFILE" + check_cmd_status 'Error checking subscription status, make sure your server is activated and suscribed to Red Hat Enterprise repositories' + + # Ckeck repolist + dnf repolist &>> "$LOGFILE" + echo -en "${cyan}Checking Red Hat Enterprise repolist... ${reset}" + dnf repolist | grep 'rhel-9-for-x86_64-baseos-rpms' &>> "$LOGFILE" + check_cmd_status 'Error checking repositories status, could try a subscription-manager attach command or contact sysadmin' + fi + #install extra repos + extra_repos=" \ + tar \ + dnf-utils \ + https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm \ + https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm \ + https://rpms.remirepo.net/enterprise/remi-release-9.rpm \ + https://repo.percona.com/yum/percona-release-latest.noarch.rpm" + + execute_cmd "dnf install -y $extra_repos" "Installing extra repositories" + execute_cmd "subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms" "Enabling subscription to codeready-builder" +else + # For alma/rocky/centos + extra_repos=" \ + tar \ + dnf-utils \ + https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm \ + https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm \ + https://rpms.remirepo.net/enterprise/remi-release-9.rpm \ + https://repo.percona.com/yum/percona-release-latest.noarch.rpm" + + execute_cmd "dnf install -y $extra_repos" "Installing extra repositories" + execute_cmd "dnf config-manager --enable crb" "Configuring crb" +fi + +execute_cmd "installing_docker" "Installing Docker for debug" + +#Installing wget +execute_cmd "dnf install -y wget" "Installing wget" + +#Installing php +execute_cmd "dnf module reset -y php " "Disabling standard PHP module" + +if [ "$PHPVER" -eq '8' ] ; then + PHPVER=8.2 +fi +execute_cmd "dnf module install -y php:remi-$PHPVER" "Configuring PHP $PHPVER" + + + +if [ "$MYVER" -eq '80' ] ; then + execute_cmd "percona-release setup ps80 -y" "Enabling mysql80 module" + execute_cmd "dnf install -y percona-server-server percona-xtrabackup-80" "Installing Percona Server 80" +fi + +# Console dependencies +console_dependencies=" \ + php \ + postfix \ + php-mcrypt \ + php-cli \ + php-gd \ + php-curl \ + php-session \ + php-mysqlnd \ + php-ldap \ + php-zip \ + php-zlib \ + php-fileinfo \ + php-gettext \ + php-snmp \ + php-mbstring \ + php-pecl-zip \ + php-xmlrpc \ + libxslt \ + wget \ + php-xml \ + httpd \ + mod_php \ + atk \ + avahi-libs \ + cairo \ + cups-libs \ + fribidi \ + gd \ + gdk-pixbuf2 \ + ghostscript \ + graphite2 \ + graphviz \ + gtk2 \ + harfbuzz \ + hicolor-icon-theme \ + hwdata \ + jasper-libs \ + lcms2 \ + libICE \ + libSM \ + libXaw \ + libXcomposite \ + libXcursor \ + libXdamage \ + libXext \ + libXfixes \ + libXft \ + libXi \ + libXinerama \ + libXmu \ + libXrandr \ + libXrender \ + libXt \ + libXxf86vm \ + libdrm \ + libfontenc \ + libglvnd \ + libglvnd-egl \ + libglvnd-glx \ + libpciaccess \ + librsvg2 \ + libthai \ + libtool-ltdl \ + libwayland-client \ + libwayland-server \ + libxshmfence \ + mesa-libEGL \ + mesa-libGL \ + mesa-libgbm \ + mesa-libglapi \ + pango \ + pixman \ + xorg-x11-fonts-75dpi \ + xorg-x11-fonts-misc \ + poppler-data \ + php-yaml \ + mod_ssl \ + libzstd \ + openldap-clients \ + https://firefly.pandorafms.com/centos8/chromium-110.0.5481.177-1.el7.x86_64.rpm \ + https://firefly.pandorafms.com/centos8/chromium-common-110.0.5481.177-1.el7.x86_64.rpm \ + https://firefly.pandorafms.com/centos8/pandora_gotty-1.0-1.el8.x86_64.rpm \ + https://firefly.pandorafms.com/centos8/pandorafms_made-0.1.0-1.el8.x86_64.rpm " +execute_cmd "dnf install -y $console_dependencies" "Installing Pandora FMS Console dependencies" + +# Server dependencies +server_dependencies=" \ + perl \ + vim \ + fping \ + perl-IO-Compress \ + nmap \ + sudo \ + perl-Time-HiRes \ + nfdump \ + net-snmp-utils \ + perl(NetAddr::IP) \ + perl(Sys::Syslog) \ + perl(DBI) \ + perl(XML::Simple) \ + perl(IO::Socket::INET6) \ + perl(XML::Twig) \ + perl-JSON \ + expect \ + openssh-clients \ + java \ + bind-utils \ + whois \ + libnsl \ + libxcrypt-compat \ + https://firefly.pandorafms.com/pandorafms-el9/perl-Geo-IP-1.51-1.el9.x86_64.rpm \ + https://firefly.pandorafms.com/centos8/pandorawmic-1.0.0-1.x86_64.rpm" +execute_cmd "dnf install -y $server_dependencies" "Installing Pandora FMS Server dependencies" + +#ipam dependencies +ipam_dependencies=" \ + perl(NetAddr::IP) \ + perl(Sys::Syslog) \ + perl(DBI) \ + perl(XML::Simple) \ + perl(IO::Socket::INET6) \ + perl(XML::Twig)" +execute_cmd "dnf install -y $ipam_dependencies" "Installing IPAM Instant client" + +# Disabling SELINUX and firewalld +setenforce 0 &>> "$LOGFILE" +sed -i -e "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config &>> "$LOGFILE" +systemctl disable firewalld --now &>> "$LOGFILE" + + +# Adding standar cnf for initial setup. +cat > /etc/my.cnf << EO_CONFIG_TMP +[mysqld] +datadir=/var/lib/mysql +socket=/var/lib/mysql/mysql.sock +symbolic-links=0 +log-error=/var/log/mysqld.log +pid-file=/var/run/mysqld/mysqld.pid +EO_CONFIG_TMP + +#Configuring Database +if [ "$SKIP_DATABASE_INSTALL" -eq '0' ] ; then + execute_cmd "systemctl start mysqld" "Starting database engine" + export MYSQL_PWD=$(grep "temporary password" /var/log/mysqld.log | rev | cut -d' ' -f1 | rev) + if [ "$MYVER" -eq '80' ] ; then + echo """ + SET PASSWORD FOR '$DBROOTUSER'@'localhost' = 'Pandor4!'; + SET PASSWORD FOR '$DBROOTUSER'@'localhost' = '$DBROOTPASS'; + """ | mysql --connect-expired-password -u$DBROOTUSER &>> "$LOGFILE" + fi + + if [ "$MYVER" -ne '80' ] ; then + echo """ + SET PASSWORD FOR '$DBROOTUSER'@'localhost' = PASSWORD('Pandor4!'); + SET PASSWORD FOR '$DBROOTUSER'@'localhost' = PASSWORD('$DBROOTPASS'); + """ | mysql --connect-expired-password -u$DBROOTUSER &>> "$LOGFILE"fi + fi + + export MYSQL_PWD=$DBROOTPASS + echo -en "${cyan}Creating Pandora FMS database...${reset}" + echo "create database $DBNAME" | mysql -u$DBROOTUSER -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 -u$DBROOTUSER -P$DBPORT -h$DBHOST + echo "ALTER USER \"$DBUSER\"@'%' IDENTIFIED WITH mysql_native_password BY \"$DBPASS\"" | mysql -u$DBROOTUSER -P$DBPORT -h$DBHOST + echo "GRANT ALL PRIVILEGES ON $DBNAME.* TO \"$DBUSER\"@'%'" | mysql -u$DBROOTUSER -P$DBPORT -h$DBHOST + +#Generating my.cnf +cat > /etc/my.cnf << EO_CONFIG_F +[mysqld] +datadir=/var/lib/mysql +socket=/var/lib/mysql/mysql.sock +user=mysql +character-set-server=utf8 +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 https://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="" + +[mysqld_safe] +log-error=/var/log/mysqld.log +pid-file=/var/run/mysqld/mysqld.pid + +EO_CONFIG_F + + execute_cmd "systemctl restart mysqld" "Configuring database engine" + execute_cmd "systemctl enable mysqld --now" "Enabling Database service" +fi +export MYSQL_PWD=$DBPASS + +#Define packages +if [ "$PANDORA_LTS" -eq '1' ] ; then + [ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/LTS/pandorafms_server-7.0NG.noarch.rpm" + [ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/LTS/pandorafms_console-7.0NG.noarch.rpm" + [ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/pandorafms_agent_linux_bin-7.0NG.x86_64.rpm" +elif [ "$PANDORA_LTS" -ne '1' ] ; then + [ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/pandorafms_server-7.0NG.x86_64.rpm" + [ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/pandorafms_console-7.0NG.x86_64.rpm" + [ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/pandorafms_agent_linux_bin-7.0NG.x86_64.rpm" +fi + +# if beta is enable +if [ "$PANDORA_BETA" -eq '1' ] ; then + PANDORA_SERVER_PACKAGE="https://firefly.pandorafms.com/pandora_enterprise_nightlies/pandorafms_server-latest.x86_64.rpm" + PANDORA_CONSOLE_PACKAGE="https://firefly.pandorafms.com/pandora_enterprise_nightlies/pandorafms_console-latest.x86_64.rpm" + PANDORA_AGENT_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/pandorafms_agent_linux_bin-7.0NG.x86_64.rpm" +fi + +# Downloading Pandora Packages +execute_cmd "curl -LSs --output pandorafms_server-7.0NG.noarch.rpm ${PANDORA_SERVER_PACKAGE}" "Downloading Pandora FMS Server community" +execute_cmd "curl -LSs --output pandorafms_console-7.0NG.noarch.rpm ${PANDORA_CONSOLE_PACKAGE}" "Downloading Pandora FMS Console community" +execute_cmd "curl -LSs --output pandorafms_agent_linux-7.0NG.noarch.rpm ${PANDORA_AGENT_PACKAGE}" "Downloading Pandora FMS Agent community" + +# Install Pandora +execute_cmd "dnf install -y $HOME/pandora_deploy_tmp/pandorafms_console*.rpm $HOME/pandora_deploy_tmp/pandorafms_agent*.rpm" "Installing Pandora FMS packages" +execute_cmd "rpm -i --nodeps $HOME/pandora_deploy_tmp/pandorafms_server-7.0NG.noarch.rpm " "Installing Pandora FMS Server package" + +# Enable Services +execute_cmd "systemctl enable httpd --now" "Enabling HTTPD service" +execute_cmd "systemctl enable php-fpm --now" "Enabling PHP-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 +cat > $PANDORA_CONSOLE/include/config.php << EO_CONFIG_F + /etc/httpd/conf.d/pandora.conf << EO_CONFIG_F + + Options Indexes FollowSymLinks + AllowOverride All + Require all granted + + +EO_CONFIG_F + +# Temporal quitar htaccess +sed -i -e "s/php_flag engine off//g" $PANDORA_CONSOLE/images/.htaccess +sed -i -e "s/php_flag engine off//g" $PANDORA_CONSOLE/attachment/.htaccess + +# Fixing console permissions +chmod 600 $PANDORA_CONSOLE/include/config.php +chown apache. $PANDORA_CONSOLE/include/config.php +mv $PANDORA_CONSOLE/install.php $PANDORA_CONSOLE/install.done &>> "$LOGFILE" + +# Prepare php.ini +sed -i -e "s/^max_input_time.*/max_input_time = -1/g" /etc/php.ini +sed -i -e "s/^max_execution_time.*/max_execution_time = 0/g" /etc/php.ini +sed -i -e "s/^upload_max_filesize.*/upload_max_filesize = 800M/g" /etc/php.ini +sed -i -e "s/^memory_limit.*/memory_limit = 800M/g" /etc/php.ini +sed -i -e "s/.*post_max_size =.*/post_max_size = 800M/" /etc/php.ini + +#adding 900s to httpd timeout and 300 to ProxyTimeout +echo 'TimeOut 900' > /etc/httpd/conf.d/timeout.conf +echo 'ProxyTimeout 300' >> /etc/httpd/conf.d/timeout.conf + +cat > /var/www/html/index.html << EOF_INDEX + +EOF_INDEX + +execute_cmd "systemctl restart httpd" "Restarting httpd after configuration" +execute_cmd "systemctl restart php-fpm" "Restarting php-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 + +#check fping +fping_bin=$(which fping) +execute_cmd "[ $fping_bin ]" "Check fping location: $fping_bin" +if [ "$fping_bin" != "" ]; then + sed -i -e "s|^fping.*|fping $fping_bin|g" $PANDORA_SERVER_CONF +fi + +# Enable agent remote config +sed -i "s/^remote_config.*$/remote_config 1/g" $PANDORA_AGENT_CONF + +# Kernel optimization +if [ "$SKIP_KERNEL_OPTIMIZATIONS" -eq '0' ] ; then + +old_sysctl_file=$(cat /etc/sysctl.conf) + +cat >> /etc/sysctl.conf <> $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 + +fi + +# Fix pandora_server.{log,error} permissions to allow Console check them +chown pandora:apache /var/log/pandora +chmod g+s /var/log/pandora + +cat > /etc/logrotate.d/pandora_server < /etc/logrotate.d/pandora_agent <> "$LOGFILE" +execute_cmd "/etc/init.d/pandora_server start" "Starting Pandora FMS Server" + +# starting tentacle server +systemctl enable tentacle_serverd &>> "$LOGFILE" +execute_cmd "service tentacle_serverd start" "Starting Tentacle Server" + +# 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/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/cron.php >> $PANDORA_CONSOLE/log/cron.log" >> /etc/crontab +## Enabling agent +systemctl enable pandora_agent_daemon &>> "$LOGFILE" +execute_cmd "systemctl start pandora_agent_daemon" "Starting Pandora FMS Agent" + +# Enable postfix +systemctl enable postfix --now &>> "$LOGFILE" + +#SSH banner +[ "$(curl -s ifconfig.me)" ] && ipplublic=$(curl -s ifconfig.me) + +cat > /etc/issue.net << EOF_banner + +Welcome to Pandora FMS appliance on RHEL/Rocky Linux 8 +------------------------------------------ +Go to Public http://$ipplublic/pandora_console 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 +execute_cmd "rm -rf $HOME/pandora_deploy_tmp" "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"}' \ No newline at end of file diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 8364d887e0..49968aff95 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.776-240325 +Version: 7.0NG.776-240326 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index ff7dd84f27..747e9899e7 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.776-240325" +pandora_version="7.0NG.776-240326" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 063cf136c3..3af86f333a 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -1039,7 +1039,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.776'; -use constant AGENT_BUILD => '240325'; +use constant AGENT_BUILD => '240326'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 587cad9a58..851b6c2c85 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -4,7 +4,7 @@ %global __os_install_post %{nil} %define name pandorafms_agent_linux %define version 7.0NG.776 -%define release 240325 +%define release 240326 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.redhat_bin.el8.spec b/pandora_agents/unix/pandora_agent.redhat_bin.el8.spec index f71ab1e99e..5de72b2e89 100644 --- a/pandora_agents/unix/pandora_agent.redhat_bin.el8.spec +++ b/pandora_agents/unix/pandora_agent.redhat_bin.el8.spec @@ -5,7 +5,7 @@ %define name pandorafms_agent_linux_bin %define source_name pandorafms_agent_linux %define version 7.0NG.776 -%define release 240325 +%define release 240326 %define debug_package %{nil} Summary: Pandora FMS Linux agent, binary version diff --git a/pandora_agents/unix/pandora_agent.redhat_bin.el9.spec b/pandora_agents/unix/pandora_agent.redhat_bin.el9.spec index 5f7bf6d3e2..1c6192f08e 100644 --- a/pandora_agents/unix/pandora_agent.redhat_bin.el9.spec +++ b/pandora_agents/unix/pandora_agent.redhat_bin.el9.spec @@ -5,7 +5,7 @@ %define name pandorafms_agent_linux_bin %define source_name pandorafms_agent_linux %define version 7.0NG.776 -%define release 240325 +%define release 240326 %define debug_package %{nil} Summary: Pandora FMS Linux agent, binary version diff --git a/pandora_agents/unix/pandora_agent.redhat_bin.spec b/pandora_agents/unix/pandora_agent.redhat_bin.spec index f7b2fcad4e..fcfc96c8e2 100644 --- a/pandora_agents/unix/pandora_agent.redhat_bin.spec +++ b/pandora_agents/unix/pandora_agent.redhat_bin.spec @@ -5,7 +5,7 @@ %define name pandorafms_agent_linux_bin %define source_name pandorafms_agent_linux %define version 7.0NG.776 -%define release 240325 +%define release 240326 Summary: Pandora FMS Linux agent, binary version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 13901819b7..de189c8c44 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -4,7 +4,7 @@ %global __os_install_post %{nil} %define name pandorafms_agent_linux %define version 7.0NG.776 -%define release 240325 +%define release 240326 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 766a5d0aad..02d493eaf1 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.776" -PI_BUILD="240325" +PI_BUILD="240326" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index d0871dc287..84af1757d9 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{240325} +{240326} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 6b9df236f5..ce803f8907 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.776 Build 240325") +#define PANDORA_VERSION ("7.0NG.776 Build 240326") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 26a4b29c79..8712d35874 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Pandora FMS" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.776(Build 240325))" + VALUE "ProductVersion", "(7.0NG.776(Build 240326))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index a61d740369..ee2f075ad5 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.776-240325 +Version: 7.0NG.776-240326 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index ffe4dfa835..0c9e638f55 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.776-240325" +pandora_version="7.0NG.776-240326" package_pear=0 package_pandora=1 diff --git a/pandora_console/extensions/realtime_graphs.php b/pandora_console/extensions/realtime_graphs.php index be9076a57f..77b660fd1c 100644 --- a/pandora_console/extensions/realtime_graphs.php +++ b/pandora_console/extensions/realtime_graphs.php @@ -196,6 +196,15 @@ function pandora_realtime_graphs() [ 'class' => 'action-buttons', 'content' => html_print_submit_button( + __('Filter'), + 'filterbutton', + false, + [ + 'icon' => 'search', + 'mode' => 'mini', + ], + true + ).html_print_submit_button( __('Clear graph'), 'srcbutton', false, diff --git a/pandora_console/extensions/realtime_graphs/realtime_graphs.js b/pandora_console/extensions/realtime_graphs/realtime_graphs.js index 088f31dbf6..1bd0a130a3 100644 --- a/pandora_console/extensions/realtime_graphs/realtime_graphs.js +++ b/pandora_console/extensions/realtime_graphs/realtime_graphs.js @@ -160,10 +160,6 @@ return +(Math.round(num + "e+2") + "e-2"); } - $("#graph").change(function() { - $("form#realgraph").submit(); - }); - $("#refresh").change(function() { refresh = parseInt($("#refresh").val()); resetDataPooling(); diff --git a/pandora_console/extras/mr/69.sql b/pandora_console/extras/mr/69.sql index 8e740a42ec..650445911a 100644 --- a/pandora_console/extras/mr/69.sql +++ b/pandora_console/extras/mr/69.sql @@ -1,5 +1,7 @@ START TRANSACTION; +DROP TABLE tskin; + ALTER TABLE `tusuario` ADD COLUMN `stop_lts_modal` TINYINT NOT NULL DEFAULT 0 AFTER `session_max_time_expire`; diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php index 5375573b2d..aec6b98f4a 100644 --- a/pandora_console/godmode/agentes/configurar_agente.php +++ b/pandora_console/godmode/agentes/configurar_agente.php @@ -1514,6 +1514,7 @@ if ($update_module === true || $create_module === true) { $old_configuration_data = (string) get_parameter('old_configuration_data'); $new_configuration_data = ''; + $custom_string_1_default = ''; $custom_string_2_default = ''; $custom_string_3_default = ''; @@ -1979,6 +1980,19 @@ if ($update_module) { } } + $def_msg = __('There was a problem updating module. Processing error'); + + if (preg_match('/module_type\s+([^\\n]+)/', io_safe_output($configuration_data), $matches)) { + $config_module_type = $matches[1]; + + $type_id = (int) db_get_value('id_tipo', 'ttipo_modulo', 'nombre', $config_module_type); + + if ($type_id !== $id_module_type) { + $def_msg = __('There was a problem updating module: module type cannot be edited'); + $result = ERR_GENERIC; + } + } + if (is_error($result) === true) { switch ($result) { case ERR_EXIST: @@ -1996,7 +2010,7 @@ if ($update_module) { case ERR_DB: case ERR_GENERIC: default: - $msg = __('There was a problem updating module. Processing error'); + $msg = $def_msg; break; } diff --git a/pandora_console/godmode/agentes/modificar_agente.php b/pandora_console/godmode/agentes/modificar_agente.php index b0f071c1b4..2718a52efd 100644 --- a/pandora_console/godmode/agentes/modificar_agente.php +++ b/pandora_console/godmode/agentes/modificar_agente.php @@ -318,7 +318,7 @@ $filterTable->data[0][0] = html_print_label_input_block( $return_all_group, 'ag_group', $ag_group, - 'this.form.submit();', + '', '', 0, true, @@ -337,7 +337,7 @@ $filterTable->data[0][1] = html_print_label_input_block( $recursion, true, false, - 'this.form.submit()' + '' ).'' ); @@ -347,7 +347,7 @@ $filterTable->data[0][2] = html_print_label_input_block( $showAgentFields, 'disabled', $disabled, - 'this.form.submit()', + '', '', 0, true, @@ -365,7 +365,7 @@ $filterTable->data[0][3] = html_print_label_input_block( $fields, 'os', $os, - 'this.form.submit()', + '', 'All', 0, true, diff --git a/pandora_console/godmode/groups/configure_group.php b/pandora_console/godmode/groups/configure_group.php index 3376f42804..1cba97ca1e 100644 --- a/pandora_console/godmode/groups/configure_group.php +++ b/pandora_console/godmode/groups/configure_group.php @@ -58,7 +58,6 @@ if ($id_group > 0) { $alerts_disabled = $group['disabled']; $custom_id = $group['custom_id']; $propagate = $group['propagate']; - $skin = $group['id_skin']; $contact = $group['contact']; $other = $group['other']; $description = $group['description']; @@ -80,7 +79,6 @@ if ($id_group > 0) { $alerts_disabled = 0; $custom_id = ''; $propagate = 0; - $skin = 0; $contact = ''; $other = ''; $description = ''; diff --git a/pandora_console/godmode/groups/group_list.php b/pandora_console/godmode/groups/group_list.php index 6aad60e71d..ef1b66a731 100644 --- a/pandora_console/godmode/groups/group_list.php +++ b/pandora_console/godmode/groups/group_list.php @@ -439,7 +439,6 @@ if ($is_management_allowed === true $group_pass = (string) get_parameter('group_pass'); $alerts_disabled = (bool) get_parameter('alerts_disabled'); $custom_id = (string) get_parameter('custom_id'); - $skin = (string) get_parameter('skin'); $description = (string) get_parameter('description'); $contact = (string) get_parameter('contact'); $other = (string) get_parameter('other'); @@ -462,7 +461,6 @@ if ($is_management_allowed === true 'parent' => $id_parent, 'disabled' => $alerts_disabled, 'custom_id' => $custom_id, - 'id_skin' => $skin, 'description' => $description, 'contact' => $contact, 'propagate' => $propagate, @@ -498,7 +496,6 @@ if ($is_management_allowed === true && $update_group === true) { $alerts_enabled = (bool) get_parameter('alerts_enabled'); $custom_id = (string) get_parameter('custom_id'); $propagate = (bool) get_parameter('propagate'); - $skin = (string) get_parameter('skin'); $description = (string) get_parameter('description'); $contact = (string) get_parameter('contact'); $other = (string) get_parameter('other'); @@ -530,7 +527,6 @@ if ($is_management_allowed === true && $update_group === true) { 'parent' => ($id_parent == -1) ? 0 : $id_parent, 'disabled' => !$alerts_enabled, 'custom_id' => $custom_id, - 'id_skin' => $skin, 'description' => $description, 'contact' => $contact, 'propagate' => $propagate, diff --git a/pandora_console/godmode/menu.php b/pandora_console/godmode/menu.php index 5d4cc29f86..8669b9f257 100644 --- a/pandora_console/godmode/menu.php +++ b/pandora_console/godmode/menu.php @@ -500,8 +500,6 @@ if ($access_console_node === true) { $sub['godmode/setup/license']['text'] = __('License'); $sub['godmode/setup/license']['id'] = 'license'; - enterprise_hook('skins_submenu'); - enterprise_hook('translate_string_submenu'); $menu_godmode['gsetup']['sub'] = $sub; diff --git a/pandora_console/godmode/reporting/map_builder.php b/pandora_console/godmode/reporting/map_builder.php index 6dbb6a1dbf..fe08aaa9fb 100644 --- a/pandora_console/godmode/reporting/map_builder.php +++ b/pandora_console/godmode/reporting/map_builder.php @@ -366,12 +366,12 @@ $filterTable->data[0][] = html_print_label_input_block( $filterTable->data[0][] = html_print_label_input_block( __('Group'), - html_print_select_groups(false, 'AR', $return_all_group, 'ag_group', $ag_group, 'this.form.submit();', '', 0, true, false, true, '', false) + html_print_select_groups(false, 'AR', $return_all_group, 'ag_group', $ag_group, '', '', 0, true, false, true, '', false) ); $filterTable->data[0][] = html_print_label_input_block( __('Group Recursion'), - html_print_checkbox_switch('recursion', 1, $recursion, true, false, 'this.form.submit()') + html_print_checkbox_switch('recursion', 1, $recursion, true, false, '') ); if (is_metaconsole() === false) { diff --git a/pandora_console/godmode/setup/setup_visuals.php b/pandora_console/godmode/setup/setup_visuals.php index 586f361de0..56b81d230e 100755 --- a/pandora_console/godmode/setup/setup_visuals.php +++ b/pandora_console/godmode/setup/setup_visuals.php @@ -148,7 +148,6 @@ $table_behaviour->data[$row][] = html_print_label_input_block( __('Display text when proc modules have state critical'), html_print_input_text('render_proc_fail', $config['render_proc_fail'], '', 25, 25, true) ); -$row++; if (enterprise_installed() === true) { $row++; @@ -162,6 +161,29 @@ if (enterprise_installed() === true) { ); } +$row++; +// Tabs menus. +$tabs_menu_options = []; +$tabs_menu_options['both'] = __('Show both (tabs and menu)'); +$tabs_menu_options['icons'] = __('Show only icons'); +$tabs_menu_options['menu'] = __('Show only menu'); +$table_behaviour->data[$row][] = html_print_label_input_block( + __('Tabs menu'), + html_print_select( + $tabs_menu_options, + 'tabs_menu', + $config['tabs_menu'], + '', + '', + '', + true, + false, + false, + '', + false + ) +); + // ---------------------------------------------------------------------- // ---------------------------------------------------------------------- diff --git a/pandora_console/godmode/users/configure_user.php b/pandora_console/godmode/users/configure_user.php index 633495a4df..7f6bf069ef 100644 --- a/pandora_console/godmode/users/configure_user.php +++ b/pandora_console/godmode/users/configure_user.php @@ -40,8 +40,6 @@ require_once $config['homedir'].'/include/functions_visual_map.php'; require_once $config['homedir'].'/include/functions_custom_fields.php'; enterprise_include_once('include/functions_profile.php'); -$isFunctionSkins = enterprise_include_once('include/functions_skins.php'); - // Add the columns for the enterprise Pandora edition. $enterprise_include = false; if (ENTERPRISE_NOT_HOOK !== enterprise_include('include/functions_policies.php')) { @@ -1306,12 +1304,12 @@ if ($new_user) { if (is_metaconsole() === false) { // User only can change skins if has more than one group. - if (function_exists('skins_print_select')) { - if (count($usr_groups) > 1) { - if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) { - $skin = '

'.__('Skin').'

'; - $skin .= skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true).'
'; - } + if (count($usr_groups) > 1) { + if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) { + $skin = '

'.__('Skin').'

'; + $skins[DEFAULT_THEME] = __('Default theme'); + $skins[BLACK_THEME] = __('Black theme'); + $skin .= html_print_select($skins, 'skin', $user_info['id_skin'], '', __('None'), 0, true).'
'; } } } diff --git a/pandora_console/godmode/users/user_management.php b/pandora_console/godmode/users/user_management.php index cb251ebb18..7b400085a6 100644 --- a/pandora_console/godmode/users/user_management.php +++ b/pandora_console/godmode/users/user_management.php @@ -720,10 +720,10 @@ if (is_metaconsole() === true) { $userManagementTable->data['line2_looknfeel'][1] = $outputMetaAccess[1]; } } else { - if (function_exists('skins_print_select')) { - $userManagementTable->data['line1_looknfeel'][1] = __('User color scheme').$hin_change_theme; - $userManagementTable->data['line2_looknfeel'][1] = skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true); - } + $userManagementTable->data['line1_looknfeel'][1] = __('User color scheme').$hin_change_theme; + $skins[DEFAULT_THEME] = __('Default theme'); + $skins[BLACK_THEME] = __('Black theme'); + $userManagementTable->data['line2_looknfeel'][1] = html_print_select($skins, 'skin', $user_info['id_skin'], '', __('None'), 0, true); } $performance_variables_control = (array) json_decode(io_safe_output($config['performance_variables_control'])); diff --git a/pandora_console/godmode/wizards/DiscoveryTaskList.class.php b/pandora_console/godmode/wizards/DiscoveryTaskList.class.php index 01250a6254..5d352ebeb1 100644 --- a/pandora_console/godmode/wizards/DiscoveryTaskList.class.php +++ b/pandora_console/godmode/wizards/DiscoveryTaskList.class.php @@ -124,6 +124,14 @@ class DiscoveryTaskList extends HTML $this->printHeader(true) ); + // Div neccesary for modal map task. + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + // Show redirected messages from discovery.php. if ($status === 0) { ui_print_success_message($message); @@ -1145,14 +1153,6 @@ class DiscoveryTaskList extends HTML ui_toggle($content, $titleTable, '', '', false); - // Div neccesary for modal map task. - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - unset($table); ui_require_javascript_file('pandora_ui'); diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index 61b3f4d59c..a063ef5c8b 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -166,7 +166,18 @@ if ($delete_event === true) { return; } + $name = events_get_description($id_evento); $r = events_delete($id_evento, $filter, false, true); + db_pandora_audit( + AUDIT_LOG_EVENT, + sprintf( + 'ID event %s deleted by %s - %s', + $id_evento, + $config['id_user'], + $name + ), + $config['id_user'] + ); } catch (\Exception $e) { // Unexistent agent. if (is_metaconsole() === true @@ -224,6 +235,19 @@ if ($validate_event === true) { EVENT_VALIDATE, $filter ); + + $name = events_get_description($id_evento); + + db_pandora_audit( + AUDIT_LOG_EVENT, + sprintf( + 'ID event %s validated by %s - %s', + $id_evento, + $config['id_user'], + $name + ), + $config['id_user'] + ); } catch (\Exception $e) { // Unexistent agent. if (is_metaconsole() === true diff --git a/pandora_console/include/class/AgentsAlerts.class.php b/pandora_console/include/class/AgentsAlerts.class.php index 70c1ff9e3c..54408c3cb8 100644 --- a/pandora_console/include/class/AgentsAlerts.class.php +++ b/pandora_console/include/class/AgentsAlerts.class.php @@ -780,7 +780,7 @@ class AgentsAlerts extends HTML 'nothing' => false, 'selected' => $this->groupId, 'return' => true, - 'script' => 'this.form.submit()', + 'script' => '', 'size' => '100%', ], ]; diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index c6e63f865a..817bcba26b 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -22,7 +22,7 @@ use DI\ContainerBuilder; /* * Pandora build version and version */ -$build_version = 'PC240325'; +$build_version = 'PC240326'; $pandora_version = 'v7.0NG.776'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/include/constants.php b/pandora_console/include/constants.php index c0cccdaca2..49a1aec142 100644 --- a/pandora_console/include/constants.php +++ b/pandora_console/include/constants.php @@ -300,6 +300,10 @@ define('HEADER_LOGO_DEFAULT_COLLAPSED', 'logo-default-pandorafms-collapsed.png') define('HEADER_LOGO_BLACK_CLASSIC', 'logo-black-pandorafms.png'); define('HEADER_LOGO_BLACK_COLLAPSED', 'logo-default-pandorafms-collapsed.png'); +// Pandora Themes. +define('DEFAULT_THEME', 1); +define('BLACK_THEME', 2); + // Status images. // For modules. define('STATUS_MODULE_OK', 'module_ok.png'); diff --git a/pandora_console/include/functions_api.php b/pandora_console/include/functions_api.php index 37568798ed..f9a3cb64ed 100644 --- a/pandora_console/include/functions_api.php +++ b/pandora_console/include/functions_api.php @@ -13489,6 +13489,19 @@ function api_set_validate_event_by_id($id, $trash1=null, $trash2=null, $returnTy 'estado' => 1, ]; + $name = events_get_description($id); + + db_pandora_audit( + AUDIT_LOG_EVENT, + sprintf( + 'ID event %s validated by %s - %s', + $id, + $config['id_user'], + $name + ), + $config['id_user'] + ); + $result = db_process_sql_update('tevento', $values, ['id_evento' => $id]); if ($result === false) { diff --git a/pandora_console/include/functions_config.php b/pandora_console/include/functions_config.php index 2cfa515259..ecfc06c1d1 100644 --- a/pandora_console/include/functions_config.php +++ b/pandora_console/include/functions_config.php @@ -1443,6 +1443,10 @@ function config_update_config() ); } + if (config_update_value('tabs_menu', get_parameter('tabs_menu', 'both'), true) === false) { + $error_update[] = __('Tabs menu'); + } + // -------------------------------------------------- // CUSTOM VALUES POST PROCESS // -------------------------------------------------- @@ -3944,6 +3948,10 @@ function config_process_config() config_update_value('control_session_timeout', 'check_activity'); } + if (isset($config['tabs_menu']) === false) { + config_update_value('tabs_menu', 'both'); + } + // Finally, check if any value was overwritten in a form. config_update_config(); } diff --git a/pandora_console/include/functions_menu.php b/pandora_console/include/functions_menu.php index 93c5d8fe4e..361f2a5e33 100644 --- a/pandora_console/include/functions_menu.php +++ b/pandora_console/include/functions_menu.php @@ -64,8 +64,6 @@ function menu_print_menu(&$menu) $sec2 = 'godmode/alerts/alert_actions'; } else if ($sec2 === 'godmode/alerts/configure_alert_command') { $sec2 = 'godmode/alerts/alert_commands'; - } else if ($sec2 === 'enterprise/godmode/setup/edit_skin') { - $sec2 = 'enterprise/godmode/setup/setup_skins'; } else if ($sec2 === 'operation/agentes/networkmap.dinamic') { $sec2 = 'operation/agentes/pandora_networkmap'; } else if ($sec2 === 'godmode/gis_maps/configure_gis_map') { diff --git a/pandora_console/include/functions_themes.php b/pandora_console/include/functions_themes.php index 5191b3675b..80b4245e16 100644 --- a/pandora_console/include/functions_themes.php +++ b/pandora_console/include/functions_themes.php @@ -47,6 +47,10 @@ function themes_get_css($path=false) continue; } + if ($file === 'pandoraitsm.css') { + continue; + } + // Skip '..' and '.' entries and files not ended in '.css'. if ($path && ($file == '.' || $file == '..' || strtolower(substr($file, (strlen($file) - 4))) !== '.css')) { continue; diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php index 2ab5c1be83..4a1a181e80 100755 --- a/pandora_console/include/functions_ui.php +++ b/pandora_console/include/functions_ui.php @@ -5419,6 +5419,18 @@ function ui_print_page_header( if (is_array($options)) { $buffer .= ''; + + if (is_metaconsole() === false) { + $buffer .= ' + + '; + } } else { if ($options != '') { $buffer .= '