#    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.

#
# Karaf Service
#
KARAF_SERVICE_PATH="${KARAF_SERVICE_PATH}"
KARAF_SERVICE_NAME="${KARAF_SERVICE_NAME}"
KARAF_SERVICE_LOG="${KARAF_SERVICE_LOG}"
KARAF_SERVICE_USER="${KARAF_SERVICE_USER}"
KARAF_SERVICE_GROUP="${KARAF_SERVICE_GROUP}"
KARAF_LOCKFILE="/var/lock/subsys/$KARAF_SERVICE_NAME"
KARAF_SERVICE_PIDFILE="${KARAF_SERVICE_PIDFILE}"
KARAF_SERVICE_EXECUTABLE="${KARAF_SERVICE_EXECUTABLE}"
#
# Karaf
#

#
# User
#
