Skip to content

Commit

Permalink
Preliminary Debian support
Browse files Browse the repository at this point in the history
Added a new init.d file for Debian, which requires the "daemon" package.T
This will be automatically required on Debian systems.
  • Loading branch information
dig412 authored and jhoblitt committed May 23, 2015
1 parent ed0e4dc commit b0b97a0
Show file tree
Hide file tree
Showing 4 changed files with 246 additions and 2 deletions.
10 changes: 9 additions & 1 deletion manifests/config.pp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@
validate_string($java)
validate_string($jar_name)

case $::osfamily {
'debian': {
package { "daemon":
ensure => "installed"
}
}
}

# prog is the 'name' of the init.d script.
$prog = "selenium${name}"

Expand All @@ -27,7 +35,7 @@
owner => 'root',
group => 'root',
mode => '0755',
content => template("${module_name}/init.d/selenium.erb"),
content => template("${module_name}/init.d/${selenium::params::service_template}"),
} ~>
service { $prog:
ensure => running,
Expand Down
7 changes: 6 additions & 1 deletion manifests/params.pp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@
$download_timeout = '90'

case $::osfamily {
'redhat': {}
'redhat': {
$service_template = 'redhat.selenium.erb'
}
'debian': {
$service_template = 'debian.selenium.erb'
}
default: {
fail("Module ${module_name} is not supported on ${::operatingsystem}")
}
Expand Down
231 changes: 231 additions & 0 deletions templates/init.d/debian.selenium.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,231 @@
#!/bin/bash
# /etc/init.d/seleniumserver
# debian-compatible seleniumserver startup script.
# Amelia A Lewis <[email protected]>
#
### BEGIN INIT INFO
# Provides: seleniumserver
# Required-Start: $remote_fs $syslog $network
# Required-Stop: $remote_fs $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start seleniumserver at boot time
# Description: Controls the selenium server engine.
### END INIT INFO

PATH=/bin:/usr/bin:/sbin:/usr/sbin

DESC="Selenium Remote Control Server"
NAME='<%= @prog %>'
SCRIPTNAME=/etc/init.d/$NAME
PIDFILE=/var/run/$NAME/$NAME.pid
SELENIUM_USER='<%= @user %>'
SELENIUM_INSTALL_ROOT='<%= @install_root %>'
SELENIUM_JAR_NAME='<%= @jar_name %>'
SELENIUM_JAR="${SELENIUM_INSTALL_ROOT}/jars/${SELENIUM_JAR_NAME}"
SELENIUM_LOG_NAME='<%= @name %>'
SELENIUM_LOG="${SELENIUM_INSTALL_ROOT}/log/${SELENIUM_LOG_NAME}_stdout.log"
SELENIUM_ERROR_LOG="${SELENIUM_INSTALL_ROOT}/log/${SELENIUM_LOG_NAME}_stderr.log"
SELENIUM_DISPLAY='<%= @display %>'
SELENIUM_OPTIONS='<%= @options %>'
HTTP_PORT=4444
SELENIUM_ARGS="-port $HTTP_PORT"
SELENIUM_JAVA='<%= @java %>'

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

DAEMON=/usr/bin/daemon
DAEMON_ARGS="--name=$NAME --inherit --output=$SELENIUM_LOG --pidfile=$PIDFILE --env='DISPLAY=${SELENIUM_DISPLAY}'"

SU=/bin/su
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# load environments
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
elif [ -r /etc/environment ]; then
. /etc/environment
export LANG LANGUAGE
fi

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

# Make sure we run as root, since setting the max open files through
# ulimit requires root access
if [ `id -u` -ne 0 ]; then
echo "The $NAME init script can only be run as root"
exit 1
fi

check_tcp_port() {
local service=$1
local assigned=$2
local default=$3

if [ -n "$assigned" ]; then
port=$assigned
else
port=$default
fi

count=`netstat --listen --numeric-ports | grep \:$port[[:space:]] | grep -c . `

if [ $count -ne 0 ]; then
echo "The selected $service port ($port) seems to be in use by another program "
echo "Please select another port to use for $NAME"
return 1
fi
}

#
# Function that starts the daemon/service
#
do_start()
{
# the default location is /var/run/seleniumserver/seleniumserver.pid but the parent directory needs to be created
mkdir `dirname $PIDFILE` > /dev/null 2>&1 || true
chown $SELENIUM_USER `dirname $PIDFILE`
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
$DAEMON $DAEMON_ARGS --running && return 1

# Verify that the seleniumserver port is not already in use
check_tcp_port "http" "$HTTP_PORT" "4444" || return 1

# --user in daemon doesn't prepare environment variables like HOME, USER, LOGNAME or USERNAME,
# so we let su do so for us now
$SU -l $SELENIUM_USER --shell=/bin/bash -c "$DAEMON $DAEMON_ARGS -- java -jar ${SELENIUM_JAR} ${SELENIUM_OPTIONS} > ${SELENIUM_LOG} 2> ${SELENIUM_ERROR_LOG}" || return 2
}

#
# Verify that all seleniumserver processes have been shutdown
# and if not, then do killall for them
#
get_running()
{
return `ps -U $SELENIUM_USER --no-headers -f | egrep -e '(java|daemon)' | grep -c . `
}

force_stop()
{
get_running
if [ $? -ne 0 ]; then
killall -u $SELENIUM_USER java daemon || return 3
fi
}

# Get the status of the daemon process
get_daemon_status()
{
$DAEMON $DAEMON_ARGS --running || return 1
}

#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
get_daemon_status
case "$?" in
0)
$DAEMON $DAEMON_ARGS --stop || return 2
# wait for the process to really terminate
for n in 1 2 3 4 5; do
sleep 1
$DAEMON $DAEMON_ARGS --running || break
done
if get_daemon_status; then
force_stop || return 3
fi
;;
*)
force_stop || return 3
;;
esac

# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return 0
}

case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
status)
get_daemon_status
case "$?" in
0) echo "$DESC is running with the pid `cat $PIDFILE`";;
*)
get_running
procs=$?
if [ $procs -eq 0 ]; then
echo -n "$DESC is not running"
if [ -f $PIDFILE ]; then
echo ", but the pidfile ($PIDFILE) still exists"
else
echo
fi
else
echo "$procs instances of seleniumserver are running at the moment"
echo "but the pidfile $PIDFILE is missing"
fi
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac

exit 0
File renamed without changes.

0 comments on commit b0b97a0

Please sign in to comment.