resources.bin.contrib.karaf-service.sh Maven / Gradle / Ivy
#!/usr/bin/env 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.
#
function usage {
cat <<-END >&2
USAGE: $0
-k KARAF_SERVICE_PATH # Karaf installation path
-d KARAF_SERVICE_DATA # Karaf data path (default to \${KARAF_SERVICE_PATH}/data)
-c KARAF_SERVICE_CONF # Karaf configuration file (default to \${KARAF_SERVICE_PATH/etc/\${KARAF_SERVICE_NAME}.conf
-t KARAF_SERVICE_ETC # Karaf etc path (default to \${KARAF_SERVICE_PATH/etc}
-p KARAF_SERVICE_PIDFILE # Karaf pid path (default to \${KARAF_SERVICE_DATA}/\${KARAF_SERVICE_NAME}.pid)
-n KARAF_SERVICE_NAME # Karaf service name (default karaf)
-e KARAF_ENV # Karaf environment variable (can be repeated)
-u KARAF_SERVICE_USER # Karaf user
-g KARAF_SERVICE_GROUP # Karaf group (default \${KARAF_SERVICE_USER)
-l KARAF_SERVICE_LOG # Karaf console log (default to \${KARAF_SERVICE_DATA}/log/\${KARAF_SERVICE_NAME}-console.log)
-f KARAF_SERVICE_TEMPLATE # Template file to use
-x KARAF_SERVICE_EXECUTABLE # Karaf executable name (defaul karaf, should support daemon and stop commands)
-h # this usage message
END
exit
}
CONTRIB_FOLDER=`dirname "$0"`
CONF_TEMPLATE="${CONTRIB_FOLDER}/karaf-service-template.conf"
SYSTEMD_TEMPLATE="${CONTRIB_FOLDER}/karaf-service-template.systemd"
SYSTEMD_TEMPLATE_INSTANCES="${CONTRIB_FOLDER}/karaf-service-template.systemd-instances"
INIT_TEMPLATE="${CONTRIB_FOLDER}/karaf-service-template.init"
INIT_REDHAT_TEMPLATE="${CONTRIB_FOLDER}/karaf-service-template.init-redhat"
INIT_DEBIAN_TEMPLATE="${CONTRIB_FOLDER}/karaf-service-template.init-debian"
SOLARIS_SMF_TEMPLATE="${CONTRIB_FOLDER}/karaf-service-template.solaris-smf"
################################################################################
#
################################################################################
KARAF_ENV=()
while getopts k:d:c:p:n:u:g:l:t:e:f:x:h opt
do
case $opt in
k) export KARAF_SERVICE_PATH="$OPTARG" ;;
d) export KARAF_SERVICE_DATA="$OPTARG" ;;
c) export KARAF_SERVICE_CONF="$OPTARG" ;;
p) export KARAF_SERVICE_PIDFILE="$OPTARG" ;;
n) export KARAF_SERVICE_NAME="$OPTARG" ;;
u) export KARAF_SERVICE_USER="$OPTARG" ;;
g) export KARAF_SERVICE_GROUP="$OPTARG" ;;
l) export KARAF_SERVICE_LOG="$OPTARG" ;;
t) export KARAF_SERVICE_ETC="$OPTARG" ;;
f) export KARAF_SERVICE_TEMPLATE="$OPTARG" ;;
x) export KARAF_SERVICE_EXECUTABLE="$OPTARG" ;;
e) KARAF_ENV+=("$OPTARG") ;;
h|?) usage ;;
esac
done
shift $(( $OPTIND - 1 ))
if [[ ! $KARAF_SERVICE_PATH ]]; then
echo "Warning, KARAF_SERVICE_PATH is required"
usage
fi
if [[ ! $KARAF_SERVICE_DATA ]]; then
export KARAF_SERVICE_DATA="${KARAF_SERVICE_PATH}/data"
fi
if [[ ! $KARAF_SERVICE_ETC ]]; then
export KARAF_SERVICE_ETC="${KARAF_SERVICE_PATH}/etc"
fi
if [[ ! $KARAF_SERVICE_NAME ]]; then
export KARAF_SERVICE_NAME="karaf"
fi
if [[ ! $KARAF_SERVICE_CONF ]]; then
export KARAF_SERVICE_CONF="${KARAF_SERVICE_PATH}/etc/${KARAF_SERVICE_NAME}.conf"
fi
if [[ ! $KARAF_SERVICE_PIDFILE ]]; then
export KARAF_SERVICE_PIDFILE="${KARAF_SERVICE_DATA}/${KARAF_SERVICE_NAME}.pid"
fi
if [[ ! $KARAF_SERVICE_LOG ]]; then
export KARAF_SERVICE_LOG="${KARAF_SERVICE_DATA}/log/${KARAF_SERVICE_NAME}-console.log"
fi
if [[ ! $KARAF_SERVICE_USER ]]; then
export KARAF_SERVICE_USER="root"
fi
if [[ ! $KARAF_SERVICE_GROUP ]]; then
export KARAF_SERVICE_GROUP="${KARAF_SERVICE_USER}"
fi
if [[ ! $KARAF_SERVICE_EXECUTABLE ]]; then
export KARAF_SERVICE_EXECUTABLE="karaf"
fi
################################################################################
#
################################################################################
function generate_service_descriptor {
echo "Writing service file \"$2\""
perl -p -e 's/\$\{([^}]+)\}/defined $ENV{$1} ? $ENV{$1} : $&/eg' < "$1" > "$2"
if [ $# -eq 4 ]; then
echo "Writing service configuration file \"$4\""
perl -p -e 's/\$\{([^}]+)\}/defined $ENV{$1} ? $ENV{$1} : $&/eg' < "$3" > "$4"
for var in "${KARAF_ENV[@]}"; do
echo "${var}" >> "$4"
done
fi
}
################################################################################
#
################################################################################
if [[ ! $KARAF_SERVICE_TEMPLATE ]]; then
case $(uname | tr [:upper:] [:lower:]) in
sunos)
# add KARAF_ENV vars to envirioment
for var in "${KARAF_ENV[@]}"; do
export $var
done
# Default java path if not set
if [[ ! $JAVA_HOME ]]; then
export JAVA_HOME=/usr/java
fi
# escape spaces in path
export KARAF_SERVICE_PATH="$(echo $KARAF_SERVICE_PATH | sed 's/ /\\ /g')"
export KARAF_SERVICE_DATA="$(echo $KARAF_SERVICE_DATA | sed 's/ /\\ /g')"
export KARAF_SERVICE_CONF="$(echo $KARAF_SERVICE_CONF | sed 's/ /\\ /g')"
export KARAF_SERVICE_PIDFILE="$(echo $KARAF_SERVICE_PIDFILE | sed 's/ /\\ /g')"
generate_service_descriptor \
"$SOLARIS_SMF_TEMPLATE" \
"${PWD}/${KARAF_SERVICE_NAME}.xml"
;;
linux)
if [ -d /run/systemd/system ]; then
generate_service_descriptor \
"$SYSTEMD_TEMPLATE" \
"${PWD}/${KARAF_SERVICE_NAME}.service" \
"${CONF_TEMPLATE}" \
"${KARAF_SERVICE_CONF}"
generate_service_descriptor \
"$SYSTEMD_TEMPLATE_INSTANCES" \
"${PWD}/${KARAF_SERVICE_NAME}@.service"
elif [ -f /etc/redhat-release ]; then
generate_service_descriptor \
"$INIT_REDHAT_TEMPLATE" \
"${PWD}/${KARAF_SERVICE_NAME}" \
"${CONF_TEMPLATE}" \
"${KARAF_SERVICE_CONF}"
chmod 755 "${PWD}/${KARAF_SERVICE_NAME}"
elif [ -f /etc/debian-release ] || [ -f /etc/debian_version ]; then
generate_service_descriptor \
"$INIT_DEBIAN_TEMPLATE" \
"${PWD}/${KARAF_SERVICE_NAME}" \
"${CONF_TEMPLATE}" \
"${KARAF_SERVICE_CONF}"
chmod 755 "${PWD}/${KARAF_SERVICE_NAME}"
fi
;;
*)
generate_service_descriptor \
"$INIT_TEMPLATE" \
"${PWD}/${KARAF_SERVICE_NAME}" \
"${CONF_TEMPLATE}" \
"${KARAF_SERVICE_CONF}"
chmod 755 "${PWD}/${KARAF_SERVICE_NAME}"
;;
esac
else
generate_service_descriptor \
"$KARAF_SERVICE_TEMPLATE" \
"${PWD}/${KARAF_SERVICE_NAME}" \
"${CONF_TEMPLATE}" \
"${KARAF_SERVICE_CONF}"
fi