0
gandalf@AS426:~$
gandalf@AS426:~$ cd /xnc

gandalf@AS426:/xnc$ sudo ./runxnc.sh
[sudo] password for gandalf:
Need to set JAVA_HOME environment variable

gandalf@AS426:/xnc$ echo $JAVA_HOME
/usr/lib/jvm/java-7-oracle/

gandalf@AS426:/xnc$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-7-oracle/

gandalf@AS426:/xnc$ more runxnc.sh
#!/bin/bash

platform='unknown'
unamestr=`uname`
if [[ "$unamestr" == 'Linux' ]]; then
   platform='linux'
elif [[ "$unamestr" == 'Darwin' ]]; then
   platform='osx'
fi

cd `dirname $0`
if [[ $platform == 'linux' ]]; then
   fullpath=`readlink -f $0`
elif [[ $platform == 'osx' ]]; then
   TARGET_FILE=`basename $0`

   # Iterate down a (possible) chain of symlinks
   while [ -L "$TARGET_FILE" ]
   do
       TARGET_FILE=`readlink "$TARGET_FILE"`
       cd `dirname $TARGET_FILE`
       TARGET_FILE=`basename "$TARGET_FILE"`
   done

   # Compute the canonicalized name by finding the physical path
   # for the directory we're in and appending the target file.
   PHYS_DIR=`pwd -P`
   RESULT="$PHYS_DIR/$TARGET_FILE"
   fullpath="$RESULT"

[[ -z ${JAVA_HOME} ]] && [[ -x "/usr/libexec/java_home" ]] && export JAVA_HOME=`/usr/libexec/java_home -v 1.7`;

fi

[[ -z ${JAVA_HOME} ]] && echo "Need to set JAVA_HOME environment variable" && exit -1;
[[ ! -x ${JAVA_HOME}/bin/java ]] && echo "Cannot find an executable \
JVM at path ${JAVA_HOME}/bin/java check your JAVA_HOME" && exit -1;

basedir=`dirname "${fullpath}"`

function usage {
    echo "Usage: $0 [-tls] [-tlskeystore <keystore>] [-tlstruststore <truststore>] [-jmx] [-jmxport <num>] [-debug] [-debugsuspend] [-debugport <num>] [-start [<console port>]] [-stop] [-status] [-console] [-osgiPasswordSync] [-help] [-p
ipeout] [<other args will automatically be used for the JVM>]"
    exit 1
}

if [ ! -d "${basedir}/work" ]; then
  mkdir "${basedir}/work"
fi

pidfile="${basedir}/work/xnc.pid"
debug=0
debugsuspend=0
debugport=8000
debugportread=""
startdaemon=1
daemonport=2400
daemonportread=""
jmxport=1088
jmxportread=""
startjmx=0
stopdaemon=0
statusdaemon=0
consolestart=0
dohelp=0
starttls=0
tlskeystore=""
tlstruststore=""
keystoresystempropertyspecified=0
truststoresystempropertyspecified=0
pipeout=0
extraJVMOpts="-server -XX:+HeapDumpOnOutOfMemoryError -mx1024m -XX:MaxPermSize=256m"
unknown_option=0
passwordprompt=0
while true ; do
    case "$1" in
        -tls) starttls=1; shift ;;
        -tlskeystore) shift; tlskeystore="$1"; shift ;;
        -tlstruststore) shift; tlstruststore="$1"; shift ;;
        -debug) debug=1; shift ;;
        -jmx) startjmx=1; shift ;;
        -debugsuspend) debugsuspend=1; shift ;;
        -debugport) shift; debugportread="$1"; if [[ "${debugportread}" =~ ^[0-9]+$ ]] ; then debugport=${debugportread}; shift; else echo "-debugport expects a number but was not found"; exit -1; fi;;
        -jmxport) shift; jmxportread="$1"; if [[ "${jmxportread}" =~ ^[0-9]+$ ]] ; then jmxport=${jmxportread}; shift; else echo "-jmxport expects a number but was not found"; exit -1; fi;;
        -start) startdaemon=1; consolestart=0; shift; daemonportread="$1"; if [[ "${daemonportread}" =~ ^[0-9]+$ ]] ; then daemonport=${daemonportread}; shift; fi;;
        -stop) stopdaemon=1; shift ;;
        -status) statusdaemon=1; shift ;;
        -console) consolestart=1; startdaemon=0; shift ;;
        -help) dohelp=1; shift;;
        -pipeout) pipeout=1; shift;;
        -DcontrollerKeyStore*) extraJVMOpts="${extraJVMOpts} $1"; keystoresystempropertyspecified=1; shift;;
        -DcontrollerTrustStore*) extraJVMOpts="${extraJVMOpts} $1"; truststoresystempropertyspecified=1; shift;;
        -D*) extraJVMOpts="${extraJVMOpts} $1"; shift;;
        -X*) extraJVMOpts="${extraJVMOpts} $1"; shift;;
        -verbose:*) extraJVMOpts="${extraJVMOpts} $1"; shift;;
        -javaagent:*) extraJVMOpts="${extraJVMOpts} $1"; shift;;
        -osgiPasswordSync) passwordprompt=1; shift ;;
        "") break ;;
        *) echo "Unknown option $1"; unknown_option=1; shift ;;
    esac
done

# Unknown Options and help
if [ "${unknown_option}" -eq 1 ]; then
    usage
fi

if [ "${dohelp}" -eq 1 ]; then
    usage
fi

# Validate Java version
_java="$JAVA_HOME/bin/java"
if [[ "$_java" ]] && [[ "${stopdaemon}" -eq 0 ]] && [[ "${statusdaemon}" -eq 0 ]]; then
    version=$("$_java" -version 2>&1 | awk -F '"' '/version/ {print $2}')
    if [[ "$version" < "1.7" ]]; then
        echo "Error: Current Java version is $version. Required Java version is 1.7 or above. For latest security fixes recommended Java version is 1.8.0_45 or above. Please upgrade current Java version and restart Nexus Data Broker."
        exit -1
    elif [[ "$version" < "1.8.0_45" ]]; then
        echo "Warning: Current Java version is $version, Latest security fixes require Java version 1.8.0_45 or above, Upgrade to 1.8.0_45 or above is recommended"
    fi
fi

# Validate debug port
if [[ "${debugport}" -lt 1024 ]] || [[ "${debugport}" -gt 65535 ]]; then
    echo "Debug Port not in the range [1024,65535] ${debugport}"
    exit -1
fi

# Validate daemon console port
if [[ "${daemonport}" -lt 1024 ]] || [[ "${daemonport}" -gt 65535 ]]; then
    echo "Daemon console Port not in the range [1024,65535] value is ${daemonport}"
    exit -1
fi

# Validate jmx port
if [[ "${jmxport}" -lt 1024 ]] || [[ "${jmxport}" -gt 65535 ]]; then
    echo "JMX Port not in the range [1024,65535] value is ${jmxport}"
    exit -1
fi

# Debug options
if [ "${debugsuspend}" -eq 1 ]; then
    extraJVMOpts="${extraJVMOpts} -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=${debugport}"
elif [ "${debug}" -eq 1 ]; then
    extraJVMOpts="${extraJVMOpts} -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=${debugport}"
fi

# Add JMX support
if [ "${startjmx}" -eq 1 ]; then
    extraJVMOpts="${extraJVMOpts} -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=${jmxport} -Dcom.sun.management.jmxremote"
fi

#Add TLS support
keystoredefault="${basedir}/configuration/tlsKeyStore"
truststoredefault="${basedir}/configuration/tlsTrustStore"
if [ "${starttls}" -eq 1 ]; then
    extraJVMOpts="${extraJVMOpts} -DsecureChannelEnabled=true"

    if [ "${tlskeystore}" == "" ]; then
        if [ "${keystoresystempropertyspecified}" -eq 0 ]; then
            echo "The location of the TLS KeyStore is not provided. Use default ${keystoredefault}"
            extraJVMOpts="${extraJVMOpts} -DcontrollerKeyStore=${keystoredefault}"
        fi
    else
        extraJVMOpts="${extraJVMOpts} -DcontrollerKeyStore=${tlskeystore}"
    fi

    if [ "${tlstruststore}" == "" ]; then
        if [ "${truststoresystempropertyspecified}" -eq 0 ]; then
            echo "The location of the TLS TrustStore is not provided. Use default ${truststoredefault}"
            extraJVMOpts="${extraJVMOpts} -DcontrollerTrustStore=${truststoredefault}"
        fi
    else
        extraJVMOpts="${extraJVMOpts} -DcontrollerTrustStore=${tlstruststore}"
    fi
    echo ""
fi

# Initialize OSGi console password to non-default
if [[  "${startdaemon}" -eq 1 || "${consolestart}" -eq 1 ]] && [ "${statusdaemon}" -eq 0 ] && [ "${stopdaemon}" -eq 0 ] && [ "${passwordprompt}" -eq 1 ]; then
    passvar=
    echo "If XNC password is changed, OSGi webconsole password needs to be changed, to set non-default OSGi webconsole password Enter"
    read -p 'XNC Admin Password [default]: ' passvar
    if [[ ! -z "$passvar" ]]; then
        extraJVMOpts="${extraJVMOpts} -Dfelix.webconsole.password=${passvar}"
    fi
fi

########################################
# Now add to classpath the OSGi JAR
########################################
CLASSPATH="${basedir}/lib/org.eclipse.osgi-3.8.1.v20120830-144521.jar"
FWCLASSPATH="file:${basedir}/lib/org.eclipse.osgi-3.8.1.v20120830-144521.jar"

########################################
# Now add the extensions
########################################

# Extension 1: this is used to be able to convert all the
# bundleresouce: URL in file: so packages that are not OSGi ready can
# still work. Notably this is the case for spring classes
CLASSPATH="${CLASSPATH}:${basedir}/lib/org.eclipse.virgo.kernel.equinox.extensions-3.6.0.RELEASE.jar"
FWCLASSPATH="${FWCLASSPATH},file:${basedir}/lib/org.eclipse.virgo.kernel.equinox.extensions-3.6.0.RELEASE.jar"

########################################
# Now add the launcher
########################################
CLASSPATH="${CLASSPATH}:${basedir}/lib/org.eclipse.equinox.launcher-1.3.0.v20120522-1813.jar"
FWCLASSPATH="${FWCLASSPATH},file:${basedir}/lib/org.eclipse.equinox.launcher-1.3.0.v20120522-1813.jar"

if [ "${stopdaemon}" -eq 1 ]; then
    if [ -e "${pidfile}" ]; then
        daemonpid=`cat "${pidfile}"`
        ps -p ${daemonpid} > /dev/null
        if [ $? -eq 0 ]; then
            kill "${daemonpid}"
            echo "Controller with PID: ${daemonpid} -- Stopped!"
        else
            echo "Controller with PID: ${daemonpid} -- Doesn't seem to exist"
        fi
        rm -f "${pidfile}"
        exit 0
    else
        daemonpid=`ps -ef | grep '[-]Dosgi.install.area=' | awk '{print $2}'`
        if [ ! -z "$daemonpid" ]; then
            kill "${daemonpid}"
            echo "Controller with PID: ${daemonpid} -- Stopped!"
            exit 0
        else
            echo "Doesn't seem any Controller daemon is currently running"
            exit -1
        fi
    fi
fi

if [ "${statusdaemon}" -eq 1 ]; then
    if [ -e "${pidfile}" ]; then
        daemonpid=`cat "${pidfile}"`
        ps -p ${daemonpid} > /dev/null
        if [ $? -eq 0 ]; then
            echo "Controller with PID: ${daemonpid} -- Running!"
            exit 0
        else
            echo "Controller with PID: ${daemonpid} -- Doesn't seem to exist"
            rm -f "${pidfile}"
            exit 0
        fi
    else
        daemonpid=`ps -ef | grep '[-]Dosgi.install.area=' | awk '{print $2}'`
        if [ ! -z "$daemonpid" ]; then
            echo "Controller with PID: ${daemonpid} -- Running!"
            exit 0
        else
            echo "Doesn't seem any Controller daemon is currently running"
            exit -1
        fi
    fi
fi

if [ "${startdaemon}" -eq 1 ]; then
    if [ -e "${pidfile}" ]; then
        echo "Another instance of controller running, check with $0 -status"
        exit -1
    fi
    # create a pipe to redirect output
    if [ "${pipeout}" -eq 1 ]; then
        stdoutPipe="${basedir}/work/xncpipe"
        if [[ ! -e "${stdoutPipe}" ]]; then
            mkfifo "${basedir}/work/xncpipe" || stdoutPipe="/dev/null"
        fi
    else
        # regular pipeing
        stdoutPipe="/dev/null"
    fi

    $JAVA_HOME/bin/java ${extraJVMOpts} \
        -Djava.io.tmpdir="${basedir}/work/tmp" \
        -Dosgi.install.area="${basedir}" \
        -Dosgi.configuration.area="${basedir}/configuration" \
        -Dosgi.frameworkClassPath="${FWCLASSPATH}" \
        -Dosgi.framework="file:${basedir}/lib/org.eclipse.osgi-3.8.1.v20120830-144521.jar" \
        -Dosgi.console.ssh=${daemonport} \
        -Djava.awt.headless=true \
        -Dinteractive=0 \
        -classpath "${CLASSPATH}" \
        org.eclipse.equinox.launcher.Main \
        -consoleLog > "${stdoutPipe}" 2>&1 &
    daemonpid=$!
    echo ${daemonpid} > ${pidfile}
    echo "Running controller in background with PID: ${daemonpid}, to connect to it please SSH to this host on port ${daemonport}"
elif [ "${consolestart}" -eq 1 ]; then
    if [ -e "${pidfile}" ]; then
        echo "Another instance of controller running, check with $0 -status"
        exit -1
    fi
    $JAVA_HOME/bin/java ${extraJVMOpts} \
        -Djava.io.tmpdir="${basedir}/work/tmp" \
        -Dosgi.install.area="${basedir}" \
        -Dosgi.configuration.area="${basedir}/configuration" \
        -Dosgi.frameworkClassPath="${FWCLASSPATH}" \
        -Dosgi.framework="file:${basedir}/lib/org.eclipse.osgi-3.8.1.v20120830-144521.jar" \
        -Djava.awt.headless=true \
        -Dinteractive=1 \
        -classpath "${CLASSPATH}" \
        org.eclipse.equinox.launcher.Main \
        -console \
        -consoleLog
fi
2

sudo starts the process in a new environment which is by default reset before the command is run.

If the machine admin hasn't disallowed it in /etc/sudoers you can use sudo -E command to preserve the user's environment variables for the command.

| improve this answer | |
0

Since you are running the script in sudo it is not going to take env variable you set in gandalf user. Maybe adding the env variable to /root/.bashrc can help!

| improve this answer | |
0

Although, there are many ways, you can simply follow these steps:

  1. sudo vi /etc/environment
  2. Add your env variable in the file: JAVA_HOME=/usr/lib/jvm/java-7-oracle/
  3. source /etc/environment
  4. Now, $JAVA_HOME would be accessible for all users.
  5. Execute your script: sudo sh runxnc.sh
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.