From 79cb9d5e35b30fc6a43af4b99aa33d321de1a6b0 Mon Sep 17 00:00:00 2001
From: jsatoh <junichi@rworks.jp>
Date: Mon, 5 Jul 2010 03:20:42 +0000
Subject: [PATCH] 2010-07-05  Junichi Satoh <junichi@rworks.jp>

	* pandora_server_installer: Added support for FreeBSD.

	* FreeBSD/pandora_server, FreeBSD/tentacle_server: Added startup
	script for FreeBSD.

	* FreeBSD/pandora_server.conf: Added configuration file for FreeBSD.



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2959 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
---
 pandora_server/ChangeLog                   |   9 +
 pandora_server/FreeBSD/pandora_server      |  50 ++++
 pandora_server/FreeBSD/pandora_server.conf | 283 +++++++++++++++++++++
 pandora_server/FreeBSD/tentacle_server     |  50 ++++
 pandora_server/pandora_server_installer    | 191 +++++++++++---
 5 files changed, 549 insertions(+), 34 deletions(-)
 create mode 100755 pandora_server/FreeBSD/pandora_server
 create mode 100644 pandora_server/FreeBSD/pandora_server.conf
 create mode 100755 pandora_server/FreeBSD/tentacle_server

diff --git a/pandora_server/ChangeLog b/pandora_server/ChangeLog
index b078d5310a..7a58a3f10c 100644
--- a/pandora_server/ChangeLog
+++ b/pandora_server/ChangeLog
@@ -1,3 +1,12 @@
+2010-07-05  Junichi Satoh <junichi@rworks.jp>
+
+	* pandora_server_installer: Added support for FreeBSD.
+
+	* FreeBSD/pandora_server, FreeBSD/tentacle_server: Added startup
+	script for FreeBSD.
+
+	* FreeBSD/pandora_server.conf: Added configuration file for FreeBSD.
+
 2010-06-10  Sancho Lerena <slerena@artica.es>
 
 	* lib/PandoraFMS/Core.pm: Redefine downtime name and description if
diff --git a/pandora_server/FreeBSD/pandora_server b/pandora_server/FreeBSD/pandora_server
new file mode 100755
index 0000000000..f8790d9de8
--- /dev/null
+++ b/pandora_server/FreeBSD/pandora_server
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+# **********************************************************************
+# Pandora FMS Server Daemon launcher for FreeBSD
+# (c) 2010 Junichi Satoh <junichi@rworks.jp>
+#
+# **********************************************************************
+
+# PROVIDE: pandora_server
+# REQUIRE: LOGIN mysql
+# KEYWORD: shutdown
+
+# Add the following line to /etc/rc.conf to enable `pandora_server':
+#
+# pandora_server_enable="YES"
+#
+
+. "/etc/rc.subr"
+
+name="pandora_server"
+rcvar=`set_rcvar`
+
+# read configuration and set defaults
+pandora_server_enable=${pandora_server_enable:-"NO"}
+load_rc_config $name
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
+
+command=/usr/local/bin/${name}
+command_args="-D /usr/local/etc/pandora/pandora_server.conf"
+
+pidfile=/var/run/$name.pid
+required_files="/usr/local/etc/pandora/pandora_server.conf"
+start_postcmd=start_postcmd
+stop_postcmd=stop_postcmd
+
+procname="/usr/local/bin/perl"
+
+start_postcmd()
+{
+	PANDORA_PID=`ps auxww | grep $command | grep -v grep | head -1 | awk '{ print $2 }'`
+	echo $PANDORA_PID > $pidfile
+}
+
+stop_postcmd()
+{
+	rm -f $pidfile
+}
+
+run_rc_command "$1"
diff --git a/pandora_server/FreeBSD/pandora_server.conf b/pandora_server/FreeBSD/pandora_server.conf
new file mode 100644
index 0000000000..9ebf826b20
--- /dev/null
+++ b/pandora_server/FreeBSD/pandora_server.conf
@@ -0,0 +1,283 @@
+#############################################################################
+# Pandora FMS Server Parameters
+# Pandora FMS, the Flexible Monitoring System.
+# Version 3.1
+# Licensed under GPL license v2,
+# (c) 2003-2010 Artica Soluciones Tecnologicas
+# http://www.pandorafms.com
+# Please change it for your setup needs
+#############################################################################
+
+# Servername: Name of this server
+# if not given, it takes hostname. It's preferable to setup one
+# because machine name could change by some reason.
+
+#servername adama
+
+# incomingdir:  Defines directory where incoming data packets are stored
+# You could set directory relative to base path or absolute, starting with /
+
+incomingdir /var/spool/pandora/data_in
+
+# log_file: Main logfile for pandora_server
+# You could set file relative to base path or absolute, starting with /
+
+log_file /var/log/pandora/pandora_server.log
+
+# Log file for Pandora FMS SNMP console. Its generated by NetSNMP Trap daemon
+
+snmp_logfile /var/log/pandora/pandora_snmptrap.log
+
+# Error logfile: aux logfile for pandora_server errors (in Daemon mode)
+# You could set file relative to base path or absolute, starting with /
+
+errorlog_file /var/log/pandora/pandora_server.error
+
+# daemon: Runs in daemon mode (background) if 1, if 0 runs in foreground 
+# this could be also configured on commandline with -D option
+
+# daemon 1
+
+# Database credentials. A VERY important configuration.
+# This must be the same credentials used by your Pandora FMS Console
+# but could be different if your console is not running in the same
+# host than the server. Check your console setup in /include/config.php
+
+# dbname: Database name (pandora by default
+
+dbname pandora
+
+# dbuser:  Database user name (pandora by default)
+
+dbuser pandora
+
+# dbpass: Database password
+
+dbpass pandora
+
+# dbhost: Database hostname or IP address
+
+dbhost localhost
+
+# verbosity: level of detail on errors/messages (0 default, 1 verbose, 2 debug.... 10 noisy)
+# -v in command line (verbose) or -d (debug). Set this to 10 when try to locate problems and
+# set to 0 or 1 on production enviroments.
+
+verbosity 1
+
+# Master Server, 1 if master server (normal mode), 0 for slave mode (slave in multi-server setup)
+
+master 1
+
+# Check datafiles using a MD5 hash, 1 to check (default), 0 to ignore .checksum
+
+checksum 0
+
+# Activate Pandora SNMP console (depending on snmptrapd)
+# only available on Pandora Network server
+
+snmpconsole 1
+
+# Activate (1) Pandora Network Server 
+
+networkserver 1
+
+# Activate (1) Pandora Data Server
+
+dataserver 1
+
+# Activate (1) Pandora FMS Recon server
+
+reconserver 1
+
+# pluginserver : 1 or 0. Set to 1 to activate plugin server with this setup
+# DISABLED BY DEFAULT
+pluginserver 0 
+
+# Pandora FMS Plugin exec tool filepath (by default at /usr/local/bin)
+
+plugin_exec /usr/local/bin/pandora_exec
+
+# predictionserver : 1 or 0. Set to 1 to activate prediction server with this setup
+# DISABLED BY DEFAULT 
+predictionserver 0
+
+# wmiserver : 1 or 0. Set to 1 to activate WMI server with this setup
+# DISABLED BY DEFAULT
+wmiserver 0
+
+# Network timeout (in seconds) for timeout in network connections for Network agents
+
+network_timeout 5
+
+# Server keepalive (in seconds)
+
+server_keepalive 45
+
+# Server Threshold: defines number of seconds of main loop (in sec)
+
+server_threshold 5
+
+# Network threads: Do not set too high (~40). Each threads make a network module check.
+
+network_threads 5
+
+# icmp_checks x : defines number of pings for each icmp_proc module type. at least one of 
+# that ping should be 1 to report 1
+
+icmp_checks 1
+
+# tcp specific options :
+# tcp_checks: number of tcp retries if first attempt fails.
+# tcp_timeout: specific timeout for tcp connections
+
+tcp_checks 1
+tcp_timeout 30
+
+# snmp specific options :
+# snmp_checks: number of snmp request retries if first attempt fails.
+# snmp_timeout: specific timeout for snmp request.
+
+snmp_checks 1
+snmp_timeout 5
+
+# snmp_proc_deadresponse 1 (default): Return DOWN if cannot contact 
+# or receive NULL from a SNMP PROC module.
+
+snmp_proc_deadresponse 1
+
+# plugin_threads: Specify number of plugin server threads for processing plugin calls
+
+plugin_threads 2
+
+# plugin_timeout: Specify number of seconds calling plugin exec waiting for response
+# after this time, call is aborted and result is "unknown".
+
+plugin_timeout 15
+
+# wmi_timeout : specific timeout for wmi request.
+
+wmi_timeout 10
+
+# wmi_threads: Specify number of WMI server threads for processing WMI remote calls
+
+wmi_threads 2
+
+# recon_threads. Each thread will scan a different scantask.
+
+recon_threads 2
+
+# dataserver_threads: Number of threads for data server (XML processing threads)
+
+dataserver_threads 2
+
+# mta_address: External Mailer (MTA) IP Address to be used by Pandora FMS internal email capabilities
+#mta_address 192.168.50.1
+
+mta_address localhost
+
+# mta_port: MTA port (default 25)
+#mta_port 25
+
+# mta_user MTA User (if needed for auth, FQD or simple user, depending on your server)
+#mta_user myuser@mydomain.com
+
+# mta_pass MTA Pass (if needed for auth)
+#mta_pass mypassword
+
+# mta_auth MTA Auth system (if needed, support: LOGIN, PLAIN, CRAM-MD5, DIGEST-MD)
+#mta_auth LOGIN
+
+# mta_from Email address that sends the mail, by default is pandora@localhost 
+#           probably you need to change it to avoid problems with your antispam
+#mta_from pandora@sampledomain.com
+
+# xprobe2: Optional package to detect OS types using advanced TCP/IP 
+# fingerprinting tecniques, much more accurates than stadard nmap.
+# If not provided, nmap is used insted xprobe2
+
+xprobe2 /usr/local/bin/xprobe2
+
+# nmap: If provided, is used to detect OS type with recon server using 
+# advanded OS fingerprint technique. Xprobe2 gives more accurate results
+# Nmap is also used to do TCP port scanning in detected host.
+
+nmap /usr/local/bin/nmap
+
+# snmpget: Needed to do SNMP checks. By default is on /usr/local/bin/snmpget
+
+snmpget /usr/local/bin/snmpget
+
+# Default group id for new agents created with Pandora FMS Data Server
+autocreate_group 2
+
+# Set to 1 if want to autocreate agents with Pandora FMS Data Server, 
+# set to 0 to disable
+
+autocreate 1
+
+# max_log_size: Specify max size of Pandora FMS server log file (1MB by default). If
+# log file grows above this limit, is renamed to "pandora_server.log.old".
+
+max_log_size 65536
+
+# Send XML over Multicast channels async uptades on events and sync full tree 
+# info of tagged items (With custom ID) (only enterprise).
+
+# mcast_status_port 22222
+# mcast_status_group 224.1.1.1
+
+# mcast_change_port 11111
+# mcast_change_group 224.1.1.1 
+
+# max_queue_files (250 by default)
+# When server have more than max_queue_files in incoming directory, skips the read   
+# the directory to avoid filesystem overhead.
+
+max_queue_files 250
+
+# Use the XML file last modification time as timestamp.
+# use_xml_timestamp 1
+
+# Pandora FMS will autorestart itself each XXX seconds, use this if you experience problems with 
+# shutting down threads, or other stability problems.
+
+# auto_restart 86400
+
+# Pandora FMS will restart after restart_delay seconds on critical errors.
+
+# restart 0
+# restart_delay 60
+
+# More information about GIS Setup in /usr/share/pandora_server/util/gis.README
+# Flag to activate GIS (positional information for agents and maps) 
+# by default it is desactivated
+#activate_gis 0
+
+# Radius of error in meters to consider two gis locations as the same location.
+#location_error 50
+
+# Recon reverse geolocation mode [disabled, sql, file]
+#   disabled    The recon task doesn't try to geolocate the ip discovered.
+#   sql         The recon task trys to query the SQL database to geolocate the 
+#               ip discovered
+#   file        The recon task trys to find the geolocation information of the 
+#               ip discovered in the file indicated in the 
+#                recon_reverse_geolocation_file parameter 
+
+# recon_reverse_geolocation_mode disabled
+
+# Recon reverse geolocation file. This is the database with the reverse 
+# geolocation information using MaxMind GPL GeoLiteCity.dat format).
+#recon_reverse_geolocation_file /usr/local/share/GeoIP/GeoIPCity.dat
+
+# Radius (in meters) of the circle in where the agents will be place randomly 
+# when finded by a recon task. Center of the circle is guessed 
+# by geolocating the IP.
+#recon_location_scatter_radius 1000
+
+# Pandora Server self-monitoring (embedded agent) (by default disabled)
+#self_monitoring 1
+
+# Update parent from the agent xml
+#update_parent 1
diff --git a/pandora_server/FreeBSD/tentacle_server b/pandora_server/FreeBSD/tentacle_server
new file mode 100755
index 0000000000..e3f3e05f94
--- /dev/null
+++ b/pandora_server/FreeBSD/tentacle_server
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+# **********************************************************************
+# Tentacle Server Daemon launcher for FreeBSD
+# (c) 2010 Junichi Satoh <junichi@rworks.jp>
+#
+# **********************************************************************
+
+# PROVIDE: tentacle_server
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+
+# Add the following line to /etc/rc.conf to enable `tentacle_server':
+#
+# tentacle_server_enable="YES"
+#
+
+. "/etc/rc.subr"
+
+name="tentacle_server"
+rcvar=`set_rcvar`
+
+# read configuration and set defaults
+tentacle_server_enable=${tentacle_server_enable:-"NO"}
+tentacle_server_flags=${tentacle_server_flags:-"-a 0.0.0.0 -p 41121 -s /var/spool/pandora/data_in -d"}
+tentacle_server_user=${tentacle_server_user:-"pandora"}
+load_rc_config $name
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
+
+command=/usr/local/bin/${name}
+
+pidfile=/var/run/$name.pid
+start_postcmd=start_postcmd
+stop_postcmd=stop_postcmd
+
+procname="/usr/bin/perl"
+
+start_postcmd()
+{
+	TENTACLE_PID=`ps auxww | grep $command | grep -v grep | head -1 | awk '{ print $2 }'`
+	echo $TENTACLE_PID > $pidfile
+}
+
+stop_postcmd()
+{
+	rm -f $pidfile
+}
+
+run_rc_command "$1"
diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer
index ac182d8e50..78916a690d 100755
--- a/pandora_server/pandora_server_installer
+++ b/pandora_server/pandora_server_installer
@@ -1,7 +1,7 @@
-#!/bin/bash
+#!/bin/sh
 
 # Pandora FMS Server Installer (c) 2008-2010 Artica ST
-# Linux Version (generic), for SuSe and Debian/Ubuntu only
+# Linux/FreeBSD Version (generic), for SuSe, Debian/Ubuntu and FreeBSD only
 # other Linux distros could not work properly without modifications
 # Please see http://www.pandorafms.org
 # v3.1 Build 100223
@@ -43,29 +43,34 @@ get_distro () {
 		OS_VERSION=`cat /etc/fedora-release | cut -f 4 -d " "`
 		OS_VERSION="FEDORA $OS_VERSION"
 		LINUX_DISTRO=FEDORA
-	elif [ `uname -s` == "Darwin" ]
+	elif [ `uname -s` = "Darwin" ]
 	then
 		# For future reference, Darwin doesn't have /etc/init.d but uses LaunchDaemons
 		LINUX_DISTRO="Darwin"
 		OS_VERSION=`uname -r`
 		LINUX=NO
-	elif [ `uname -s` == "AIX" ]
+	elif [ `uname -s` = "AIX" ]
 	then
 		# For future reference, AIX doesn't have /etc/init.d
 		LINUX_DISTRO="AIX"
 		OS_VERSION=`uname -r`
 		LINUX=NO
-	elif [ `uname -s` == "SunOS" ]
+	elif [ `uname -s` = "SunOS" ]
 	then
 		# Some Solaris and other Unices don't have /etc/init.d, some have /usr/spool instead of /var/spool
 		LINUX_DISTRO="Solaris"
 		OS_VERSION=`uname -r`
 		LINUX=NO
-	elif [ `uname -s` == "Linux" ]
+	elif [ `uname -s` = "Linux" ]
 	then
 		# Test for Linux to make sure we're on Linux
 		LINUX_DISTRO="GENERIC"
 		OS_VERSION=`uname -r`
+	elif [ `uname -s` = "FreeBSD" ]
+	then
+		LINUX_DISTRO="FreeBSD"
+		OS_VERSION=`uname -r`
+		LINUX=NO
 	else
 		# Default to Linux is false, test for real Linux above - that way we don't assume we can just plunk down files everywhere
 		LINUX_DISTRO=`uname -s`
@@ -102,6 +107,20 @@ perl-TimeDate perl-XML-Simple perl-libwww-perl mysql-client"
 		echo " "
 		echo "	You also will need to install xprobe2 and wmiclient from rpm (download from our website)"
 		echo " "
+		echo "For FreeBSD do : "
+		echo " "
+		echo "  Install perl5.8 from ports with thread enabled."
+		echo "  (perl-5.8.x.pkg can not be used.)"
+		echo "  # cd /usr/ports/lang/perl5.8"
+		echo "  # make config"
+		echo "    -> Enable THREADS."
+		echo "  # make"
+		echo "  # make install"
+		echo " "
+		echo "  Install following tools from ports. Don't use packages."
+		echo "  Recommended: p5-DBI p5-Mail-Sendmail p5-NetAddr-IP p5-XML-Simple p5-Time-Format p5-HTML-Parser p5-Net-Traceroute-PurePerl p5-IO-Socket-Multicast p5-DBD-mysql"
+		echo "  Optional: nmap xprobe"
+		echo " "
 		echo "To get it from source through CPAN do"
 		echo " "
 		echo "	$ cpan Digest::MD5 Time::Local DBI XML::Simple IO::Socket Time::HiRes Time::Format NetAddr::IP Mail::Sendmail Net::Traceroute::PurePerl HTML::Entities"
@@ -115,12 +134,22 @@ perl-TimeDate perl-XML-Simple perl-libwww-perl mysql-client"
 		OS_VERSION=`echo $GET_DISTRO | cut -f 2 -d ":"`
 		LINUX=`echo $GET_DISTRO | cut -f 3 -d ":"`	
 	
-		if [ "$DISTRO" == "UBUNTU" ]
+		if [ "$DISTRO" = "UBUNTU" ]
 		then
 			echo "UBUNTU distribution detected"
-		elif [ "$DISTRO" == "SUSE" ]
+		elif [ "$DISTRO" = "SUSE" ]
 		then
 			echo "SUSE distribution detected"
+		elif [ "$DISTRO" = "FreeBSD" ]
+                then
+			echo "FreeBSD detected"
+			PANDORA_SPOOL=/var/spool/pandora
+			PANDORA_HOME=/usr/local/share/pandora_server
+			PANDORA_CFG_DIR=/usr/local/etc/pandora
+			PANDORA_LOG=/var/log/pandora
+			PANDORA_SERVER=/usr/local/etc/rc.d/pandora_server
+			TENTACLE_SERVER=/usr/local/etc/rc.d/tentacle_server
+			PANDORA_CFG_FILE=/usr/local/etc/pandora/pandora_server.conf
 		fi
 		
 		echo "Installing binaries and libraries"
@@ -135,23 +164,31 @@ perl-TimeDate perl-XML-Simple perl-libwww-perl mysql-client"
 				echo "ERROR compiling Pandora FMS Server from sources. Aborting"
 				exit 1
 			fi
-			ln -s /usr/local/bin/pandora_server /usr/bin
-			ln -s /usr/local/bin/pandora_exec /usr/bin		
+			if [ "$DISTRO" != "FreeBSD" ]
+			then
+				ln -s /usr/local/bin/pandora_server /usr/bin
+				ln -s /usr/local/bin/pandora_exec /usr/bin		
+			fi
 		fi
 
 		echo "Creating common Pandora FMS directories"
-		id pandora
+		id pandora 2> /dev/null
 		if [ $? -eq 0 ]; then
 			echo " "
 			echo "User pandora does exist, make sure the SSH directories are correct"
 		else
 			echo "Are you sure we can create a standard 'pandora' user locally? [y/N]"
 			read AREYOUSURE
-			if [ "$AREYOUSURE" == "y" ]; then
-				useradd pandora 
-				mkdir /home/pandora 2> /dev/null
-				mkdir /home/pandora/.ssh 2> /dev/null
-				chown -R pandora /home/pandora 
+			if [ "$AREYOUSURE" = "y" ]; then
+				if [ "$DISTRO" = "FreeBSD" ]
+				then
+					echo "pandora:41121:::::Pandora FMS:/home/pandora:/usr/sbin/nologin:" | adduser -f - -w no 2> /dev/null
+				else
+					useradd pandora 
+					mkdir /home/pandora 2> /dev/null
+					mkdir /home/pandora/.ssh 2> /dev/null
+					chown -R pandora /home/pandora 
+				fi
 			else
 				echo "Please create the 'pandora' user manually according to your authentication scheme then restart the installation"
 				echo "Aborting..."
@@ -166,17 +203,17 @@ perl-TimeDate perl-XML-Simple perl-libwww-perl mysql-client"
 		mkdir $PANDORA_LOG 2> /dev/null	
 
 		echo "Giving proper permission to /var/spool/pandora"
-		id -g www-data > /dev/null
+		id -g www-data 2> /dev/null
 		if [ $? -eq 0 ]
 		then
 			chown -R pandora:www-data $PANDORA_SPOOL
 		else
-			id -g www > /dev/null
+			id -g www 2> /dev/null
 			if [ $? -eq 0 ]
 			then
 				chown -R pandora:www $PANDORA_SPOOL
 			else
-				id -g apache > /dev/null
+				id -g apache 2> /dev/null
 				if [ $? -eq 0 ]
 				then
 					chown -R pandora:apache $PANDORA_SPOOL
@@ -188,7 +225,7 @@ perl-TimeDate perl-XML-Simple perl-libwww-perl mysql-client"
 		fi
 		
 		
-		echo "Creating setup directory in /etc/pandora"
+		echo "Creating setup directory in $PANDORA_CFG_DIR"
 		mkdir $PANDORA_CFG_DIR 2> /dev/null
 		if [ -e $PANDORA_CFG_FILE ]
 		then
@@ -196,25 +233,36 @@ perl-TimeDate perl-XML-Simple perl-libwww-perl mysql-client"
 			echo "Old installation detected, backing up pandora_server.conf.$ODFILENAMETMP"
 			mv $PANDORA_CFG_FILE $PANDORA_CFG_FILE.$OLDFILENAMETMP
 		fi
-		echo cp conf/pandora_server.conf $PANDORA_CFG_DIR
-		cp conf/pandora_server.conf $PANDORA_CFG_DIR
+		if [ "$DISTRO" = "FreeBSD" ]
+		then
+			echo cp FreeBSD/pandora_server.conf $PANDORA_CFG_DIR
+                	cp FreeBSD/pandora_server.conf $PANDORA_CFG_DIR
+		else
+			echo cp conf/pandora_server.conf $PANDORA_CFG_DIR
+			cp conf/pandora_server.conf $PANDORA_CFG_DIR
+		fi
 		chmod 770 $PANDORA_CFG_FILE
 
 		echo "Installing Pandora Server manual"
-		cp man/man1/pandora_server.1.gz /usr/share/man/man1
+		if [ "$DISTRO" = "FreeBSD" ]
+		then
+			cp man/man1/pandora_server.1.gz /usr/local/man/man1
+		else
+			cp man/man1/pandora_server.1.gz /usr/share/man/man1
+		fi
 		
-		if [ "$LINUX" == "YES" ]
+		if [ "$LINUX" = "YES" ]
 		then
 			echo "Copying the daemon script into /etc/init.d/pandora_server"
 			cp util/pandora_server /etc/init.d/		
 			
-			if [ "$DISTRO" == "UBUNTU" ] || [ "$DISTRO" == "DEBIAN" ]
+			if [ "$DISTRO" = "UBUNTU" ] || [ "$DISTRO" = "DEBIAN" ]
 			then
 			
 				echo "Linking startup script to /etc/rc2.d"
 				update-rc.d pandora_server defaults
 			else
-				if [ "$DISTRO" == "SUSE" ]
+				if [ "$DISTRO" = "SUSE" ]
 				then
 					echo "Creating startup daemons"
 					insserv pandora_server
@@ -229,6 +277,13 @@ perl-TimeDate perl-XML-Simple perl-libwww-perl mysql-client"
 					ln -s $PANDORA_SERVER /etc/rc.d/rc$INITLV.d/S90pandora_server
 				fi
 			fi
+		else
+			if [ "$DISTRO" = "FreeBSD" ]
+			then
+				echo "Copying the daemon script into $PANDORA_SERVER"
+				cp FreeBSD/pandora_server $PANDORA_SERVER 
+				chmod 555 $PANDORA_SERVER
+                        fi
 		fi
 
 		if [ -d /etc/logrotate.d ]; then
@@ -238,11 +293,11 @@ perl-TimeDate perl-XML-Simple perl-libwww-perl mysql-client"
 			echo "Please add a log rotation schedule manually to your log rotation daemon (if any)"
 		fi
 	
-		if [ "$LINUX" == "YES" ]
+		if [ "$LINUX" = "YES" ]
 		then
 			if [ "$SECOPT" != "--no-tentacle" ]
 			then
-				if [ "$DISTRO" == "UBUNTU" ] || [ "$DISTRO" == "DEBIAN" ]
+				if [ "$DISTRO" = "UBUNTU" ] || [ "$DISTRO" = "DEBIAN" ]
 				then
 					# Tentacle server install (Ubuntu)
 					echo "Installing tentacle server"
@@ -250,7 +305,7 @@ perl-TimeDate perl-XML-Simple perl-libwww-perl mysql-client"
 					cp util/tentacle_serverd $TENTACLE_SERVER
    				    update-rc.d tentacle_serverd defaults
 				else
-					if [ "$DISTRO" == "SUSE" ]
+					if [ "$DISTRO" = "SUSE" ]
 					then
 						echo "Creating Tentacle startup daemon"
 						cp bin/tentacle_server /usr/bin
@@ -268,9 +323,22 @@ perl-TimeDate perl-XML-Simple perl-libwww-perl mysql-client"
 				echo "Installing Tentacle Server manual"
 				cp man/man1/tentacle_server.1.gz /usr/share/man/man1
 			fi
+		else
+			if [ "$SECOPT" != "--no-tentacle" ]
+			then
+				if [ "$DISTRO" = "FreeBSD" ]
+				then
+					echo "Installing tentacle server"
+					cp bin/tentacle_server /usr/local/bin
+					cp FreeBSD/tentacle_server $TENTACLE_SERVER
+					chmod 555 $TENTACLE_SERVER
+					echo "Installing Tentacle Server manual"
+					cp man/man1/tentacle_server.1.gz /usr/local/man/man1
+				fi
+			fi
 		fi
 
-		echo "Creating Pandora FMS distribution directory in /usr/share/pandora_server"
+		echo "Creating Pandora FMS distribution directory in $PANDORA_HOME"
 		mkdir $PANDORA_HOME 2> /dev/null
 		cp -R util $PANDORA_HOME
 		
@@ -281,11 +349,23 @@ perl-TimeDate perl-XML-Simple perl-libwww-perl mysql-client"
 			echo "perl /usr/share/pandora_server/util/pandora_db.pl /etc/pandora/pandora_server.conf" >> /etc/cron.daily/pandora_db	
 			chmod +x /etc/cron.daily/pandora_db
 		else
-			echo "You're probably not using cron for automatic scheduling. You should schedule the following command to run frequently (daily) on your master server:"
-			echo "	perl /usr/share/pandora_server/util/pandora_db.pl /etc/pandora/pandora_server.conf"
+			if [ "$DISTRO" = "FreeBSD" ]
+			then
+				grep pandora_db.pl /etc/crontab > /dev/null 2>&1
+				if [ $? -ne 0 ]
+				then
+					echo "# Pandora FMS" >> /etc/crontab
+					echo "2 0       *       *       *       root    perl /usr/local/share/pandora_server/util/pandora_db.pl /usr/local/etc/pandora/pandora_server.conf" >> /etc/crontab
+				else
+					echo "The crontab for pandora_db.pl is already configured."
+				fi
+			else
+				echo "You're probably not using cron for automatic scheduling. You should schedule the following command to run frequently (daily) on your master server:"
+				echo "	perl /usr/share/pandora_server/util/pandora_db.pl /etc/pandora/pandora_server.conf"
+			fi
 		fi
 		echo
-		echo "Now you have to edit your /etc/pandora/pandora_server.conf file to change the database password (default is pandora) with the one set in include/config.php of your Pandora FMS Console."
+		echo "Now you have to edit your $PANDORA_CFG_FILE file to change the database password (default is pandora) with the one set in include/config.php of your Pandora FMS Console."
 		echo "After setting password you can start your Pandora FMS Server!!"
 		rm output
 
@@ -294,15 +374,58 @@ perl-TimeDate perl-XML-Simple perl-libwww-perl mysql-client"
 			echo "Managing Pandora FMS logs with logrotate (Distro independent)"
 			cp -aRf util/pandora_logrotate /etc/logrotate.d/pandora
 		fi
+
+		if [ "$DISTRO" = "FreeBSD" ]
+		then
+			echo " "
+			echo "Define 'pandora_server_enable=\"YES\"' in /etc/rc.conf to enable pandora server daemon."
+			echo "Define 'tentacle_server_enable=\"YES\"' in /etc/rc.conf to enable tentacle server daemon."
+		fi
 	fi
 
 }
 
+uninstall_freebsd () {
+	PANDORA_SPOOL=/var/spool/pandora
+	PANDORA_HOME=/usr/local/share/pandora_server
+	PANDORA_CFG_DIR=/usr/local/etc/pandora
+	PANDORA_LOG=/var/log/pandora
+	PANDORA_SERVER=/usr/local/etc/rc.d/pandora_server
+	TENTACLE_SERVER=/usr/local/etc/rc.d/tentacle_server
+	PANDORA_CFG_FILE=/usr/local/etc/pandora/pandora_server.conf
+	TMP_CRONTAB=/tmp/crontab.tmp
+
+	echo "Removing Pandora Servers"
+	rm -Rf $PANDORA_SPOOL/data_in/
+
+	echo "If the user Pandora is not being used for any other operations, please delete using the following commands:"
+	echo "  rmuser pandora"
+
+	rm -Rf $PANDORA_LOG 2> /dev/null
+	rm -Rf $PANDORA_CFG_FILE 2> /dev/null
+	rm -Rf $PANDORA_SERVER 2> /dev/null
+	rm -Rf $PANDORA_HOME
+	rm -Rf $PANDORA_SERVER
+	rm -Rf $TENTACLE_SERVER
+
+	cat /etc/crontab | grep -v "Pandora FMS" | grep -v "pandora_db.pl" > $TMP_CRONTAB
+	cp $TMP_CRONTAB /etc/crontab
+	rm $TMP_CRONTAB
+
+	echo "Done"
+	exit
+}
+
 uninstall () {
 	GET_DISTRO="`get_distro`"
 	DISTRO=`echo $GET_DISTRO | cut -f 1 -d ":"`
 	if [ "`uname -s`" != "Linux" ]; then
+		if [ "$DISTRO" = "FreeBSD" ]
+		then
+			uninstall_freebsd
+		else
 			echo "This is not a Linux-based distro. Uninstaller is currently not working for your OS"
+		fi
 	fi
 	echo "Removing Pandora Servers"
 	rm -Rf $PANDORA_SPOOL/data_in/
@@ -323,7 +446,7 @@ uninstall () {
 	rm -Rf $PANDORA_HOME
 	rm -Rf /etc/cron.daily/pandora_db
 	rm -Rf /etc/logrotate.d/pandora
-	if [ "$DISTRO" == "UBUNTU" ] || [ "$DISTRO" == "DEBIAN" ]
+	if [ "$DISTRO" = "UBUNTU" ] || [ "$DISTRO" = "DEBIAN" ]
 	then
 		update-rc.d -f pandora_server remove
 		update-rc.d -f tentacle_serverd remove