NIFI-2063 Adjusting handling of service install

by using script that delegates to installed nifi.sh at NIFI_HOME. Prohibit installation of service for Cygwin and Darwin environments that are guaranteed to not support it.

This closes #561

Signed-off-by: James Wing <jvwing@gmail.com>
This commit is contained in:
Aldrin Piri 2016-06-22 13:09:40 -04:00 committed by James Wing
parent 521ce63cc3
commit baed85fa3d
1 changed files with 67 additions and 21 deletions

View File

@ -14,10 +14,6 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
#
# chkconfig: 2345 20 80
# description: Apache NiFi is a dataflow system based on the principles of Flow-Based Programming.
#
# Script structure inspired from Apache Karaf and other Apache projects with similar startup approaches # Script structure inspired from Apache Karaf and other Apache projects with similar startup approaches
@ -142,23 +138,73 @@ init() {
install() { install() {
detectOS
if [ "${darwin}" = "true" ] || [ "${cygwin}" = "true" ]; then
echo 'Installing Apache NiFi as a service is not supported on OS X or Cygwin.'
exit 1
fi
SVC_NAME=nifi SVC_NAME=nifi
if [ "x$2" != "x" ] ; then if [ "x$2" != "x" ] ; then
SVC_NAME=$2 SVC_NAME=$2
fi fi
SVC_FILE="/etc/init.d/${SVC_NAME}" initd_dir='/etc/init.d'
cp "$0" "${SVC_FILE}" SVC_FILE="${initd_dir}/${SVC_NAME}"
sed -i s:NIFI_HOME=.*:NIFI_HOME="${NIFI_HOME}": "${SVC_FILE}"
sed -i s:PROGNAME=.*:PROGNAME="${SCRIPT_NAME}": "${SVC_FILE}" if [ ! -w "${initd_dir}" ]; then
echo "Current user does not have write permissions to ${initd_dir}. Cannot install NiFi as a service."
exit 1
fi
# Create the init script, overwriting anything currently present
cat <<SERVICEDESCRIPTOR > ${SVC_FILE}
#!/bin/sh
#
# 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.
#
# chkconfig: 2345 20 80
# description: Apache NiFi is a dataflow system based on the principles of Flow-Based Programming.
#
# Make use of the configured NIFI_HOME directory and pass service requests to the nifi.sh executable
NIFI_HOME=${NIFI_HOME}
bin_dir=\${NIFI_HOME}/bin
nifi_executable=\${bin_dir}/nifi.sh
\${nifi_executable} "\$@"
SERVICEDESCRIPTOR
if [ ! -f "${SVC_FILE}" ]; then
echo "Could not create service file ${SVC_FILE}"
exit 1
fi
# Provide the user execute access on the file
chmod u+x ${SVC_FILE}
rm -f "/etc/rc2.d/S65${SVC_NAME}" rm -f "/etc/rc2.d/S65${SVC_NAME}"
ln -s "/etc/init.d/${SVC_NAME}" "/etc/rc2.d/S65${SVC_NAME}" ln -s "/etc/init.d/${SVC_NAME}" "/etc/rc2.d/S65${SVC_NAME}" || { echo "Could not create link /etc/rc2.d/S65${SVC_NAME}"; exit 1; }
rm -f "/etc/rc2.d/K65${SVC_NAME}" rm -f "/etc/rc2.d/K65${SVC_NAME}"
ln -s "/etc/init.d/${SVC_NAME}" "/etc/rc2.d/K65${SVC_NAME}" ln -s "/etc/init.d/${SVC_NAME}" "/etc/rc2.d/K65${SVC_NAME}" || { echo "Could not create link /etc/rc2.d/K65${SVC_NAME}"; exit 1; }
echo "Service ${SVC_NAME} installed" echo "Service ${SVC_NAME} installed"
} }
run() { run() {
BOOTSTRAP_CONF_DIR="${NIFI_HOME}/conf" BOOTSTRAP_CONF_DIR="${NIFI_HOME}/conf"
BOOTSTRAP_CONF="${BOOTSTRAP_CONF_DIR}/bootstrap.conf"; BOOTSTRAP_CONF="${BOOTSTRAP_CONF_DIR}/bootstrap.conf";