2009-11-05 Sancho Lerena <slerena@gmail.com>

* pandora_agent_installer: Added a common installer for all systems.

        * Deleted daemon script for all systems, creaded a general one.

        * Modified HPUX to HP-UX directory.

        * Updated some .conf



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2087 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
slerena 2009-11-05 18:26:54 +00:00
parent 6fe68b05c5
commit ff91183cf1
12 changed files with 900 additions and 414 deletions

View File

@ -0,0 +1,11 @@
2009-11-05 Sancho Lerena <slerena@gmail.com>
* pandora_agent_installer: Added a common installer for all systems.
* Deleted daemon script for all systems, creaded a general one.
* Modified HPUX to HP-UX directory.
* Updated some .conf

View File

@ -88,26 +88,46 @@ transfer_mode tentacle
# ================= # =================
# System information # System information
# All this commands has been tested on a Standard HP-UX B.11.31
module_begin module_begin
module_name disk_root_free module_name disk_root_free
module_type generic_data module_type generic_data
module_exec df -k / | tail -1 | tr -d "%" | awk '{ print 100-$5 }' module_exec df -k / | tail -1 | tr -d "%" | awk '{ print 100-$1 }'
module_max 100 module_max 100
module_min 0 module_min 0
module_description Free disk Percentage of root partition module_description Free disk Percentage of root partition
module_end module_end
module_begin
module_name disk_var_free
module_type generic_data
module_exec df -k /var | tail -1 | tr -d "%" | awk '{ print 100-$1 }'
module_max 100
module_min 0
module_description Free disk Percentage of /var partition
module_end
module_begin
module_name disk_usr_free
module_type generic_data
module_exec df -k /usr | tail -1 | tr -d "%" | awk '{ print 100-$1 }'
module_max 100
module_min 0
module_description Free disk Percentage of /usr partition
module_end
module_begin module_begin
module_name proctotal module_name proctotal
module_type generic_data module_type generic_data
module_exec ps -Alf | wc -l | awk '{ print $1 }' module_exec ps -ex | wc -l | awk '{ print $1 }'
module_end module_end
module_begin module_begin
module_name sshDaemon module_name sshDaemon
module_type generic_proc module_type generic_proc
module_exec ps -Af | grep sshd | grep -v "grep" | wc -l | awk '{ print $1 }' module_exec ps -ex | grep sshd | grep -v "grep" | wc -l | awk '{ print $1 }'
module_end module_end
# Async data example # Async data example
@ -121,46 +141,32 @@ module_end
module_begin module_begin
module_name Swap_Free module_name Swap_Free
module_type generic_data module_type generic_data
module_exec vmstat 1 2 | tail -1 | awk '{ print $4 }' module_exec swapinfo | grep memory | tr -d "%" | awk '{ print 100-$5 }'
module_description Unused swap memory module_description Unused swap memory
module_end module_end
module_begin module_begin
module_name RAM_Free module_name RAM_Free
module_type generic_data module_type generic_data
module_exec vmstat 1 2 | tail -1 | awk '{ print $5 }' module_exec dmesg | awk '/Physical:/ && /Kbytes/ {print $8}'
module_description Unused RAM memory module_description Unused RAM memory
module_end module_end
module_begin module_begin
module_name CPU_User module_name CPU_User
module_type generic_data module_type generic_data
module_exec vmstat 1 2 | tail -1 | awk '{ print $20 }' module_exec vmstat 1 2 | tail -1 | awk '{ print $16 }'
module_description % of USER CPU module_description % of USER CPU
module_end module_end
module_begin module_begin
module_name CPU_System module_name CPU_System
module_type generic_data module_type generic_data
module_exec vmstat 1 2 | tail -1 | awk '{ print $21 }' module_exec vmstat 1 2 | tail -1 | awk '{ print $17 }'
module_description % of system CPU module_description % of system CPU
module_end module_end
module_begin module_plugin grep_log /var/adm/syslog/syslog.log Syslog .
module_name Disk_Seek_Operations
module_type generic_data
module_exec vmstat 1 2 | tail -1 | awk '{ print $14 }'
module_description Disk Seek operations
module_end
module_begin
module_name Pandora_Agent_RAM
module_ẗype generic_data
module_exec ps -Afly | grep perl | grep -v grep | awk '{ print $9 }'
module_description Return size in KB of memory used by process Pandora
module_end
module_plugin grep_log /var/adm/syslog Syslog .

View File

@ -1,76 +0,0 @@
#!/bin/sh
# Pandora FMS HP-UX Agent, startup script
# Copyright (c) 2006-2009 Artica ST, <info@artica.es>
# HP-UX Version (generic)
# v3.0.1 Build 091104
# http://www.pandorafms.com
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
PANDORA_PATH=/etc/pandora
DAEMON=/usr/bin/pandora_agent
LOGFILE=/var/log/pandora_agent.log
# This function replace pidof, not working in the same way in different UNIX
function pidof_pandora {
PANDORA_PID=`ps -Af | grep $DAEMON | grep -v grep | head -1 | awk '{ print $2 }'`
echo $PANDORA_PID
}
if [ ! -f $DAEMON ]
then
echo "Pandora FMS Agent not found at $DAEMON, please check setup"
exit
fi
case "$1" in
start)
PANDORA_PID=`pidof_pandora`
if [ ! -z "$PANDORA_PID" ]
then
echo "Pandora FMS Agent is currently running on this machine with PID $PANDORA_PID"
echo "Cannot launch again. Aborting."
exit 1
fi
nohup $DAEMON $PANDORA_PATH 2> $LOGFILE &
sleep 1
PANDORA_PID=`pidof_pandora`
echo "Pandora FMS Agent is now running with PID $PANDORA_PID"
;;
stop)
PANDORA_PID=`pidof_pandora`
if [ -z "$PANDORA_PID" ]
then
echo "Pandora FMS Agent is not running, cannot stop it. Aborting now..."
exit 1
else
echo "Stopping Pandora Agent."
kill $PANDORA_PID > /dev/null 2>&1
fi
;;
status)
PANDORA_PID=`pidof_pandora`
if [ -z "$PANDORA_PID" ]
then
echo "Pandora FMS Agent is not running."
else
echo "Pandora FMS Agent is running with PID $PANDORA_PID."
fi
exit 0
;;
force-reload|restart)
$0 stop
sleep 2
$0 start
;;
*)
echo "Usage: /etc/init.d/pandora_agent_daemon {start|stop|restart|status|force-reload}"
exit 1
esac

View File

@ -1,86 +0,0 @@
#!/bin/bash
# Pandora FMS Linux Agent, startup script
# Copyright (c) 2006-2009 Artica ST, <info@artica.es>
# Linux Version (generic), for SuSe and Debian/Ubuntu.
# other Linux distros could not work properly without modifications
# v3.0.1 Build 091104
# http://www.pandorafms.com
### BEGIN INIT INFO
# Provides: pandora_agent
# Required-Start: $network
# Required-Stop: $network
# Default-Start: S 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Startup script daemon for Pandora FMS agent
### END INIT INFO
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
PANDORA_PATH=/etc/pandora
DAEMON=/usr/bin/pandora_agent
LOGFILE=/var/log/pandora_agent.log
# This function replace pidof, not working in the same way in different Linux distros
function pidof_pandora () (
COLUMNS=250
PANDORA_PID=`ps aux | grep $DAEMON | grep -v grep | head -1 | awk '{ print $2 }'`
echo $PANDORA_PID
)
if [ ! -f $DAEMON ]
then
echo "Pandora FMS Agent not found at $DAEMON, please check setup"
exit
fi
case "$1" in
start)
PANDORA_PID=`pidof_pandora`
if [ ! -z "$PANDORA_PID" ]
then
echo "Pandora FMS Agent is currently running on this machine with PID $PANDORA_PID"
echo "Cannot launch again. Aborting."
exit 1
fi
nohup $DAEMON $PANDORA_PATH 2> $LOGFILE &
sleep 1
PANDORA_PID=`pidof_pandora`
echo "Pandora FMS Agent is now running with PID $PANDORA_PID"
;;
stop)
PANDORA_PID=`pidof_pandora`
if [ -z "$PANDORA_PID" ]
then
echo "Pandora FMS Agent is not running, cannot stop it. Aborting now..."
exit 1
else
echo "Stopping Pandora Agent."
kill $PANDORA_PID > /dev/null 2>&1
fi
;;
status)
PANDORA_PID=`pidof_pandora`
if [ -z "$PANDORA_PID" ]
then
echo "Pandora FMS Agent is not running."
else
echo "Pandora FMS Agent is running with PID $PANDORA_PID."
fi
exit 0
;;
force-reload|restart)
$0 stop
sleep 2
$0 start
;;
*)
echo "Usage: /etc/init.d/pandora_agent_daemon {start|stop|restart|status|force-reload}"
exit 1
esac

View File

@ -1,75 +0,0 @@
#!/bin/sh
# Pandora FMS SunOS Agent, startup script
# Copyright (c) 2006-2009 Artica ST, <info@artica.es>
# SunOS Version (generic)
# v3.0.1 Build 091104
# http://www.pandorafms.com
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
PANDORA_PATH=/etc/pandora
DAEMON=/usr/bin/pandora_agent
LOGFILE=/var/log/pandora_agent.log
# This function replace pidof, not working in the same way in different UNIX
function pidof_pandora {
PANDORA_PID=`ps -Af | grep $DAEMON | grep -v grep | head -1 | awk '{ print $2 }'`
echo $PANDORA_PID
}
if [ ! -f $DAEMON ]
then
echo "Pandora FMS Agent not found at $DAEMON, please check setup"
exit
fi
case "$1" in
start)
PANDORA_PID=`pidof_pandora`
if [ ! -z "$PANDORA_PID" ]
then
echo "Pandora FMS Agent is currently running on this machine with PID $PANDORA_PID"
echo "Cannot launch again. Aborting."
exit 1
fi
nohup $DAEMON $PANDORA_PATH 2> $LOGFILE &
sleep 1
PANDORA_PID=`pidof_pandora`
echo "Pandora FMS Agent is now running with PID $PANDORA_PID"
;;
stop)
PANDORA_PID=`pidof_pandora`
if [ -z "$PANDORA_PID" ]
then
echo "Pandora FMS Agent is not running, cannot stop it. Aborting now..."
exit 1
else
echo "Stopping Pandora Agent."
kill $PANDORA_PID > /dev/null 2>&1
fi
;;
status)
PANDORA_PID=`pidof_pandora`
if [ -z "$PANDORA_PID" ]
then
echo "Pandora FMS Agent is not running."
else
echo "Pandora FMS Agent is running with PID $PANDORA_PID."
fi
exit 0
;;
force-reload|restart)
$0 stop
sleep 2
$0 start
;;
*)
echo "Usage: /etc/init.d/pandora_agent_daemon {start|stop|restart|status|force-reload}"
exit 1
esac

View File

@ -15,7 +15,7 @@ use File::Basename;
use File::Copy; use File::Copy;
use constant AGENT_VERSION => '3.0'; use constant AGENT_VERSION => '3.0';
use constant AGENT_BUILD => '090831'; use constant AGENT_BUILD => '091103';
# OS and OS version # OS and OS version
my $OS = $^O; my $OS = $^O;

View File

@ -1,21 +1,32 @@
#!/bin/sh #!/bin/sh
# Pandora FMS AIX Agent, startup script # **********************************************************************
# Copyright (c) 2006-2009 Artica ST, <info@artica.es> # Pandora FMS Agent Daemon launcher for Unix (AIX, HP-UX, SunOS, Linux)
# AIX 5.x Version (generic), # (c) 2008-2009 Artica ST
# v3.0.1 Build 091104 # (c) 2008-2009 Sancho Lerena <slerena@gmail.com>
# http://www.pandorafms.com #
# Please see http://www.pandorafms.org
# v3.0 Build 091103
# This code is licensed under GPL 2.0 license.
# **********************************************************************
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
PANDORA_PATH=/etc/pandora PANDORA_PATH=/etc/pandora
DAEMON=/usr/bin/pandora_agent DAEMON=/usr/bin/pandora_agent
LOGFILE=/var/log/pandora_agent.log LOGFILE=/var/log/pandora_agent.log
# This function replace pidof, not working in the same way in different UNIX # This function replace pidof, not working in the same way in different linux distros
pidof_pandora () {
COLUMNS=300
OS_NAME=`uname -s`
if [ $OS_NAME = "HP-UX" ]
then
PANDORA_PID=`ps -ex | grep "$DAEMON $PANDORA_PATH" | grep -v grep | head -1 | awk '{ print $1 }'`
else
PANDORA_PID=`ps -Af | grep "$DAEMON $PANDORA_PATH" | grep -v grep | head -1 | awk '{ print $2 }'`
fi
function pidof_pandora {
PANDORA_PID=`ps -Alf | grep $DAEMON | grep -v grep | head -1 | awk '{ print $4 }'`
echo $PANDORA_PID echo $PANDORA_PID
} }
@ -35,7 +46,8 @@ case "$1" in
exit 1 exit 1
fi fi
nohup $DAEMON $PANDORA_PATH 2> $LOGFILE & nohup $DAEMON $PANDORA_PATH 2> $LOGFILE &
sleep 1 rm nohup.out 2> /dev/null
sleep 2
PANDORA_PID=`pidof_pandora` PANDORA_PID=`pidof_pandora`
echo "Pandora FMS Agent is now running with PID $PANDORA_PID" echo "Pandora FMS Agent is now running with PID $PANDORA_PID"
;; ;;
@ -70,7 +82,7 @@ case "$1" in
;; ;;
*) *)
echo "Usage: /etc/rc.pandora_agent_daemon {start|stop|restart|status|force-reload}" echo "Uso: /etc/init.d/pandora_agent_daemon {start|stop|restart|status}"
exit 1 exit 1
esac esac

View File

@ -1,45 +1,108 @@
#!/bin/bash #!/bin/sh
# Pandora FMS Agent Installer (c) 2008-2009 Artica ST # **********************************************************************
# Linux Version (generic), for SuSe and Debian/Ubuntu only # Pandora FMS Agent Installer for Unix (generic installer)
# other Linux distros could not work properly without modifications # (c) 2008-2009 Artica ST
# (c) 2008-2009 Sancho Lerena <slerena@gmail.com>
#
# This is a generic installer for all Unix-like systems.(AIX, HP-UX, SunOS, Linux)
# Please see http://www.pandorafms.org # Please see http://www.pandorafms.org
# v3.0 Build 090810 # v3.0 Build 091103
# This code is licensed under GPL 2.0 license. # This code is licensed under GPL 2.0 license.
# ********************************************************************** # **********************************************************************
PI_VERSION=3.0 PI_VERSION=3.0.0
PANDORA_BIN=/usr/bin/pandora_agent PI_BUILD=091105
OS_NAME=`uname -s`
PANDORA_HOME=/usr/share/pandora_agent PANDORA_HOME=/usr/share/pandora_agent
PANDORA_BIN=/usr/bin/pandora_agent
PANDORA_TEMP=/var/spool/pandora PANDORA_TEMP=/var/spool/pandora
PANDORA_CFG=/etc/pandora PANDORA_CFG=/etc/pandora
PANDORA_LOG=/var/log/pandora/pandora_agent.log PANDORA_LOG_DIR=/var/log/pandora
PANDORA_STARTUP=/etc/init.d/pandora_agent_daemon PANDORA_LOG=pandora_agent.log
TENTACLE=/usr/bin/tentacle_client TENTACLE=/usr/bin/tentacle_client
PANDORA_CFG_FILE=/etc/pandora/pandora_agent.conf
FORCE=0 FORCE=0
USE_LINKS=0
LOG_TIMESTAMP=`date +"%Y/%m/%d %H:%M:%S"` LOG_TIMESTAMP=`date +"%Y/%m/%d %H:%M:%S"`
MODE=$1 MODE=$1
if [ ! -z "$2" ]
then
PANDORA_HOME=$2
fi
# Check for Perl 5.8.x available
PERL_VERSION=`perl -v | egrep 'v5.8|v5.9|v5.1[0-9]' | grep perl`
if [ -z "$PERL_VERSION" ]
then
echo "Perl 5.8.x is not detected. This is required for Pandora FMS"
echo "Detected: $PERL_VERSION "
echo "Aborting install..."
exit 2
fi
UNIX_KIND=`uname -s`
if [ -z "`echo Linux HP-UX SunOS AIX Solaris | grep \"$UNIX_KIND\"`" ]
then
echo "This system: '$UNIX_KIND' is not supported by this script"
echo "Please make the install yourself as it's described in documentation"
exit 1
fi
# check for root to do the install
if [ -z "`id | grep \"uid=0(root)\"`" ]
then
echo "You need to be root to do the install. Please made a manual install"
echo "if you want to install Pandora FMS agent without root"
echo " "
echo "Aborting install"
exit 2
fi
if [ ! -f "pandora_agent" ] if [ ! -f "pandora_agent" ]
then then
echo " " echo " "
echo "You need to place pandora_agent file on main distribution directory before install" echo "Execute installer from the directory where you have your files. For example:"
echo " "
echo " cd /tmp/pandora_install "
echo " ./pandora_agent_installer --install"
echo " ./pandora_agent_installer --install-with-links /var/opt/PandoraFMS"
echo " " echo " "
exit 1 exit 1
fi fi
uninstall { uninstall () {
echo "Removing Pandora FMS Agent..." echo "Removing Pandora FMS Agent..."
rm -Rf $PANDORA_BIN rm -Rf $PANDORA_BIN
rm -Rf $PANDORA_TEMP rm -Rf $PANDORA_TEMP
rm -Rf $PANDORA_CFG_FILE rm -Rf $PANDORA_CFG/pandora_agent.conf
rm -Rf $PANDORA_STARTUP
rm -Rf /etc/init.d/pandora_agent_daemon 2> /dev/null
rm -Rf /sbin/init.d/pandora_agent_daemon 2> /dev/null
rm -Rf /etc/rc.pandora_agent_daemon 2> /dev/null
rm -Rf /etc/rc?.d/S90pandora_agent_daemon 2> /dev/null
rm -Rf /sbin/rc?.d/S90pandora_agent_daemon 2> /dev/null
rm -Rf $PANDORA_HOME rm -Rf $PANDORA_HOME
rm -Rf $PANDORA_LOG rm -Rf $PANDORA_LOG_DIR
rm -Rf $TENTACLE rm -Rf $TENTACLE
# Skip delete of /etc/pandora if exists configuration of a server
if [ ! -f /etc/pandora/pandora_server.conf ]
then
rm -Rf /etc/pandora
fi
echo "If you install Pandora FMS agent in a custom directory, you should"
echo " delete it yourself with command rm -Rf <yourdir>, for example:"
echo " "
echo " rm -Rf /opt/software/pandora"
echo " "
echo "Done" echo "Done"
} }
@ -47,11 +110,8 @@ install () {
OS_VERSION=`uname -r` OS_VERSION=`uname -r`
OS_NAME=`uname -s` OS_NAME=`uname -s`
OLDFILENAMETMP=`date +"%Y-%m-%d"` OLDFILENAMETMP=`date +"%Y-%m-%d"`
echo "Detecting Unix distribution: $OS_NAME version $OS_VERSION" echo "Detecting Unix distribution: $OS_NAME version $OS_VERSION"
if [ -f $PANDORA_HOME ] && [ "$FORCE" = "0" ] if [ -f $PANDORA_HOME ] && [ "$FORCE" = "0" ]
then then
echo "Seems that default dir already exists. Please use --force to" echo "Seems that default dir already exists. Please use --force to"
@ -71,42 +131,51 @@ install () {
echo "Checking Pandora FMS Agent on $PANDORA_BIN...." echo "Checking Pandora FMS Agent on $PANDORA_BIN...."
fi fi
# Create directories
echo "Creating Pandora FMS Agent home directory at $PANDORA_HOME ..." echo "Creating Pandora FMS Agent home directory at $PANDORA_HOME ..."
mkdir $PANDORA_HOME 2> /dev/null mkdir -p $PANDORA_HOME 2> /dev/null
mkdir $PANDORA_TEMP 2> /dev/null
mkdir $PANDORA_TEMP/data_out 2> /dev/null
mkdir $PANDORA_CFG 2> /dev/null
mkdir /var/log/pandora 2> /dev/null
# Create logfile # IF USE_LINKS = 1 then append HOME to other paths
if [ ! -z "`touch $PANDORA_LOG`" ] if [ "$USE_LINKS" = 1 ]
then then
echo "Seems to be a problem generating logfile ($PANDORA_LOG) please check it"; mkdir -p $PANDORA_HOME/$PANDORA_TEMP/data_out 2> /dev/null
mkdir -p $PANDORA_LOG_DIR 2> /dev/null
ln -s $PANDORA_HOME /etc/pandora
ln -s $PANDORA_HOME/$PANDORA_TEMP /var/spool/pandora
else else
echo "Creating logfile at $PANDORA_LOG..." # Create directories on /
mkdir -p $PANDORA_TEMP/data_out 2> /dev/null
mkdir -p $PANDORA_CFG 2> /dev/null
mkdir -p $PANDORA_LOG_DIR 2> /dev/null
fi fi
echo "$LOG_TIMESTAMP Pandora FMS installer has created this file at startup" > $PANDORA_LOG # Create logfile
if [ ! -z "`touch $PANDORA_LOG_DIR/$PANDORA_LOG`" ]
then
echo "Seems to be a problem generating logfile ($PANDORA_LOG_DIR/$PANDORA_LOG) please check it";
else
echo "Created logfile at $PANDORA_LOG_DIR/$PANDORA_LOG..."
fi
echo "$LOG_TIMESTAMP Pandora FMS installer has created this file at startup" > $PANDORA_LOG_DIR/$PANDORA_LOG
# Copying agent and securing it # Copying agent and securing it
echo "Copying Pandora FMS Agent to $PANDORA_BIN..." echo "Copying Pandora FMS Agent to $PANDORA_BIN..."
cp pandora_agent $PANDORA_BIN cp pandora_agent $PANDORA_BIN
chmod 700 $PANDORA_BIN chmod 755 $PANDORA_BIN
chown root:root $PANDORA_BIN
echo "Copying Pandora FMS Agent contrib dir to $PANDORA_HOME/..."
cp pandora_agent_daemon $PANDORA_HOME
echo "Copying Pandora FMS Agent configuration file to $PANDORA_HOME/pandora_agent.conf..." echo "Copying Pandora FMS Agent configuration file to $PANDORA_HOME/pandora_agent.conf..."
if [ -e /etc/pandora/pandora_agent.conf ] if [ -f /etc/pandora/pandora_agent.conf ]
then then
cat /etc/pandora/pandora_agent.conf > /etc/pandora/pandora/pandora_agent.conf.$OLDFILENAMETMP cat /etc/pandora/pandora_agent.conf > /etc/pandora/pandora_agent.conf.$OLDFILENAMETMP
echo "Backing up old configuration file to /etc/pandora_agent.conf.$OLDFILENAMETMP" echo "Backing up old configuration file to /etc/pandora_agent.conf.$OLDFILENAMETMP"
fi fi
echo "Copying default agent configuration to $PANDORA_HOME/pandora_agent.conf" echo "Copying default agent configuration to $PANDORA_HOME/pandora_agent.conf"
cp $OS_NAME/pandora_agent.conf $PANDORA_HOME/pandora_agent.conf cp $OS_NAME/pandora_agent.conf $PANDORA_HOME/pandora_agent.conf
chmod 600 $PANDORA_HOME/pandora_agent.conf chmod 600 $PANDORA_HOME/pandora_agent.conf
chown root $PANDORA_HOME/pandora_agent.conf
echo "Copying Pandora FMS Agent plugins to $PANDORA_HOME/plugins..." echo "Copying Pandora FMS Agent plugins to $PANDORA_HOME/plugins..."
cp -r plugins $PANDORA_HOME cp -r plugins $PANDORA_HOME
@ -114,66 +183,92 @@ install () {
echo "Copying tentacle client to $TENTACLE" echo "Copying tentacle client to $TENTACLE"
cp tentacle_client $TENTACLE cp tentacle_client $TENTACLE
chmod 755 $TENTACLE
if [ "$USE_LINKS" != 1 ]
then
echo "Linking Pandora FMS Agent plugins directory to $PANDORA_CFG/plugins..." echo "Linking Pandora FMS Agent plugins directory to $PANDORA_CFG/plugins..."
rm $PANDORA_CFG/plugins 2> /dev/null rm $PANDORA_CFG/plugins 2> /dev/null
ln -s $PANDORA_HOME/plugins $PANDORA_CFG 2> /dev/null ln -s $PANDORA_HOME/plugins $PANDORA_CFG/plugins 2> /dev/null
echo "Linking Pandora FMS Agent configuration to $PANDORA_CFG/pandora_agent.conf..." echo "Linking Pandora FMS Agent configuration to $PANDORA_CFG/pandora_agent.conf..."
rm $PANDORA_CFG/pandora_agent.conf 2> /dev/null rm $PANDORA_CFG/pandora_agent.conf 2> /dev/null
ln -s $PANDORA_HOME/pandora_agent.conf $PANDORA_CFG/pandora_agent.conf ln -s $PANDORA_HOME/pandora_agent.conf $PANDORA_CFG/pandora_agent.conf
fi
echo "Setting secure permissions and ownership for all Pandora FMS Agent files..." echo "Setting secure permissions and ownership for all Pandora FMS Agent files..."
chown -R root $PANDORA_HOME chown -R root $PANDORA_HOME
chmod -R 600 $PANDORA_TEMP/data_out chmod -R 600 $PANDORA_TEMP
chmod 640 $PANDORA_LOG chown root $PANDORA_TEMP
chgrp root $PANDORA_LOG chmod 640 $PANDORA_LOG_DIR/$PANDORA_LOG
chown root:root $PANDORA_LOG_DIR/$PANDORA_LOG
echo "Linking start-up daemon script at $PANDORA_STARTUP"; echo "Linking start-up daemon script 'pandora_agent_daemon' on $OS_NAME";
if [ "$OS_NAME" == "AIX" ] if [ "$OS_NAME" = "AIX" ]
then then
cp $OS_NAME/pandora_agent_daemon /etc/rc.pandora_agent_daemon cp pandora_agent_daemon /etc/rc.pandora_agent_daemon
else ln -s /etc/rc.pandora_agent_daemon /etc/rc.d/rc2.d/S90pandora_agent_daemon
cp $OS_NAME/pandora_agent_daemon $PANDORA_STARTUP echo "Pandora FMS agent has been included in /etc/rc.d/rc2.d/S90pandora_agent_daemon"
fi fi
if [ "$OS_NAME" == "AIX" ] if [ $OS_NAME = "HP-UX" ]
then then
echo "Linking start-up daemon script to /etc/rc2.d"; cp pandora_agent_daemon /sbin/init.d/pandora_agent_daemon
ln -s /etc/rc.pandora_agent_daemon /etc/rc2.d/S90pandora_agent ln -s /sbin/init.d/pandora_agent_daemon /sbin/rc3.d/S90pandora_agent_daemon
else ln -s /sbin/init.d/pandora_agent_daemon /sbin/rc2.d/S90pandora_agent_daemon
INITLV=`cat /etc/inittab | grep "[0-9]\:initdefault" | cut -f 2 -d ":"` echo "Pandora FMS agent has been included in /sbin/rcX.d/S90pandora_agent_daemon"
echo "Linking start-up daemon script to /etc/rc.d/rc$INITLV.d";
ln -s /etc/init.d/pandora_agent_daemon /etc/rc.d/rc$INITLV.d/S90pandora_agent
fi fi
chown -R root:root $PANDORA_BIN if [ $OS_NAME = "SunOS" ]
then
cp pandora_agent_daemon /etc/init.d/pandora_agent_daemon
ln -s /etc/init.d/pandora_agent_daemon /etc/rc2.d/S90pandora_agent_daemon
echo "Pandora FMS agent has been included in /etc/rc2.d/S90pandora_agent_daemon"
fi
if [ $OS_NAME = "Linux" ]
then
cp pandora_agent_daemon /etc/init.d/pandora_agent_daemon
if [ -d /etc/rc.d/ ]
then
ln -s /etc/init.d/pandora_agent_daemon /etc/rc.d/rc2.d/S90pandora_agent
ln -s /etc/init.d/pandora_agent_daemon /etc/rc.d/rc3.d/S90pandora_agent
else
ln -s /etc/init.d/pandora_agent_daemon /etc/rc2.d/S90pandora_agent
ln -s /etc/init.d/pandora_agent_daemon /etc/rc2.d/S90pandora_agent
fi
fi
echo "Done." echo "Done."
echo " " echo " "
echo "You have your startup script ready at $PANDORA_STARTUP" echo "You have your startup script ready at $PANDORA_STARTUP"
echo " " echo " "
echo "Tentacle is the default transfer mode since 2.0 version." echo "Tentacle is the default transfer mode since 2.0 version."
echo "If you want to use SSH, firstly you need to copy your public SSH keys ($HOME/.ssh/id_dsa)" echo "If you want to use SSH, firstly you need to copy your public SSH keys "
echo "under /home/pandora/.ssh/authorized_keys on your Pandora FMS Server host" echo " ($HOME/.ssh/id_dsa) under /home/pandora/.ssh/authorized_keys "
echo "on your Pandora FMS Server host"
echo " "
echo "You also need to setup your $PANDORA_CFG/pandora_agent.conf config file" echo "You also need to setup your $PANDORA_CFG/pandora_agent.conf config file"
echo " " echo " "
echo "Take a look of your echo "Check your startup configuration to be sure Pandora FMS Agent is ready "
echo " " echo "to start automatically when system restarts":
} }
help () { help () {
echo " --force-install To force installation if already installed on system " echo " --force-install To force installation if already installed on system"
echo " --install To install Pandora FMS Agent on this system" echo " --install To install Pandora FMS Agent on this system"
echo " --uninstall To uninstall and remove Pandora FMS Agent on this System" echo " --uninstall To uninstall/remove Pandora FMS Agent on this System"
echo " --install-with-links <base_dir> "
echo " To install Pandora FMS in a defined dir <base_dir>"
echo " and set all Pandora FMS directories as links to this"
echo " " echo " "
} }
# Script banner at start # Script banner at start
echo " " echo " "
echo "Pandora FMS Agent Installer $PI_VERSION (c) 2008-2009 ArticaST" echo "Pandora FMS Agent UNIX Installer $PI_VERSION $PI_BUILD (c) 2008-2009 ArticaST"
echo "This program is licensed under GPL2 Terms. http://pandorafms.com" echo "This program is licensed under GPL2 Terms. http://pandorafms.com"
echo " " echo " "
@ -190,6 +285,12 @@ case "$MODE" in
exit exit
;; ;;
'--install-with-links')
USE_LINKS=1
install
exit
;;
'--uninstall') '--uninstall')
uninstall uninstall
exit exit
@ -197,5 +298,6 @@ case "$MODE" in
*) *)
help help
;;
esac esac

View File

@ -0,0 +1,241 @@
#!/usr/bin/perl
###############################################################################
#
# Copyright (c) 2008 Ramon Novoa <rnovoa@artica.es>
# Copyright (c) 2008 Artica Soluciones Tecnologicas S.L.
#
# grep_log Perl script to search log files for a matching pattern. The last
# searched position is saved in an index file so that consecutive
# runs do not return the same results. The log file inode number is
# also saved to detect log rotation.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
###############################################################################
use strict;
use File::Basename;
# Be verbose
my $Verbose = 0;
# Index file storage directory, with a trailing '/'
my $Idx_dir='/tmp/';
# Log file
my $Log_file = '';
# Module name
my $Module_name = "default_log";
# Index file
my $Idx_file = '';
# Log file position index
my $Idx_pos = 0;
# Log file inode number
my $Idx_ino = '';
# Regular expression to be matched
my $Reg_exp = '';
###############################################################################
# SUB error_msg
# Print an error message and exit.
###############################################################################
sub error_msg ($) {
my $err_msg = $_[0];
if (! -z $err_msg) {
print(stderr "[error] $err_msg.\n");
}
exit 1;
}
###############################################################################
# SUB print_help
# Print a help message.
###############################################################################
sub print_help () {
print "Usage: $0 <log_file> <module_name> <pattern>\n";
}
###############################################################################
# SUB log_msg
# Print a log message.
###############################################################################
sub log_msg ($) {
my $log_msg = $_[0];
if (! -z $log_msg && $Verbose == 1) {
print(stdout "[log] $log_msg.\n");
}
}
###############################################################################
# SUB load_idx
# Load index file.
###############################################################################
sub load_idx () {
my $line;
my $current_ino;
log_msg("Loading index file $Idx_file");
open(IDXFILE, $Idx_file) || error_msg("Error opening file $Idx_file: " .
$!);
# Read position and date
$line = <IDXFILE>;
($Idx_pos, $Idx_ino) = split(' ', $line);
close(IDXFILE);
# Reset the file index if the file has changed
$current_ino = (stat($Log_file))[1];
if ($current_ino != $Idx_ino) {
log_msg("File changed, resetting index");
$Idx_pos = 0;
$Idx_ino = $current_ino;
}
return;
}
###############################################################################
# SUB save_idx
# Save index file.
###############################################################################
sub save_idx () {
log_msg("Saving index file $Idx_file");
open(IDXFILE, "> $Idx_file") || error_msg("Error opening file $Idx_file: "
. $!);
print (IDXFILE $Idx_pos . " " . $Idx_ino);
close(IDXFILE);
return;
}
###############################################################################
# SUB create_idx
# Create index file.
###############################################################################
sub create_idx () {
my $first_line;
log_msg("Creating index file $Idx_file");
open(LOGFILE, $Log_file) || error_msg("Error opening file $Log_file: " .
$!);
# Go to EOF and save the position
seek(LOGFILE, 0, 2);
$Idx_pos = tell(LOGFILE);
close(LOGFILE);
# Save the file inode number
$Idx_ino = (stat($Log_file))[1];
# Save the index file
save_idx();
return;
}
###############################################################################
# SUB parse_log
# Parse log file starting from position $Idx_pos.
###############################################################################
sub parse_log () {
my $line;
log_msg("Parsing log file $Log_file");
# Open log file for reading
open(LOGFILE, $Log_file) || error_msg("Error opening file $Log_file: " .
$!);
# Go to starting position
seek(LOGFILE, $Idx_pos, 0);
print (stdout "<module>\n");
print (stdout "<name><![CDATA[" . $Module_name . "]]></name>\n");
print (stdout "<type><![CDATA[async_string]]></type>\n");
print (stdout "<datalist>\n");
# Parse log file
while ($line = <LOGFILE>) {
if ($line =~ m/$Reg_exp/i) {
# Remove the trailing '\n'
chop($line);
print (stdout "<data><value><![CDATA[$line]]></value></data>\n");
}
}
print (stdout "</datalist>\n");
print (stdout "</module>\n");
$Idx_pos = tell(LOGFILE);
close(LOGFILE);
# Save the index file
save_idx();
return;
}
###############################################################################
###############################################################################
## Main
###############################################################################
###############################################################################
# Check command line parameters
if ($#ARGV != 2) {
print_help();
exit 1;
}
$Log_file = $ARGV[0];
$Module_name = $ARGV[1];
$Reg_exp = $ARGV[2];
# Create index file storage directory
if ( ! -d $Idx_dir) {
mkdir($Idx_dir) || error_msg("Error creating directory $Idx_dir: "
. $!);
}
# Check that log file exists
if (! -e $Log_file) {
error_msg("File $Log_file does not exist");
}
# Create index file if it does not exist
$Idx_file=$Idx_dir . $Module_name . "_" . basename($Log_file) . ".idx";
if (! -e $Idx_file) {
create_idx();
exit 0;
}
# Load index file
load_idx();
# Parse log file
parse_log();
exit 0;

View File

@ -0,0 +1,282 @@
#!/usr/bin/perl
###############################################################################
#
# Copyright (c) 2009 Artica Soluciones Tecnologicas S.L.
#
# inventory Generate a hardware/software inventory.
#
# Sample usage: ./inventory <interval in days> [cpu] [ram] [video] [nic] [hd] [cdrom] [software] [init_services] [filesystem] [process] [users]
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
###############################################################################
use strict;
use constant TSTAMP_FILE => '/tmp/pandora_inventory.tstamp';
# Parse module information
sub get_module_data ($$$$) {
my ($name, $hwinfo, $keys, $modules) = @_;
my %module;
# Parse module data
while (my $line = shift (@{$hwinfo})) {
if ($line =~ /\s+\*\-/) {
unshift (@{$hwinfo}, $line);
last;
}
foreach my $key (@{$keys}) {
if ($line =~ /$key:\s+(.+)/) {
$module{$key} = $1;
push (@{$module{'_keys'}}, $key);
}
}
}
# No data found
my @data = keys (%module);
return unless ($#data >= 0);
push (@{$modules->{$name}}, \%module);
}
# Get a list of information file system in machine
sub get_file_system($$) {
my ($name, $modules) = @_;
my @fileSystems = `df -h | tail -n +2`; #remove the titles of columns
foreach my $row (@fileSystems) {
next unless ($row =~ /^(\S+)\s+\S+\s+(\S+)\s+(\S+)\s+\S+\s+(\S+)/);
my %module;
$module{'filesystem'} = $1;
$module{'used'} = $2;
$module{'avail'} = $3;
$module{'mount'} = $4;
$module{'_keys'} = ['filesystem', 'used','avail', 'mount'];
push (@{$modules->{$name}}, \%module);
}
}
# Get a list of services init in machine
sub get_servicies_init_machine($$) {
my ($name, $modules) = @_;
my $runlevel = `runlevel | cut -d' ' -f2`;
#ini trim($runlevel)
$runlevel =~ s/^\s*//; #ltrim
$runlevel =~ s/\s*$//; #rtrim
#end trim($runlevel)
my $script = "ls /etc/rc" . $runlevel .".d/ -l | grep \"^l.*\" | grep \" S.* \" | cut -d' ' -f11";
my @services = `$script`;
foreach my $row (@services) {
next unless ($row =~ /^\S+\/(\S+)$/);
my %module;
$module{'service'} = $1;
$module{'_keys'} = ['service'];
push (@{$modules->{$name}}, \%module);
}
}
# Get a list of running processes
sub get_processes ($$) {
my ($name, $modules) = @_;
my $script = "ps aux";
my @services = `$script`;
foreach my $row (@services) {
my %module;
# Remove carriage returns
$row =~ s/[\n\l\f]//g;
$module{'service'} = $row;
$module{'_keys'} = ['service'];
push (@{$modules->{$name}}, \%module);
}
}
# Get a list of valid users in the system
sub get_users ($$) {
my ($name, $modules) = @_;
my $script = "cat /etc/passwd";
my $user = "";
my $estado = "";
my @services = `$script`;
foreach my $row (@services) {
my %module;
next unless ($row =~ /^([A-Za-z0-9\-\_]*)/);
$user = $1;
$script = `passwd -S $user`;
if ( $script =~ /^(\S+)\sP./){
$module{'user'} = $user;
$module{'_keys'} = ['user'];
push (@{$modules->{$name}}, \%module);
}
}
}
# Get a list of installed programs
sub get_software_module_data ($$) {
my ($name, $modules) = @_;
# Guess the current distribution
open (RELEASE_FILE, '< /etc/lsb-release') or return;
my $distrib_id = <RELEASE_FILE>;
last unless ($distrib_id =~ m/DISTRIB_ID\s*=\s*(\S+)/);
$distrib_id = $1;
# List installed programs
my @soft;
if ($distrib_id eq 'Ubuntu') {
@soft = `dpkg -l | grep ii`;
} else {
return;
}
# Parse data
foreach my $row (@soft) {
next unless ($row =~ /^ii\s+(\S+)\s+(\S+)\s+([^\n]+)/);
my %module;
$module{'program'} = $1;
$module{'version'} = $2;
$module{'description'} = $3;
$module{'_keys'} = ['program', 'version','description'];
push (@{$modules->{$name}}, \%module);
}
}
# Print module data
sub print_module ($$) {
my ($name, $module) = @_;
print " <inventory_module>\n";
print " <name><![CDATA[" . $name . "]]></name>\n";
print " <datalist>\n";
foreach my $item (@{$module}) {
# Compose module data
my $data = '';
foreach my $key (@{$item->{'_keys'}}) {
next unless defined ($item->{$key});
$data .= ($data eq '' ? '' : ';') . $item->{$key};
}
print " <data><![CDATA[$data]]></data>\n";
}
print " </datalist>\n";
print " </inventory_module>\n";
}
# Check command line parameters
if ($#ARGV < 0) {
print "Usage: $0 <interval> [cpu] [ram] [video] [nic] [hd] [cdrom] [software] [init_services] [filesystem] [users] [process] \n\n";
exit 1;
}
# Parse command line parameters
my %enabled;
my $enable_all = ($#ARGV > 0 ? 0 : 1);
my $interval = shift (@ARGV);
foreach my $module (@ARGV) {
$enabled{$module} = 1;
}
# Check execution interval
if (-f TSTAMP_FILE) {
open (FILE, '<' . TSTAMP_FILE) || exit 1;
my $last_execution = <FILE>;
close (FILE);
exit 0 if ($last_execution + 86400 * $interval > time ());
}
open (FILE, '>' . TSTAMP_FILE) || exit 1;
print FILE time ();
close (FILE);
# Retrieve hardware information
my @hwinfo = `lshw 2>/dev/null`;
# Parse hardware information
my %modules;
while (my $line = shift (@hwinfo)) {
chomp ($line);
# CPU
if ($line =~ /\*\-cpu/ && ($enable_all == 1 || $enabled{'cpu'} == 1)) {
get_module_data ('CPU', \@hwinfo, ['product', 'vendor', 'capacity'], \%modules);
}
# RAM
if ($line =~ /\*\-bank/ && ($enable_all == 1 || $enabled{'ram'} == 1)) {
get_module_data ('RAM', \@hwinfo, ['description', 'size'], \%modules);
}
# VIDEO
if ($line =~ /\*\-display/ && ($enable_all == 1 || $enabled{'video'} == 1)) {
get_module_data ('VIDEO', \@hwinfo, ['product', 'description', 'vendor'], \%modules);
}
# NIC
if ($line =~ /\*\-network/ && ($enable_all == 1 || $enabled{'nic'} == 1)) {
get_module_data ('NIC', \@hwinfo, ['product', 'description', 'vendor'], \%modules);
}
# CDROM
if ($line =~ /\*\-cdrom/ && ($enable_all == 1 || $enabled{'cdrom'} == 1)) {
get_module_data ('CDROM', \@hwinfo, ['product', 'description', 'vendor'], \%modules);
}
# HD
if ($line =~ /\*\-disk/ && ($enable_all == 1 || $enabled{'hd'} == 1)) {
get_module_data ('HD', \@hwinfo, ['product', 'description', 'size'], \%modules);
}
}
# Software
if ($enable_all == 1 || $enabled{'software'} == 1) {
get_software_module_data ('Software', \%modules);
}
#init_services
if ($enable_all == 1 || $enabled{'init_services'} == 1) {
get_servicies_init_machine ('Init services', \%modules);
}
#filesystem
if ($enable_all == 1 || $enabled{'filesystem'} == 1) {
get_file_system('File system', \%modules);
}
#processes
if ($enable_all == 1 || $enabled{'process'} == 1) {
get_processes('Process', \%modules);
}
#users
if ($enable_all == 1 || $enabled{'users'} == 1){
get_users ('Users', \%modules);
}
# Print module data
print "<inventory>\n";
while (my ($name, $module) = each (%modules)) {
print_module ($name, $module);
}
print "</inventory>\n";
exit 0;

View File

@ -0,0 +1,71 @@
#!/usr/bin/perl
###############################################################################
#
# Copyright (c) 2009 Ramon Novoa <rnovoa@artica.es>
# Copyright (c) 2009 Artica Soluciones Tecnologicas S.L.
#
# pandora_df Retrieve filesystem disk usage. By default information for all
# filesystems is returned, but one or more filesystems may be
# specified as command line parameters.
#
# Sample usage: ./pandora_df tmpfs /dev/sda1
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
###############################################################################
use strict;
# Retrieve information from all filesystems
my $all_filesystems = 0;
# Check command line parameters
if ($#ARGV < 0) {
$all_filesystems = 1;
}
# Parse command line parameters
my %filesystems;
foreach my $fs (@ARGV) {
$filesystems{$fs} = '-1%';
}
# Retrieve filesystem information
# -P use the POSIX output format for portability
my @df = `df -P`;
shift (@df);
# No filesystems? Something went wrong.
if ($#df < 0) {
exit 1;
}
# Parse filesystem usage
foreach my $row (@df) {
my @columns = split (' ', $row);
exit 1 if ($#columns < 4);
$filesystems{$columns[0]} = $columns[4] if (defined ($filesystems{$columns[0]}) || $all_filesystems == 1);
}
while (my ($filesystem, $use) = each (%filesystems)) {
# Remove the trailing %
chop ($use);
# Print module output
print "<module>\n";
print "<name><![CDATA[" . $filesystem . "]]></name>\n";
print "<type><![CDATA[generic_data]]></type>\n";
print "<data><![CDATA[" . $use . "]]></data>\n";
print "<description>% of usage in this volume</description>\n";
print "</module>\n";
}
exit 0;

View File

@ -1,7 +1,5 @@
#!/usr/bin/perl #!/usr/bin/perl
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if 0; # not running under some shell
################################################################################ ################################################################################
# #
# Copyright (c) 2007-2008 Ramon Novoa <rnovoa@artica.es> # Copyright (c) 2007-2008 Ramon Novoa <rnovoa@artica.es>