This uses our standard buildpack, but each module must get a custom .blazar.yaml to pass in required properties to the build. One can distribute that .blazar.yaml using build-scripts/copy_blazar_yaml.sh. In order to minimize the duplication, most of the customizations are consolidated in build-scripts/prepare_environment.sh. The RPM build is hooked into the standard build hbase-assembly, as a post-build step. The RPM build scripts in hbase-assembly/rpm-build handle turning the assembled tar.gz into multiple RPMs. We required some minor changes to the descriptor in hbase-assembly to account for the fact that our build processes each module independently instead of as a single reactor build. As a result, moduleSet does not work, so moduleSet usages were converted to dependencySet.
312 lines
8.3 KiB
Bash
312 lines
8.3 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright ownership.
|
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
|
# (the "License"); you may not use this file except in compliance with
|
|
# the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# This is a poor man's templating engine for generating init.d scripts to
|
|
# support all the Apache services that Bigtop distro has. An actual init.d
|
|
# script gets generate via running this script under bash and giving it
|
|
# a mandatory argument of a file containing the configuration for the service.
|
|
# The argument file should be a valid piece of bash code since it gets directly
|
|
# source into this template. E.g.
|
|
# $ bash ./init.d.tmpl hadoop-hdfs-namenode.svc rpm hadoop-hdfs-namenode
|
|
#
|
|
# You must declare the following in your .svc configuration file:
|
|
# DAEMON="name of the resulting init.d script"
|
|
# DESC="Free form human readable description of the service"
|
|
# EXEC_PATH="path to the upstream daemon management script"
|
|
# SVC_USER="user to run this service as"
|
|
# DAEMON_FLAGS="flags to be passed to the $EXEC_PATH"
|
|
# WORKING_DIR="working directory to cd into before starting the daemon"
|
|
# CONF_DIR="path to the configuration directory"
|
|
# PIDFILE="file holding a PID of the running daemon"
|
|
# LOCKFILE="file signifying the service lock"
|
|
#
|
|
# CHKCONFIG="chkconfig(8) registration signature"
|
|
# INIT_DEFAULT_START="run levels to use"
|
|
# INIT_DEFAULT_STOP="run levels not to use ;-)"
|
|
#
|
|
# You can, also, override parts of the generated init.d script by providing
|
|
# function definitions for: generate_start, generate_stop, generate_functions, and generate_extra_commands.
|
|
# See the default implemenations below and feel free to customize. Also look
|
|
# for exising .svc files in common to see how different services are tweaking
|
|
# the defaults.
|
|
#
|
|
# Of course, if this whole templating thing grows too big we might need to
|
|
# consider a real templating engine (I have played with m4, but it seems
|
|
# qutie brittle when used for manipulating pieces of the shell code -- think
|
|
# $0 the like).
|
|
|
|
if [ $# -lt 3 ] ; then
|
|
echo "Usage: ${BASH_SOURCE-0} service.definition.svc rpm|deb init.d.script"
|
|
exit 1
|
|
fi
|
|
|
|
# Override anything necessary for supported systems
|
|
case "$2" in
|
|
"deb" )
|
|
# The defaults will work well on Debian-based systems
|
|
;;
|
|
"rpm" )
|
|
# On RedHat, SuSE and Mageia run-level 2 is networkless, hence excluding it
|
|
CHKCONFIG="345 85 15"
|
|
INIT_DEFAULT_START="3 4 5"
|
|
INIT_DEFAULT_STOP="0 1 2 6"
|
|
;;
|
|
"*" )
|
|
;;
|
|
esac
|
|
|
|
# Create the init script, make it executable, and send stdout to it
|
|
mkdir -p `dirname $3`
|
|
touch $3
|
|
chmod 0755 $3
|
|
exec > $3
|
|
|
|
generate_start() {
|
|
|
|
cat <<'__EOT__'
|
|
|
|
start() {
|
|
[ -x $EXEC_PATH ] || exit $ERROR_PROGRAM_NOT_INSTALLED
|
|
[ -d $CONF_DIR ] || exit $ERROR_PROGRAM_NOT_CONFIGURED
|
|
|
|
runuser -s /bin/bash $SVC_USER -c "cd $WORKING_DIR && $EXEC_PATH --config '$CONF_DIR' start $DAEMON_FLAGS"
|
|
|
|
# Some processes are slow to start
|
|
sleep $SLEEP_TIME
|
|
checkstatusofproc
|
|
RETVAL=$?
|
|
|
|
if [ $RETVAL -eq $STATUS_RUNNING ]; then
|
|
touch $LOCKFILE
|
|
log_success_msg "Started ${DESC}: "
|
|
else
|
|
log_failure_msg "Failed to start ${DESC}. Return value: $RETVAL"
|
|
fi
|
|
return $RETVAL
|
|
}
|
|
|
|
__EOT__
|
|
|
|
}
|
|
|
|
generate_stop() {
|
|
|
|
cat <<'__EOT__'
|
|
|
|
stop() {
|
|
start_daemon $EXEC_PATH --config "$CONF_DIR" stop $DAEMON_FLAGS
|
|
RETVAL=$?
|
|
|
|
if [ $RETVAL -eq $RETVAL_SUCCESS ]; then
|
|
log_success_msg "Stopped ${DESC}: "
|
|
rm -f $LOCKFILE $PIDFILE
|
|
else
|
|
log_failure_msg "Failed to stop ${DESC}. Return value: $RETVAL."
|
|
fi
|
|
}
|
|
|
|
__EOT__
|
|
|
|
}
|
|
|
|
generate_functions() {
|
|
:
|
|
}
|
|
|
|
generate_extra_commands() {
|
|
|
|
cat <<'__EOT__'
|
|
*)
|
|
echo $"Usage: $0 {start|stop|status|restart|try-restart|condrestart|force-reload}"
|
|
exit 1
|
|
__EOT__
|
|
|
|
}
|
|
|
|
###################################################################
|
|
# Some reasonable defaults for the run-level settings, these are
|
|
# tweaked on a per-OS basis from the SPEC/rules files that call us
|
|
# and can be further tweaked inside of individual .svc templates
|
|
CHKCONFIG=${CHKCONFIG:-"2345 85 15"}
|
|
INIT_DEFAULT_START=${INIT_DEFAULT_START:-"2 3 4 5"}
|
|
INIT_DEFAULT_STOP=${INIT_DEFAULT_STOP:-"0 1 6"}
|
|
|
|
###################################################################
|
|
# NOTE how we are sourcing the argument here so that a user-defined
|
|
# settings have a chance to override the default values for
|
|
# generate_start, generate_stop, generate_functions and generate_extra_commands. If you
|
|
# ever want to make this template even more flexible -- define the
|
|
# default values above this line
|
|
. $1
|
|
|
|
cat <<__EOT__
|
|
#!/bin/bash
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright ownership.
|
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
|
# (the "License"); you may not use this file except in compliance with
|
|
# the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
# Starts a $DESC
|
|
#
|
|
# chkconfig: $CHKCONFIG
|
|
# description: $DESC
|
|
# pidfile: $PIDFILE
|
|
### BEGIN INIT INFO
|
|
# Provides: $DAEMON
|
|
# Short-Description: $DESC
|
|
# Default-Start: $INIT_DEFAULT_START
|
|
# Default-Stop: $INIT_DEFAULT_STOP
|
|
# Required-Start: \$syslog \$remote_fs
|
|
# Required-Stop: \$syslog \$remote_fs
|
|
# Should-Start:
|
|
# Should-Stop:
|
|
### END INIT INFO
|
|
|
|
. /lib/lsb/init-functions
|
|
DEFAULTS_DIR=\${DEFAULTS_DIR-/etc/default}
|
|
[ -n "\${DEFAULTS_DIR}" -a -r \${DEFAULTS_DIR}/hadoop ] && . \${DEFAULTS_DIR}/hadoop
|
|
[ -n "\${DEFAULTS_DIR}" -a -r \${DEFAULTS_DIR}/$DAEMON ] && . \${DEFAULTS_DIR}/$DAEMON
|
|
|
|
RETVAL_SUCCESS=0
|
|
|
|
STATUS_RUNNING=0
|
|
STATUS_DEAD=1
|
|
STATUS_DEAD_AND_LOCK=2
|
|
STATUS_NOT_RUNNING=3
|
|
STATUS_OTHER_ERROR=102
|
|
|
|
|
|
ERROR_PROGRAM_NOT_INSTALLED=5
|
|
ERROR_PROGRAM_NOT_CONFIGURED=6
|
|
|
|
|
|
RETVAL=0
|
|
SLEEP_TIME=5
|
|
PROC_NAME="${PROC_NAME:-java}"
|
|
|
|
DAEMON="$DAEMON"
|
|
DESC="$DESC"
|
|
EXEC_PATH="$EXEC_PATH"
|
|
SVC_USER="$SVC_USER"
|
|
DAEMON_FLAGS="$DAEMON_FLAGS"
|
|
CONF_DIR="$CONF_DIR"
|
|
CONF_FILE="$CONF_FILE"
|
|
LOGFILE="$LOGFILE"
|
|
PIDFILE="$PIDFILE"
|
|
LOCKDIR="/var/lock/subsys"
|
|
LOCKFILE="\$LOCKDIR/$DAEMON"
|
|
WORKING_DIR="${WORKING_DIR:-~/}"
|
|
|
|
install -d -m 0755 -o $SVC_USER -g $SVC_USER $(dirname $PIDFILE) 1>/dev/null 2>&1 || :
|
|
[ -d "\$LOCKDIR" ] || install -d -m 0755 \$LOCKDIR 1>/dev/null 2>&1 || :
|
|
__EOT__
|
|
|
|
generate_functions
|
|
generate_start
|
|
generate_stop
|
|
|
|
cat <<'__EOT__'
|
|
restart() {
|
|
stop
|
|
start
|
|
}
|
|
|
|
checkstatusofproc(){
|
|
pidofproc -p $PIDFILE $PROC_NAME > /dev/null
|
|
}
|
|
|
|
checkstatus(){
|
|
checkstatusofproc
|
|
status=$?
|
|
case "$status" in
|
|
$STATUS_RUNNING)
|
|
log_success_msg "${DESC} is running"
|
|
;;
|
|
$STATUS_DEAD)
|
|
log_failure_msg "${DESC} is dead and pid file exists"
|
|
;;
|
|
$STATUS_DEAD_AND_LOCK)
|
|
log_failure_msg "${DESC} is dead and lock file exists"
|
|
;;
|
|
$STATUS_NOT_RUNNING)
|
|
log_failure_msg "${DESC} is not running"
|
|
;;
|
|
*)
|
|
log_failure_msg "${DESC} status is unknown"
|
|
;;
|
|
esac
|
|
return $status
|
|
}
|
|
|
|
condrestart(){
|
|
[ -e $LOCKFILE ] && restart || :
|
|
}
|
|
|
|
check_for_root() {
|
|
if [ $(id -ur) -ne 0 ]; then
|
|
echo 'Error: root user required'
|
|
echo
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
service() {
|
|
case "$1" in
|
|
start)
|
|
check_for_root
|
|
start
|
|
;;
|
|
stop)
|
|
check_for_root
|
|
stop
|
|
;;
|
|
status)
|
|
checkstatus
|
|
RETVAL=$?
|
|
;;
|
|
restart|force-reload)
|
|
check_for_root
|
|
restart
|
|
;;
|
|
condrestart|try-restart)
|
|
check_for_root
|
|
condrestart
|
|
;;
|
|
__EOT__
|
|
|
|
generate_extra_commands
|
|
|
|
cat <<'__EOT__'
|
|
esac
|
|
}
|
|
|
|
service "$@"
|
|
|
|
exit $RETVAL
|
|
__EOT__
|