You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by de...@apache.org on 2014/12/08 14:49:30 UTC

activemq git commit: https://issues.apache.org/jira/browse/AMQ-5378 - shell script improvements; removing setup, cygwin fixes, refactoring

Repository: activemq
Updated Branches:
  refs/heads/trunk 3858faaf9 -> 80a4fb7cb


https://issues.apache.org/jira/browse/AMQ-5378 - shell script improvements; removing setup, cygwin fixes, refactoring


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/80a4fb7c
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/80a4fb7c
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/80a4fb7c

Branch: refs/heads/trunk
Commit: 80a4fb7cb709507fb88bef59f28b48e4da74fdc3
Parents: 3858faa
Author: Dejan Bosanac <de...@nighttale.net>
Authored: Mon Dec 8 14:45:14 2014 +0100
Committer: Dejan Bosanac <de...@nighttale.net>
Committed: Mon Dec 8 14:45:14 2014 +0100

----------------------------------------------------------------------
 assembly/src/release/bin/activemq | 160 ++++++++++++++-------------------
 assembly/src/release/bin/env      |   1 +
 2 files changed, 68 insertions(+), 93 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/80a4fb7c/assembly/src/release/bin/activemq
----------------------------------------------------------------------
diff --git a/assembly/src/release/bin/activemq b/assembly/src/release/bin/activemq
index adeda55..569c11f 100755
--- a/assembly/src/release/bin/activemq
+++ b/assembly/src/release/bin/activemq
@@ -40,48 +40,56 @@ if ( basename $0 | grep "activemq-instance-" > /dev/null);then
    echo "INFO: Using alternative activemq configuration files: $ACTIVEMQ_CONFIGS"
 fi
 
-## START:DEFAULTCONFIG
 # ------------------------------------------------------------------------
-# Configuration file for running Apache Active MQ as standalone provider
-#
-# This file overwrites the predefined settings of the sysv init-script
-#
-# Active MQ installation dir
-if [ -z "$ACTIVEMQ_HOME" ] ; then
-  # try to find ACTIVEMQ
-  if [ -d /opt/activemq ] ; then
-    ACTIVEMQ_HOME=/opt/activemq
-  fi
+# HELPERS
 
-  if [ -d "${HOME}/opt/activemq" ] ; then
-    ACTIVEMQ_HOME="${HOME}/opt/activemq"
-  fi
-
-  ## resolve links - $0 may be a link to activemq's home
-  PRG="$0"
-  progname=`basename "$0"`
-  saveddir=`pwd`
-
-  # need this for relative symlinks
-  dirname_prg=`dirname "$PRG"`
-  cd "$dirname_prg"
+# a simple helper to get the current user
+setCurrentUser(){
+   CUSER=`whoami 2>/dev/null`
+   # Solaris hack
+   if [ ! $? -eq 0 ]; then
+      CUSER=`/usr/ucb/whoami 2>/dev/null`
+   fi
+}
 
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '.*/.*' > /dev/null; then
-    PRG="$link"
-    else
-    PRG=`dirname "$PRG"`"/$link"
+# get a canonical path, macosx and slowlaris does not support radlink -f :-)
+pathCanonical() {
+    local dst="${1}"
+    while [ -h "${dst}" ] ; do
+        ls=`ls -ld "${dst}"`
+        link=`expr "$ls" : '.*-> \(.*\)$'`
+        if expr "$link" : '/.*' > /dev/null; then
+            dst="$link"
+        else
+            dst="`dirname "${dst}"`/$link"
+        fi
+    done
+    local bas=`basename "${dst}"`
+    local dir=`dirname "${dst}"`
+    if [ "$bas" != "$dir" ]; then
+      dst="`pathCanonical "$dir"`/$bas"
     fi
-  done
+    echo "${dst}" | sed -e 's#//#/#g' -e 's#/./#/#g' -e 's#/[^/]*/../#/#g'
+}
 
-  ACTIVEMQ_HOME=`dirname "$PRG"`/..
 
-  cd "$saveddir"
+# a simple helper to get the activemq installation dir
+getActiveMQHome(){
+  # get the real path to the binary
+  local REAL_BIN="`pathCanonical $0`"
+  local REAL_DIR="`dirname $REAL_BIN`/../"
+  REAL_DIR="`cd $REAL_DIR && pwd -P`"
+  if [ -z "$REAL_DIR" ];then
+      echo 'ERROR: unable to find real installtion path fo activemq, you have to define ACTIVEMQ_HOME manually in the config' >&2
+      exit 1
+  fi
+  echo "$REAL_DIR"
+
+}
 
-  # make it fully qualified
-  ACTIVEMQ_HOME=`cd "$ACTIVEMQ_HOME" && pwd`
+# Active MQ installation dir
+if [ -z "$ACTIVEMQ_HOME" ] ; then
+  ACTIVEMQ_HOME="`getActiveMQHome`"
 fi
 
 if [ -z "$ACTIVEMQ_BASE" ] ; then
@@ -99,7 +107,7 @@ if [ -z "$ACTIVEMQ_CONF" ] ; then
     fi
 fi
 
-# Configure a user with non root priviledges, if no user is specified do not change user
+# Configure a user with non root privileges, if no user is specified do not change user
 if [ -z "$ACTIVEMQ_USER" ] ; then
     ACTIVEMQ_USER=""
 fi
@@ -119,15 +127,6 @@ if [ -z "$ACTIVEMQ_TMP" ] ; then
   ACTIVEMQ_TMP="$ACTIVEMQ_BASE/tmp"
 fi
 
-setCurrentUser(){
-   CUSER=`whoami 2>/dev/null`
-
-   # Solaris fix
-   if [ ! $? -eq 0 ]; then
-      CUSER=`/usr/ucb/whoami 2>/dev/null`
-   fi
-}
-
 if [ ! -d "$ACTIVEMQ_DATA" ]; then
    setCurrentUser
    if ( [ -z "$ACTIVEMQ_USER" ] || [ "$ACTIVEMQ_USER" = "$CUSER" ] );then
@@ -142,7 +141,6 @@ if [ -z "$ACTIVEMQ_PIDFILE" ]; then
   ACTIVEMQ_PIDFILE="$ACTIVEMQ_DATA/activemq-`hostname`.pid"
 fi
 
-## END:DEFAULTCONFIG
 
 # ------------------------------------------------------------------------
 # LOAD CONFIGURATION
@@ -179,37 +177,6 @@ if [ "$CONFIG_LOAD" != "yes" ];then
    fi
 fi
 
-# create configuration if requested
-if [ "$1" = "setup" ];then
-   if [ -z "$2" ];then
-      echo "ERROR: Specify configuration file"
-      exit 1
-   fi
-   echo "INFO: Creating configuration file: $2"
-   (
-   P_STATE="0"
-   while read LINE ;do
-      if (echo "$LINE" | grep "START:DEFAULTCONFIG" >/dev/null );then
-         P_STATE="1"
-         continue;
-      fi
-      if (echo "$LINE" | grep "END:DEFAULTCONFIG" >/dev/null);then
-         P_STATE="0"
-         break;
-      fi
-      if [ "$P_STATE" -eq "1" ];then
-         echo $LINE
-      fi
-   done < $0
-   ) > $2
-
-   setCurrentUser
-
-   echo "INFO: It's recommend to limit access to '$2' to the priviledged user"
-   echo "INFO: (recommended: chown '$CUSER':nogroup '$2'; chmod 600 '$2')"
-   exit $?
-fi
-
 # ------------------------------------------------------------------------
 # OS SPECIFIC SUPPORT
 
@@ -232,7 +199,7 @@ if [ "$OSTYPE" = "cygwin" ]; then
   [ -n "$JAVA_HOME" ] &&
     JAVA_HOME="`cygpath --unix "$JAVA_HOME"`"
   [ -n "$CLASSPATH" ] &&
-    CLASSPATH="`cygpath --path --unix "$CLASSPATH"`"
+    ACTIVEMQ_CLASSPATH="`cygpath --path --unix "$ACTIVEMQ_CLASSPATH"`"
 fi
 
 # Detect the location of the java binary
@@ -274,8 +241,8 @@ if [ "$OSTYPE" = "cygwin" ];then
   ACTIVEMQ_CONF=`cygpath --windows "$ACTIVEMQ_CONF"`
   ACTIVEMQ_DATA=`cygpath --windows "$ACTIVEMQ_DATA"`
   ACTIVEMQ_CLASSPATH=`cygpath --path --windows "$ACTIVEMQ_CLASSPATH"`
-  JAVA_HOME=`cygpath --windows "$JAVA_HOME"`
-  CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --windows "$JAVA_HOME"`
   CYGHOME=`cygpath --windows "$HOME"`
   ACTIVEMQ_TMP=`cygpath --windows "$ACTIVEMQ_TMP"`
   if [ -n "$CYGHOME" ]; then
@@ -285,7 +252,16 @@ fi
 
 # Set default classpath
 # Add instance conf dir before AMQ install conf dir to pick up instance-specific classpath entries first
-ACTIVEMQ_CLASSPATH="${ACTIVEMQ_CONF};${ACTIVEMQ_CLASSPATH}"
+ACTIVEMQ_CLASSPATH="${ACTIVEMQ_CONF}:${ACTIVEMQ_CLASSPATH}"
+
+if [ "$OSTYPE" = "cygwin" ];then
+  # remove training backslashes to prevent quoting problems
+  ACTIVEMQ_CLASSPATH="`echo ${ACTIVEMQ_CLASSPATH}|sed '~s,[\\]*$,,g'`"
+  ACTIVEMQ_HOME="`echo ${ACTIVEMQ_HOME}|sed '~s,[\\]*$,,g'`"
+  ACTIVEMQ_BASE="`echo ${ACTIVEMQ_BASE}|sed '~s,[\\]*$,,g'`"
+  ACTIVEMQ_CONF="`echo ${ACTIVEMQ_CONF}|sed '~s,[\\]*$,,g'`"
+  ACTIVEMQ_DATA="`echo ${ACTIVEMQ_DATA}|sed '~s,[\\]*$,,g'`"
+fi
 
 # Start the ActiveMQ JAR
 #
@@ -304,7 +280,7 @@ invokeJar(){
    RET="1"
 
    if [ ! -f "${ACTIVEMQ_HOME}/bin/activemq.jar" ];then
-    echo "ERROR: '${ACTIVEMQ_HOME}/bin/activemq.jar' does not exist"
+    echo "ERROR: '${ACTIVEMQ_HOME}/bin/activemq.jar' does not exist, define ACTIVEMQ_HOME in the config"
     exit 1
    fi
 
@@ -320,7 +296,7 @@ invokeJar(){
    fi
    # Execute java binary
    if [ -n "$PIDFILE" ] && [ "$PIDFILE" != "stop" ];then
-      $EXEC_OPTION $DOIT_PREFIX "$JAVACMD $ACTIVEMQ_OPTS $ACTIVEMQ_DEBUG_OPTS \
+      $EXEC_OPTION $DOIT_PREFIX "\"$JAVACMD\" $ACTIVEMQ_OPTS $ACTIVEMQ_DEBUG_OPTS \
               -Dactivemq.classpath=\"${ACTIVEMQ_CLASSPATH}\" \
               -Dactivemq.home=\"${ACTIVEMQ_HOME}\" \
               -Dactivemq.base=\"${ACTIVEMQ_BASE}\" \
@@ -329,12 +305,12 @@ invokeJar(){
               $ACTIVEMQ_CYGWIN \
               -jar \"${ACTIVEMQ_HOME}/bin/activemq.jar\" $COMMANDLINE_ARGS >/dev/null 2>&1 &
               RET=\"\$?\"; APID=\"\$!\";
-              echo \$APID > $PIDFILE;
+              echo \$APID > "$PIDFILE";
               echo \"INFO: pidfile created : '$PIDFILE' (pid '\$APID')\";exit \$RET" $DOIT_POSTFIX
       RET="$?"
    elif [ -n "$PIDFILE" ] && [ "$PIDFILE" = "stop" ];then
-          PID=`cat $ACTIVEMQ_PIDFILE`
-          $EXEC_OPTION $DOIT_PREFIX "$JAVACMD $ACTIVEMQ_OPTS $ACTIVEMQ_DEBUG_OPTS \
+          PID=`cat ${ACTIVEMQ_PIDFILE}`
+          $EXEC_OPTION $DOIT_PREFIX "\"$JAVACMD\" $ACTIVEMQ_OPTS $ACTIVEMQ_DEBUG_OPTS \
               -Dactivemq.classpath=\"${ACTIVEMQ_CLASSPATH}\" \
               -Dactivemq.home=\"${ACTIVEMQ_HOME}\" \
               -Dactivemq.base=\"${ACTIVEMQ_BASE}\" \
@@ -346,7 +322,7 @@ invokeJar(){
               echo \$APID > $ACTIVEMQ_DATA/stop.pid; exit \$RET" $DOIT_POSTFIX
       RET="$?"
    else
-      $EXEC_OPTION $DOIT_PREFIX "$JAVACMD $ACTIVEMQ_OPTS $ACTIVEMQ_DEBUG_OPTS \
+      $EXEC_OPTION $DOIT_PREFIX "\"$JAVACMD\" $ACTIVEMQ_OPTS $ACTIVEMQ_DEBUG_OPTS \
               -Dactivemq.classpath=\"${ACTIVEMQ_CLASSPATH}\" \
               -Dactivemq.home=\"${ACTIVEMQ_HOME}\" \
               -Dactivemq.base=\"${ACTIVEMQ_BASE}\" \
@@ -497,7 +473,7 @@ invoke_stop(){
        echo "INFO: Waiting at least $ACTIVEMQ_KILL_MAXSECONDS seconds for regular process termination of pid '$PID' : "
        FOUND="0"
        i=1
-       while [ $i != $ACTIVEMQ_KILL_MAXSECONDS ]; do
+       while [ "$i" != "$ACTIVEMQ_KILL_MAXSECONDS" ]; do
 
          if [ ! checkStopRunning ];then
             if [ ! checkRunning ]; then
@@ -531,8 +507,8 @@ invoke_stop(){
        echo "ActiveMQ not running"
        exit 0
     fi
-    rm -f $ACTIVEMQ_PIDFILE >/dev/null 2>&1
-    rm -f $ACTIVEMQ_DATA/stop.pid >/dev/null 2>&1
+    rm -f "$ACTIVEMQ_PIDFILE" >/dev/null 2>&1
+    rm -f "$ACTIVEMQ_DATA/stop.pid" >/dev/null 2>&1
     exit $RET
 }
 
@@ -573,11 +549,9 @@ Tasks provided by the sysv init script:
     restart         - stop running instance (if there is one), start new instance
     console         - start broker in foreground, useful for debugging purposes
     status          - check if activemq process is running
-    setup           - create the specified configuration file for this init script
-                      (see next usage section)
 
 Configuration of this script:
-    The configuration of this script can be placed on /etc/default/activemq or $HOME/.activemqrc.
+    Default configuration of this scriptThe configuration of this script can be placed on /etc/default/activemq or $HOME/.activemqrc.
     To use additional configurations for running multiple instances on the same operating system
     rename or symlink script to a name matching to activemq-instance-<INSTANCENAME>.
     This changes the configuration location to /etc/default/activemq-instance-<INSTANCENAME> and

http://git-wip-us.apache.org/repos/asf/activemq/blob/80a4fb7c/assembly/src/release/bin/env
----------------------------------------------------------------------
diff --git a/assembly/src/release/bin/env b/assembly/src/release/bin/env
index 4fb2e40..98246cb 100644
--- a/assembly/src/release/bin/env
+++ b/assembly/src/release/bin/env
@@ -1,3 +1,4 @@
+#!/bin/sh
 # ------------------------------------------------------------------------
 # Configuration file for running Apache Active MQ as standalone provider
 #