diff --git a/README.md b/README.md
index 5639c4b..102e00f 100644
--- a/README.md
+++ b/README.md
@@ -2,12 +2,15 @@
Start the iDAC6 virtual console on the DELL PowerEdge R610 without the need of Java Web Start or accessing it from the web interface.
## Requirements
-Java installed
+Java 7 installed
## Usage
```
Usage:
console.sh [OPTIONS]
+ If Java 7 is not the default java on your system, use this command instead:
+ JAVA_HOME=/path/to/java7 console.sh [OPTIONS]
+ The correct JAVA_HOME directory is where bin/java lives.
Open a virtual console to the DELL PowerEdge R610.
diff --git a/console.sh b/console.sh
index 561fc1e..0bb0c2f 100755
--- a/console.sh
+++ b/console.sh
@@ -6,7 +6,7 @@
usage () {
cat <<EOF
Usage:
- $(basename $0) [OPTIONS]
+ $(basename "$0") [OPTIONS]
Open a virtual console to the DELL PowerEdge R610.
@@ -29,7 +29,16 @@ The following variables can also be set as environment variables:
EOF
}
-SCRIPT_DIR="$( cd "$(dirname "$0")" &> /dev/null; pwd -P )"
+echoerr () { echo "$@" 1>&2; }
+
+die () {
+ MSG="$1"
+ shift
+ echoerr "${MSG}"
+ exit 1
+}
+
+SCRIPT_DIR="$( cd "$(dirname "$0")" &> /dev/null || die "can't cd to $(dirname "$0")"; pwd -P )"
while getopts "h:u:p:ki" OPTIONS; do
case ${OPTIONS} in
@@ -42,7 +51,17 @@ while getopts "h:u:p:ki" OPTIONS; do
esac
done
-if [ -z ${IDRAC_HOST+x} ]; then
+if [ -z "${JAVA_HOME}" ]; then
+ JAVA_PATH="$(which java)"
+ if [ -x "${JAVA_PATH}" ]; then
+ JAVA_BIN_PATH="$(dirname "${JAVA_PATH}")"
+ JAVA_HOME="$(dirname "${JAVA_BIN_PATH}")"
+ else
+ die "No java executable found on PATH"
+ fi
+fi
+
+if [ -z "${IDRAC_HOST+x}" ]; then
echo -e "Host not specified.\n"
usage
exit 1
@@ -54,22 +73,22 @@ else
IDRAC_PASSWD_FILE=${IDRAC_PASSWD}
fi
-if [ -f ${IDRAC_PASSWD_FILE} ]; then
- IDRAC_PASSWD=$(cat ${IDRAC_PASSWD_FILE} | xargs)
-elif [ -f ${PWD}/${IDRAC_PASSWD_FILE} ]; then
- IDRAC_PASSWD=$(cat ${PWD}/${IDRAC_PASSWD_FILE} | xargs)
-elif [ -f ${HOME}/${IDRAC_PASSWD_FILE} ]; then
- IDRAC_PASSWD=$(cat ${HOME}/${IDRAC_PASSWD_FILE} | xargs)
-elif [ -f ${SCRIPT_DIR}/${IDRAC_PASSWD_FILE} ]; then
- IDRAC_PASSWD=$(cat ${SCRIPT_DIR}/${IDRAC_PASSWD_FILE} | xargs)
+if [ -f "${IDRAC_PASSWD_FILE}" ]; then
+ IDRAC_PASSWD="$(xargs < "${IDRAC_PASSWD_FILE}")"
+elif [ -f "${PWD}/${IDRAC_PASSWD_FILE}" ]; then
+ IDRAC_PASSWD="$(xargs < "${PWD}/${IDRAC_PASSWD_FILE}")"
+elif [ -f "${HOME}/${IDRAC_PASSWD_FILE}" ]; then
+ IDRAC_PASSWD="$(xargs < "${HOME}/${IDRAC_PASSWD_FILE}")"
+elif [ -f "${SCRIPT_DIR}/${IDRAC_PASSWD_FILE}" ]; then
+ IDRAC_PASSWD="$(xargs < "${SCRIPT_DIR}/${IDRAC_PASSWD_FILE}")"
fi
if [ -z ${IDRAC_PASSWD+x} ]; then
- read -sp "Password for ${IDRAC_USER} on ${IDRAC_HOST}: " IDRAC_PASSWD
+ read -rsp "Password for ${IDRAC_USER} on ${IDRAC_HOST}: " IDRAC_PASSWD
echo
fi
-if [ "$INIT" == "true" ] || [ ! -d ${SCRIPT_DIR}/bin ] || [ ! -d ${SCRIPT_DIR}/lib ] || [ ! -d ${SCRIPT_DIR}/conf ]; then
+if [ "$INIT" == "true" ] || [ ! -d "${SCRIPT_DIR}/bin" ] || [ ! -d "${SCRIPT_DIR}/lib" ] || [ ! -d "${SCRIPT_DIR}/conf" ]; then
ARCH=$(uname -m)
case "$OSTYPE" in
darwin*) FILES=MACOS_${ARCH^^}_LIBS ;;
@@ -80,49 +99,54 @@ if [ "$INIT" == "true" ] || [ ! -d ${SCRIPT_DIR}/bin ] || [ ! -d ${SCRIPT_DIR}/l
esac
SOFTWARE_URL="${PROTO:-https}://${IDRAC_HOST}/software/"
- WINDOWS_X86_LIBS="avctKVMIOWin32.jar avctVMWin32.jar"
- WINDOWS_X86_64_LIBS="avctKVMIOWin64.jar avctVMWin64.jar"
- WINDOWS_AMD64_LIBS="avctKVMIOWin64.jar avctVMWin64.jar"
- LINUX_X86_LIBS="avctKVMIOLinux32.jar avctVMLinux32.jar"
- LINUX_I386_LIBS="avctKVMIOLinux32.jar avctVMLinux32.jar"
- LINUX_I586_LIBS="avctKVMIOLinux32.jar avctVMLinux32.jar"
- LINUX_I686_LIBs="avctKVMIOLinux32.jar avctVMLinux32.jar"
- LINUX_AMD64_LIBS="avctKVMIOLinux64.jar avctVMLinux64.jar"
- LINUX_X86_64_LIBS="avctKVMIOLinux64.jar avctVMLinux64.jar"
- MACOS_X86_64_LIBS="avctKVMIOMac64.jar avctVMMac64.jar"
+ export WINDOWS_X86_LIBS="avctKVMIOWin32.jar avctVMWin32.jar"
+ export WINDOWS_X86_64_LIBS="avctKVMIOWin64.jar avctVMWin64.jar"
+ export WINDOWS_AMD64_LIBS="avctKVMIOWin64.jar avctVMWin64.jar"
+ export LINUX_X86_LIBS="avctKVMIOLinux32.jar avctVMLinux32.jar"
+ export LINUX_I386_LIBS="avctKVMIOLinux32.jar avctVMLinux32.jar"
+ export LINUX_I586_LIBS="avctKVMIOLinux32.jar avctVMLinux32.jar"
+ export LINUX_I686_LIBs="avctKVMIOLinux32.jar avctVMLinux32.jar"
+ export LINUX_AMD64_LIBS="avctKVMIOLinux64.jar avctVMLinux64.jar"
+ export LINUX_X86_64_LIBS="avctKVMIOLinux64.jar avctVMLinux64.jar"
+ export MACOS_X86_64_LIBS="avctKVMIOMac64.jar avctVMMac64.jar"
JAR="avctKVM.jar"
- if curl -sS ${SOFTWARE_URL} 2>&1 | grep -q "curl: (60)"; then
+ if curl -sS "${SOFTWARE_URL}" 2>&1 | grep -q "curl: (60)"; then
echo -e "SSL certificate problem: self signed certificate.\n\nTry with the -k (insecure) option for HTTP instead of HTTPS."
exit 1
fi
- mkdir -p ${SCRIPT_DIR}/{bin,lib,conf}
+ mkdir -p "${SCRIPT_DIR}"/{bin,lib,conf}
for FILE in ${!FILES}; do
- curl -s ${SOFTWARE_URL}${FILE} -o ${SCRIPT_DIR}/lib/${FILE}
- cd ${SCRIPT_DIR}/lib; jar -xvf ${FILE} >/dev/null; cd - >/dev/null
- rm -r ${SCRIPT_DIR}/lib/${FILE} ${SCRIPT_DIR}/lib/META-INF
+ curl -s "${SOFTWARE_URL}${FILE}" -o "${SCRIPT_DIR}/lib/${FILE}"
+ cd "${SCRIPT_DIR:?}/lib" || die "can't cd to ${SCRIPT_DIR:?}/lib"; jar -xvf "${FILE}" >/dev/null; cd - >/dev/null || die "can't cd to -"
+ rm -r "${SCRIPT_DIR:?}/lib/${FILE}" "${SCRIPT_DIR}/lib/META-INF"
done
- curl -s ${SOFTWARE_URL}${JAR} -o ${SCRIPT_DIR}/bin/${JAR}
+ curl -s "${SOFTWARE_URL}${JAR}" -o "${SCRIPT_DIR}/bin/${JAR}"
- cp ${JAVA_HOME}/conf/security/java.security ${SCRIPT_DIR}/conf/java.security
- sed -i 's/jdk.tls.disabledAlgorithms=\(.*\) RC4,\(.*\)/jdk.tls.disabledAlgorithms=\2/' ${SCRIPT_DIR}/conf/java.security
+ cp "${JAVA_HOME}/conf/security/java.security" "${SCRIPT_DIR}/conf/java.security"
+ sed -i 's/jdk.tls.disabledAlgorithms=\(.*\) RC4,\(.*\)/jdk.tls.disabledAlgorithms=\2/' "${SCRIPT_DIR}/conf/java.security"
fi
echo "Connecting to ${IDRAC_HOST} as ${IDRAC_USER:-root}."
-java -cp ${SCRIPT_DIR}/bin/avctKVM.jar \
- -Djava.library.path=${SCRIPT_DIR}/lib/ \
- -Djava.security.properties=${SCRIPT_DIR}/conf/java.security \
+if [ -x "$(which screen)" ]; then
+ SCREEN_STUFF="screen -d -m -S idrac6console "
+else
+ SCREEN_STUFF=""
+fi
+${SCREEN_STUFF} "${JAVA_HOME}/bin/java" -cp "${SCRIPT_DIR}/bin/avctKVM.jar" \
+ -Djava.library.path="${SCRIPT_DIR}/lib/" \
+ -Djava.security.properties="${SCRIPT_DIR}/conf/java.security" \
com.avocent.idrac.kvm.Main \
- ip=${IDRAC_HOST} \
+ ip="${IDRAC_HOST}" \
kmport=5900 \
vport=5900 \
- user=${IDRAC_USER:-root} \
- passwd=${IDRAC_PASSWD:-calvin} \
+ user="${IDRAC_USER:-root}" \
+ passwd="${IDRAC_PASSWD:-calvin}" \
apcp=1 \
version=2 \
vm=1 \
vmprivilege=true \
reconnect=1 \
- helpurl=${PROTO:-https}://${IDRAC_HOST}/help/contents.html
+ helpurl="${PROTO:-https}://${IDRAC_HOST}/help/contents.html"