Merge branch 'develop' into ent-13061-limitar-el-aviso-de-lts-versions-del-warp-offline

This commit is contained in:
Jonathan 2024-03-26 08:20:48 +01:00
commit e4d26875ed
60 changed files with 1090 additions and 117 deletions

View File

@ -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
<?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
cat > /etc/httpd/conf.d/pandora.conf << EO_CONFIG_F
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
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
<meta HTTP-EQUIV="REFRESH" content="0; url=/pandora_console/">
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 <<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
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
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 <<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
# Enable pandora ha service
systemctl enable pandora_server --now &>> "$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"}'

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix
Version: 7.0NG.776-240325
Version: 7.0NG.776-240326
Architecture: all
Priority: optional
Section: admin

View File

@ -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

View File

@ -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;

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -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}

View File

@ -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}

View File

@ -10,7 +10,7 @@
# **********************************************************************
PI_VERSION="7.0NG.776"
PI_BUILD="240325"
PI_BUILD="240326"
OS_NAME=`uname -s`
FORCE=0

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
{240325}
{240326}
ViewReadme
{Yes}

View File

@ -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;

View File

@ -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

View File

@ -1,5 +1,5 @@
package: pandorafms-console
Version: 7.0NG.776-240325
Version: 7.0NG.776-240326
Architecture: all
Priority: optional
Section: admin

View File

@ -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

View File

@ -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,

View File

@ -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();

View File

@ -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`;

View File

@ -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;
}

View File

@ -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()'
''
).'</div>'
);
@ -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,

View File

@ -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 = '';

View File

@ -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,

View File

@ -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;

View File

@ -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) {

View File

@ -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
)
);
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------

View File

@ -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 = '<div class="label_select"><p class="edit_user_labels">'.__('Skin').'</p>';
$skin .= skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true).'</div>';
}
if (count($usr_groups) > 1) {
if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) {
$skin = '<div class="label_select"><p class="edit_user_labels">'.__('Skin').'</p>';
$skins[DEFAULT_THEME] = __('Default theme');
$skins[BLACK_THEME] = __('Black theme');
$skin .= html_print_select($skins, 'skin', $user_info['id_skin'], '', __('None'), 0, true).'</div>';
}
}
}

View File

@ -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']));

View File

@ -124,6 +124,14 @@ class DiscoveryTaskList extends HTML
$this->printHeader(true)
);
// Div neccesary for modal map task.
echo '<div id="map_task" class="invisible"></div>';
echo '<div id="task_review" class="invisible"></div>';
echo '<div id="msg" class="invisible"></div>';
echo '<input type="hidden" id="ajax-url" value="'.ui_get_full_url('ajax.php').'"/>';
echo '<input type="hidden" id="success-str" value="'.__('Success').'"/>';
echo '<input type="hidden" id="failed-str" value="'.__('Failed').'"/>';
// 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 '<div id="map_task" class="invisible"></div>';
echo '<div id="task_review" class="invisible"></div>';
echo '<div id="msg" class="invisible"></div>';
echo '<input type="hidden" id="ajax-url" value="'.ui_get_full_url('ajax.php').'"/>';
echo '<input type="hidden" id="success-str" value="'.__('Success').'"/>';
echo '<input type="hidden" id="failed-str" value="'.__('Failed').'"/>';
unset($table);
ui_require_javascript_file('pandora_ui');

View File

@ -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

View File

@ -780,7 +780,7 @@ class AgentsAlerts extends HTML
'nothing' => false,
'selected' => $this->groupId,
'return' => true,
'script' => 'this.form.submit()',
'script' => '',
'size' => '100%',
],
];

View File

@ -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.

View File

@ -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');

View File

@ -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) {

View File

@ -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();
}

View File

@ -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') {

View File

@ -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;

View File

@ -5419,6 +5419,18 @@ function ui_print_page_header(
if (is_array($options)) {
$buffer .= '<div id="menu_tab"><ul class="mn">';
$menu_dots_class = 'menu-dots-hide';
if (isset($dots) === true && $dots !== '' && $config['tabs_menu'] !== 'icons') {
$menu_dots_class = 'menu-dots-show';
}
if (isset($dots) === true && $dots !== '') {
$buffer .= '<li class="nomn menu-dots-li '.$menu_dots_class.'">';
$buffer .= '<div id="menu_dots">'.$dots.'</div>';
$buffer .= '</li>';
}
foreach ($options as $key => $option) {
if (empty($option)) {
continue;
@ -5428,6 +5440,13 @@ function ui_print_page_header(
// $buffer .= '</li>';
} else {
if (is_array($option)) {
if ($config['tabs_menu'] === 'menu' && (isset($dots) === true && $dots !== '')) {
$tabs_class = 'tabs-hide';
if (isset($option['active']) === true && (bool) $option['active'] === true) {
$tabs_class = 'tabs-show';
}
}
$class = 'nomn';
if (isset($option['active'])) {
if ($option['active']) {
@ -5444,7 +5463,7 @@ function ui_print_page_header(
$class .= ($godmode) ? ' tab_godmode' : ' tab_operation';
}
$buffer .= '<li class="'.$class.' ">';
$buffer .= '<li class="'.$class.' '.$tabs_class.'">';
$buffer .= $option['text'];
if (isset($option['sub_menu'])) {
$buffer .= $option['sub_menu'];
@ -5460,11 +5479,19 @@ function ui_print_page_header(
}
$buffer .= '</ul>';
if (isset($dots) === true) {
$buffer .= '<div id="menu_dots">'.$dots.'</div>';
}
$buffer .= '</div>';
if (is_metaconsole() === false) {
$buffer .= '
<script>
menuTabsShowHide();
$(window).on("resize", function() {
menuTabsShowHide();
});
</script>
';
}
} else {
if ($options != '') {
$buffer .= '<div id="menu_tab"><ul class="mn"><li>';

View File

@ -2705,3 +2705,34 @@ function show_email_test(id) {
}
});
}
function menuTabsShowHide() {
const dotsLi = $(".menu-dots-li");
if (dotsLi.length) {
const tabsLi = $("#menu_tab .nomn:not(.menu-dots-li)");
const menuTabWidth = $("#menu_tab_frame_view").width();
const menuTabLeftWidth = $(".menu_tab_left_bc").width();
const menuTabsRightCount = $("#menu_tab > ul.mn > li").length * 46;
const margins = 50;
const menuTabFree = menuTabWidth - (menuTabLeftWidth + margins);
if (menuTabFree >= menuTabsRightCount) {
// Big.
if ($(dotsLi).hasClass("menu-dots-show") === true) {
if ($(tabsLi).hasClass("tabs-hide") === false) {
$(tabsLi).show();
}
} else {
$(dotsLi).hide();
if ($(tabsLi).hasClass("tabs-hide") === false) {
$(tabsLi).show();
}
}
} else {
// Small.
$(dotsLi).show();
$(tabsLi).hide();
}
}
}

View File

@ -2416,10 +2416,10 @@ class Item extends CachedModel
foreach ($fields as $k => $v) {
if (isset($v['id']) === true && isset($v['name']) === true) {
// Modern environments use id-name format.
$rs[$v['id']] = $v;
$rs[$v['id']] = io_safe_output($v);
} else {
// In MC environments is key-value.
$rs[$k] = $v;
$rs[$k] = io_safe_output($v);
}
}

View File

@ -1998,6 +1998,7 @@ div.title_line {
justify-content: space-between;
overflow: hidden;
margin-left: 20px;
min-width: fit-content;
}
.breadcrumbs_container {
@ -2037,6 +2038,11 @@ div.title_line {
margin: 0px 0px 0px 0px;
}
#menu_tab > ul.mn {
display: inline-flex;
flex-direction: row-reverse;
}
#menu_tab .mn li {
float: right;
position: relative;
@ -4052,7 +4058,7 @@ div.div_groups_status {
min-height: 53px;
}
#menu_tab li:hover {
#menu_tab li:hover:not(.menu-dots-li) {
box-shadow: inset 0px 4px var(--primary-color);
}
@ -13744,6 +13750,12 @@ button.disabled {
}
/* Dot tab */
#menu_tab li.nomn.menu-dots-li:hover a {
color: var(--text-color);
padding: 5px 15px;
text-align: left;
}
#menu_dots {
margin-left: 10px;
}
@ -13780,6 +13792,7 @@ button.disabled {
top: 20px;
right: -20px;
padding: 0px 10px 10px 10px;
text-align: left;
}
.dot-tab-menu {
@ -13790,7 +13803,10 @@ button.disabled {
min-height: 20px;
box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.13);
padding: 10px 0px;
z-index: 1;
position: relative;
display: none;
text-align: left;
}
.dot-tab:hover .dot-tab-menu {
@ -13803,6 +13819,7 @@ button.disabled {
padding: 5px 15px;
display: block;
white-space: nowrap;
text-align: left;
}
.dot-tab-menu a:hover {
@ -13811,6 +13828,11 @@ button.disabled {
text-decoration: none;
}
.dot-tab-menu .dot-tab-link {
max-height: calc(100vh - (60px + 49px + 65px + 15px));
overflow-y: auto;
}
.dot-tab-menu .dot-tab-link > a {
font-weight: 900;
color: black;
@ -13821,3 +13843,19 @@ button.disabled {
margin-top: 10px;
padding-top: 15px;
}
.menu-dots-hide {
display: none;
}
.menu-dots-show {
display: list-item;
}
.tabs-hide {
display: none;
}
.tabs-show {
display: list-item;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -131,7 +131,7 @@
<div style='padding-bottom: 50px'>
<?php
$version = '7.0NG.776';
$build = '240325';
$build = '240326';
$banner = "v$version Build $build";
error_reporting(0);

View File

@ -333,7 +333,7 @@ $table->data['group'][0] = html_print_label_input_block(
true,
'group_id',
$group_id,
'this.form.submit()',
'',
'',
'',
true,
@ -361,7 +361,7 @@ $table->data['group'][1] = html_print_label_input_block(
$fields,
'status',
$status,
'this.form.submit()',
'',
__('All'),
AGENT_STATUS_ALL,
true,
@ -436,7 +436,7 @@ $table->data[2][1] = html_print_label_input_block(
$fields,
'policies',
$policies,
'this.form.submit()',
'',
__('All'),
0,
true,

View File

@ -516,11 +516,11 @@ $skin = '';
$home_screen .= html_print_input_text('data_section', $user_info['data_section'], '', 60, 255, true, false);
// User only can change skins if has more than one group.
if (function_exists('skins_print_select')) {
if (count($usr_groups) > 1) {
$skin = '<div class="label_select"><p class="edit_user_labels">'.__('Theme').': </p>';
$skin .= skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true).'</div>';
}
if (count($usr_groups) > 1) {
$skin = '<div class="label_select"><p class="edit_user_labels">'.__('Theme').': </p>';
$skins[DEFAULT_THEME] = __('Default theme');
$skins[BLACK_THEME] = __('Black theme');
$skin .= html_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true).'</div>';
}

View File

@ -6,7 +6,7 @@
%define debug_package %{nil}
%define name pandorafms_console
%define version 7.0NG.776
%define release 240325
%define release 240326
# User and Group under which Apache is running
%define httpd_name httpd

View File

@ -6,7 +6,7 @@
%define debug_package %{nil}
%define name pandorafms_console
%define version 7.0NG.776
%define release 240325
%define release 240326
# User and Group under which Apache is running
%define httpd_name httpd

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.776
%define release 240325
%define release 240326
%define httpd_name httpd
# User and Group under which Apache is running
%define httpd_name apache2

View File

@ -2992,18 +2992,6 @@ CREATE TABLE IF NOT EXISTS `tsesion_extended` (
KEY idx_session (id_sesion)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
-- -----------------------------------------------------
-- Table `tskin`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tskin` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` TEXT ,
`relative_path` TEXT ,
`description` TEXT ,
`disabled` TINYINT NOT NULL DEFAULT 0,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
-- ---------------------------------------------------------------------
-- Table `tpolicy_queue`
-- ---------------------------------------------------------------------

View File

@ -1221,12 +1221,6 @@ INSERT INTO `tevent_response` VALUES (1,'Ping&#x20;to&#x20;host','Ping&#x20;to&#
INSERT INTO `tupdate_settings` VALUES ('current_update', '412'), ('customer_key', 'PANDORA-FREE'), ('updating_binary_path', 'Path where the updated binary files will be stored'), ('updating_code_path', 'Path where the updated code is stored'), ('dbname', ''), ('dbhost', ''), ('dbpass', ''), ('dbuser', ''), ('dbport', ''), ('proxy', ''), ('proxy_port', ''), ('proxy_user', ''), ('proxy_pass', '');
--
-- Dumping data for table `tskin`
--
INSERT INTO `tskin` VALUES (1,'Default&#x20;theme', 'pandora.css', 'Default&#x20;skin&#x20;for&#x20;Pandora&#x20;FMS&#x20;web&#x20;console', 0);
INSERT INTO `tskin` VALUES (2,'Black&#x20;theme', 'pandora_black.css', 'Black&#x20;theme', 0);
--
-- Dumping data for table `tcollection`
--

View File

@ -1,5 +1,5 @@
package: pandorafms-server
Version: 7.0NG.776-240325
Version: 7.0NG.776-240326
Architecture: all
Priority: optional
Section: admin

View File

@ -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_cpan=0
package_pandora=1

View File

@ -46,7 +46,7 @@ our @EXPORT = qw(
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.776";
my $pandora_build = "240325";
my $pandora_build = "240326";
our $VERSION = $pandora_version." ".$pandora_build;
# Setup hash

View File

@ -34,7 +34,7 @@ our @ISA = qw(Exporter);
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.776";
my $pandora_build = "240325";
my $pandora_build = "240326";
our $VERSION = $pandora_version." ".$pandora_build;
our %EXPORT_TAGS = ( 'all' => [ qw() ] );

View File

@ -7,7 +7,7 @@
%define debug_package %{nil}
%define name pandorafms_server
%define version 7.0NG.776
%define release 240325
%define release 240326
Summary: Pandora FMS Server
Name: %{name}

View File

@ -4,7 +4,7 @@
%global __os_install_post %{nil}
%define name pandorafms_server
%define version 7.0NG.776
%define release 240325
%define release 240326
Summary: Pandora FMS Server
Name: %{name}

View File

@ -9,7 +9,7 @@
# **********************************************************************
PI_VERSION="7.0NG.776"
PI_BUILD="240325"
PI_BUILD="240326"
MODE=$1
if [ $# -gt 1 ]; then

View File

@ -38,7 +38,7 @@ use PandoraFMS::Config;
use PandoraFMS::DB;
# version: define current version
my $version = "7.0NG.776 Build 240325";
my $version = "7.0NG.776 Build 240326";
# Pandora server configuration
my %conf;

View File

@ -36,7 +36,7 @@ use Encode::Locale;
Encode::Locale::decode_argv;
# version: define current version
my $version = "7.0NG.776 Build 240325";
my $version = "7.0NG.776 Build 240326";
# save program name for logging
my $progname = basename($0);
@ -1228,11 +1228,11 @@ sub param_error ($$) {
}
###############################################################################
# Print a 'not exists' error and exit the program.
# Print a 'does not exist' error and exit the program.
###############################################################################
sub notexists_error ($$) {
print (STDERR "[ERROR] Error: The $_[0] '$_[1]' not exists.\n\n");
logger( $conf, "($progname) [ERROR] Error: The $_[0] '$_[1]' not exists.", 10);
print (STDERR "[ERROR] Error: The $_[0] '$_[1]' does not exist.\n\n");
logger( $conf, "($progname) [ERROR] Error: The $_[0] '$_[1]' does not exist.", 10);
exit 1;
}
@ -3459,6 +3459,10 @@ sub cli_agent_update() {
$new_value = $id_parent;
}
elsif($field eq 'agent_name') {
if (!$new_value) {
print_log "[ERROR] Agent name cannot be empty\n\n";
exit;
}
my $agent_exists = get_agent_id($dbh,$new_value);
non_exist_check($agent_exists,'agent',$new_value);
$field = 'nombre';
@ -4104,7 +4108,7 @@ sub cli_exec_from_file() {
elsif($c == 3) {
$file = $opt;
if(!(-e $file)) {
print_log "[ERROR] File '$file' not exists or cannot be opened\n\n";
print_log "[ERROR] File '$file' does not exist or cannot be opened\n\n";
exit;
}
}
@ -4952,7 +4956,7 @@ sub cli_validate_alert() {
if (defined $use_alias and $use_alias eq 'use_alias') {
my @id_agents = get_agent_ids_from_alias($dbh,$agent_id);
if(!@id_agents) {
print (STDERR "[ERROR] Error: The agent '$agent_id' not exists.\n\n");
print (STDERR "[ERROR] Error: The agent '$agent_id' does not exist.\n\n");
}
foreach my $id (@id_agents) {
@ -5946,7 +5950,7 @@ sub cli_get_bad_conf_files() {
$missings++;
}
elsif ($result == -1) {
print_log "[WARN] File not exists /conf/".$file."\n\n";
print_log "[WARN] File does not exist /conf/".$file."\n\n";
$bad_files++;
last;
}

View File

@ -798,6 +798,33 @@ abstract class VisualConsoleItem<Props extends ItemProps> {
return prevProps !== newProps;
}
/**
* Compare object.
* @param previousObject Object 1.
* @param currentObject Object 2.
* @return Returns true if these are equal.
*/
public compareObjects(
previousObject: Record<string, any>,
currentObject: Record<string, any>
): boolean {
for (let key in previousObject) {
if (key === "ratio") {
continue;
}
if (currentObject.hasOwnProperty(key)) {
if (previousObject[key] !== currentObject[key]) {
return true;
}
} else {
return true;
}
}
return false;
}
/**
* To recreate or update the HTMLElement which represents the item into the DOM.
* @param prevProps If exists it will be used to only perform DOM updates instead of a full replace.
@ -816,13 +843,11 @@ abstract class VisualConsoleItem<Props extends ItemProps> {
this.elementRef.style.minHeight = "max-content";
}
if (
prevProps.type == ItemType.LINE_ITEM ||
prevProps.type == ItemType.NETWORK_LINK
) {
if (this.compareObjects(prevProps, this.props) === true) {
this.updateDomElement(this.childElementRef);
}
}
// Move box.
if (!prevProps || this.positionChanged(prevProps, this.props)) {
this.moveElement(this.props.x, this.props.y);