changeset 2039:89807d0b1dfe

Read environment variables from system/user profile in boot script. Backport of: http://icedtea.classpath.org/hg/thermostat/rev/c18fdca8ad65 PR3238 Reviewed-by: jerboaa Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2016-December/021885.html
author Jie Kang <jkang@redhat.com>
date Tue, 20 Dec 2016 15:24:46 -0500
parents d9578542296b
children e4e0f9654a04
files distribution/config/thermostatrc distribution/pom.xml distribution/scripts/thermostat pom.xml
diffstat 4 files changed, 116 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/distribution/config/thermostatrc	Tue Dec 20 15:24:46 2016 -0500
@@ -0,0 +1,68 @@
+#!/bin/bash
+#
+# Copyright 2012-2015 Red Hat, Inc.
+#
+# This file is part of Thermostat.
+#
+# Thermostat is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 2, or (at your
+# option) any later version.
+#
+# Thermostat is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Thermostat; see the file COPYING.  If not see
+# <http://www.gnu.org/licenses/>.
+#
+# Linking this code with other modules is making a combined work
+# based on this code.  Thus, the terms and conditions of the GNU
+# General Public License cover the whole combination.
+#
+# As a special exception, the copyright holders of this code give
+# you permission to link this code with independent modules to
+# produce an executable, regardless of the license terms of these
+# independent modules, and to copy and distribute the resulting
+# executable under terms of your choice, provided that you also
+# meet, for each linked independent module, the terms and conditions
+# of the license of that module.  An independent module is a module
+# which is not derived from or based on this code.  If you modify
+# this code, you may extend this exception to your version of the
+# library, but you are not obligated to do so.  If you do not wish
+# to do so, delete this exception statement from your version.
+#
+#####################################################################
+#
+# Environment variables for the system Thermostat profile. You
+# can assume that THERMOSTAT_HOME variable is correctly set and you
+# may override system variables via a user profile in
+# USER_THERMOSTAT_HOME/etc/thermostatrc.
+#
+#####################################################################
+
+#
+# Extra jar files which need to be on the classpath when
+# Thermostat boots.
+#
+THERMOSTAT_EXT_BOOT_CLASSPATH="@java.home@/../lib/tools.jar"
+# FIXME: Remove once jfreechart is a real OSGi bundle upstream
+THERMOSTAT_EXT_BOOT_CLASSPATH="${THERMOSTAT_EXT_BOOT_CLASSPATH}:${THERMOSTAT_HOME}/libs/jfreechart-@jfreechart.version@.jar"
+THERMOSTAT_EXT_BOOT_CLASSPATH="${THERMOSTAT_EXT_BOOT_CLASSPATH}:${THERMOSTAT_HOME}/libs/jcommon-@jcommon.version@.jar"
+# Needed to parse web.xml files without network connection See PR 2029.
+THERMOSTAT_EXT_BOOT_CLASSPATH="${THERMOSTAT_EXT_BOOT_CLASSPATH}:${THERMOSTAT_HOME}/plugins/embedded-web-endpoint/jetty-schemas-@jetty-schemas.version@.jar"
+export THERMOSTAT_EXT_BOOT_CLASSPATH
+
+#
+# Extra java options
+#
+#THERMOSTAT_EXT_JAVA_OPTS="-Xint -ea"
+#export THERMOSTAT_EXT_JAVA_OPTS
+
+#
+# Extra options passed on to the Thermostat main class
+#
+#THERMOSTAT_EXT_OPTS="--ignore-bundle-versions"
+#export THERMOSTAT_EXT_OPTS
--- a/distribution/pom.xml	Tue Nov 29 11:22:49 2016 +0100
+++ b/distribution/pom.xml	Tue Dec 20 15:24:46 2016 -0500
@@ -167,6 +167,7 @@
                     <include>agent.auth</include>
                     <include>web.auth</include>
                     <include>ssl.properties</include>
+                    <include>thermostatrc</include>
                     <include>thermostat-users.properties</include>
                     <include>thermostat-roles.properties</include>
                     <include>thermostat_jaas.conf</include>
--- a/distribution/scripts/thermostat	Tue Nov 29 11:22:49 2016 +0100
+++ b/distribution/scripts/thermostat	Tue Dec 20 15:24:46 2016 -0500
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# Copyright 2012-2014 Red Hat, Inc.
+# Copyright 2012-2015 Red Hat, Inc.
 #
 # This file is part of Thermostat.
 #
@@ -35,39 +35,47 @@
 # to do so, delete this exception statement from your version.
 #
 #####################################################################
-#
-# Some necessary variables.
-JAVA_DIR="@java.dir@"
-JAVA="@java.home@/bin/java"
 
-if [ x"$THERMOSTAT_INSTALL_DIR" = x ] ; then
-  THERMOSTAT_INSTALL_DIR="@thermostat.home@"
-fi
-# Not always are installation directory and thermostat home one and
-# the same location.
-if [ x"$THERMOSTAT_HOME" = x ] ; then
-  THERMOSTAT_HOME=${THERMOSTAT_INSTALL_DIR}
+if [ x"${THERMOSTAT_HOME}" = x ]; then
+  THERMOSTAT_HOME="@thermostat.home@"
   export THERMOSTAT_HOME
 fi
-THERMOSTAT_LIBS="${THERMOSTAT_HOME}/libs"
+if [ x"${USER_THERMOSTAT_HOME}" = x ]; then
+  USER_THERMOSTAT_HOME="@user.thermostat.home@"
+  export USER_THERMOSTAT_HOME
+fi
 
-# need tools from the JVM
-TOOLS_JAR="@java.home@/../lib/tools.jar"
+# Source system thermostat profile
+. ${THERMOSTAT_HOME}/etc/thermostatrc
+# Source user thermostat profile (if any)
+if [ -f ${USER_THERMOSTAT_HOME}/etc/thermostatrc ]; then
+  . ${USER_THERMOSTAT_HOME}/etc/thermostatrc
+fi
 
-JLINE_LOG_ARG="-Djline.log.jul=true"
+# NOTE: The following variables come from the system/user
+#       profiles (if any)
+#
+# THERMOSTAT_EXT_BOOT_CLASSPATH
+# THERMOSTAT_EXT_JAVA_OPTS
+# THERMOSTAT_EXT_OPTS
+
+JAVA="@java.home@/bin/java"
+THERMOSTAT_LIBS="${THERMOSTAT_HOME}/libs"
 
 # This is the minimal boot classpath thermostat needs. Other dependencies
 # will get started by the OSGi framework once that's up.
-SERVICE_CLASSPATH="${THERMOSTAT_LIBS}/org.apache.felix.framework-@felix.framework.version@.jar"
-SERVICE_CLASSPATH="${SERVICE_CLASSPATH}:${THERMOSTAT_LIBS}/thermostat-launcher-@project.version@.jar"
-SERVICE_CLASSPATH="${SERVICE_CLASSPATH}:${THERMOSTAT_LIBS}/thermostat-main-@project.version@.jar"
-SERVICE_CLASSPATH="${SERVICE_CLASSPATH}:${THERMOSTAT_LIBS}/thermostat-shared-config-@project.version@.jar"
-# FIXME: Remove once jfreechart is a real OSGi bundle upstream
-SERVICE_CLASSPATH="${SERVICE_CLASSPATH}:${THERMOSTAT_LIBS}/jfreechart-@jfreechart.version@.jar"
-SERVICE_CLASSPATH="${SERVICE_CLASSPATH}:${THERMOSTAT_LIBS}/jcommon-@jcommon.version@.jar"
-# Needed to parse web.xml files without network connection See PR 2029.
-SERVICE_CLASSPATH="${SERVICE_CLASSPATH}:${THERMOSTAT_HOME}/plugins/embedded-web-endpoint/jetty-schemas-@jetty-schemas.version@.jar"
-SERVICE_CLASSPATH="${TOOLS_JAR}:${SERVICE_CLASSPATH}"
+BOOT_CLASSPATH="${THERMOSTAT_LIBS}/org.apache.felix.framework-@felix.framework.version@.jar"
+BOOT_CLASSPATH="${BOOT_CLASSPATH}:${THERMOSTAT_LIBS}/thermostat-launcher-@project.version@.jar"
+BOOT_CLASSPATH="${BOOT_CLASSPATH}:${THERMOSTAT_LIBS}/thermostat-main-@project.version@.jar"
+BOOT_CLASSPATH="${BOOT_CLASSPATH}:${THERMOSTAT_LIBS}/thermostat-shared-config-@project.version@.jar"
+
+# Append extra class path entries coming from the profiles
+if [ ! -z ${THERMOSTAT_EXT_BOOT_CLASSPATH} ]; then
+  BOOT_CLASSPATH="${BOOT_CLASSPATH}:${THERMOSTAT_EXT_BOOT_CLASSPATH}"
+fi
+
+
+JLINE_LOG_ARG="-Djline.log.jul=true"
 
 # Duplicated in ThermostatVmMainLabelDecorator
 THERMOSTAT_MAIN="com.redhat.thermostat.main.Thermostat"
@@ -111,19 +119,23 @@
 done
 
 # Finally run thermostat (optionally in the background)
-if [ $RUN_IN_BG -eq 1 ]; then
+if [ ${RUN_IN_BG} -eq 1 ]; then
     # The thermostat-agent-sysd script uses this.
-    if [ x"$PID_FILE" = "x" ]; then
-        usage 
+    if [ x"${PID_FILE}" = "x" ]; then
+        usage
     else
-        ${JAVA} ${JLINE_LOG_ARG} "${JAVA_ARGS[@]}" -cp ${SERVICE_CLASSPATH} ${THERMOSTAT_MAIN} "${ARGS[@]}" &
+        "${JAVA}" ${THERMOSTAT_EXT_JAVA_OPTS} ${JLINE_LOG_ARG} "${JAVA_ARGS[@]}" \
+                -cp "${BOOT_CLASSPATH}" \
+                ${THERMOSTAT_MAIN} ${THERMOSTAT_EXT_OPTS} "${ARGS[@]}" &
         retval=$?
-        echo $! > $PID_FILE
-        retval=$(( $retval + $? ))
+        echo $! > ${PID_FILE}
+        retval=$(( ${retval} + $? ))
     fi
 else
-    ${JAVA} ${JLINE_LOG_ARG} "${JAVA_ARGS[@]}" -cp ${SERVICE_CLASSPATH} ${THERMOSTAT_MAIN} "${ARGS[@]}"
+    "${JAVA}" ${THERMOSTAT_EXT_JAVA_OPTS} ${JLINE_LOG_ARG} "${JAVA_ARGS[@]}" \
+            -cp "${BOOT_CLASSPATH}" \
+            ${THERMOSTAT_MAIN} ${THERMOSTAT_EXT_OPTS} "${ARGS[@]}"
     retval=$?
 fi
-exit $retval
+exit ${retval}
 
--- a/pom.xml	Tue Nov 29 11:22:49 2016 +0100
+++ b/pom.xml	Tue Dec 20 15:24:46 2016 -0500
@@ -135,6 +135,7 @@
     <thermostat.build.directory>target</thermostat.build.directory>
     <thermostat.java.version>1.7</thermostat.java.version>
     <thermostat.home>${user.dir}/distribution/target/image/</thermostat.home>
+    <user.thermostat.home>$HOME/.thermostat-1.6</user.thermostat.home>
     <!-- used in systemd service files. Set this to the username thermostat should run
          under when run via systemd. -->
     <thermostat.system.user>thermostat</thermostat.system.user>