| #!/bin/bash |
| # |
| # Copyright (C) 2016 The Android Open Source Project |
| # |
| # Licensed 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. |
| # |
| # Version: 1.3-a11 |
| # |
| set -o nounset |
| |
| # |
| # Settings |
| # |
| JACK_HOME="${JACK_HOME:=$HOME/.jack-server}" |
| JACK_CLIENT_SETTING="${JACK_CLIENT_SETTING:=$HOME/.jack-settings}" |
| TMPDIR=${TMPDIR:=/tmp} |
| |
| LAUNCHER_JAR="$JACK_HOME/launcher.jar" |
| LAUNCHER_NAME=com.android.jack.launcher.ServerLauncher |
| CURRENT_CHARSET=$(locale charmap) |
| if [ -z "$CURRENT_CHARSET" ]; then |
| CHARSET_ARGUMENT= |
| else |
| CHARSET_ARGUMENT=";charset=$CURRENT_CHARSET" |
| fi |
| |
| JACK_LOGS_DIR="$JACK_HOME"/logs |
| JACK_OUT_ERR="$JACK_LOGS_DIR"/outputs.txt |
| JACK_CONNECTION_TIMEOUT=300 |
| |
| # |
| # Load client settings |
| # |
| if [ -f "$JACK_CLIENT_SETTING" ]; then |
| source "$JACK_CLIENT_SETTING" |
| fi |
| |
| |
| usage () { |
| echo "Usage : $0" |
| } |
| |
| checkCurl() { |
| CURL_COMMAND=$(which curl) |
| |
| if [ $? -ne 0 ] ; then |
| echo "curl not found in PATH" |
| return 255 |
| fi |
| |
| if ! "$CURL_COMMAND" --version >/dev/null 2>&1 ; then |
| echo "Failed to execute '$CURL_COMMAND'" |
| return 255 |
| fi |
| |
| if "$CURL_COMMAND" --version | grep -q "SecureTransport" ; then |
| echo "'$CURL_COMMAND' unsupported, please use a curl not based on SecureTransport" |
| fi |
| |
| if "$CURL_COMMAND" --version | grep -q "OpenSSL/1.0.0" ; then |
| echo "'$CURL_COMMAND' is using a too old SSL library, please update curl and its dependencies" |
| elif curl --version | grep -q "OpenSSL/0." ; then |
| echo "'$CURL_COMMAND' is using a too old SSL library, please update curl and its dependencies" |
| fi |
| } |
| |
| |
| checkJava() { |
| JAVA_COMMAND=$(which java) |
| |
| if [ $? -ne 0 ] ; then |
| echo "java not found in PATH" |
| return 255 |
| fi |
| |
| if ! "$JAVA_COMMAND" -version >/dev/null 2>&1 ; then |
| echo "Failed to execute '$JAVA_COMMAND'" |
| return 255 |
| fi |
| |
| |
| JAVA_VERSION=$("$JAVA_COMMAND" -version 2>&1 | head -1 | grep --only-matching -e \"1\\.[0-9]* | cut -c 4-) |
| if [ -z "$JAVA_VERSION" ] ; then |
| echo "'$JAVA_COMMAND': Failed to parse version, please ensure you're running a supported java" |
| return 255 |
| fi |
| |
| if [ "$JAVA_VERSION" -lt 7 ] ; then |
| echo "'$JAVA_COMMAND' is too old, please update to 1.7 or newer" |
| fi |
| } |
| |
| |
| checkKeytool() { |
| KEYTOOL_COMMAND=$(which keytool) |
| |
| if [ $? -ne 0 ] ; then |
| echo "keytool not found in PATH" |
| return 255 |
| fi |
| |
| if ! $KEYTOOL_COMMAND -help >/dev/null 2>&1 ; then |
| echo "failed to execute '$KEYTOOL_COMMAND'" |
| return 255 |
| fi |
| |
| |
| if ! $KEYTOOL_COMMAND -help 2>&1 | grep -q -e "-genkeypair" ; then |
| echo "'$KEYTOOL_COMMAND' unsupported, please ensure PATH allows finding keytool from a supported Java Runtime Environment ie 1.7 or newer" |
| fi |
| } |
| |
| |
| # |
| # $1: port number |
| # |
| checkport() { |
| PID_USING_PORT=$(lsof -F p -i TCP:$1 -sTCP:LISTEN | cut -c 2-) |
| if [ -z "$PID_USING_PORT" ] ; then |
| # port is free nothing to check |
| return 0 |
| fi |
| |
| PS_OUT=$(ps -p $PID_USING_PORT -o "pid uid args" | tail -1) |
| if [ $? -ne 0 ] ; then |
| # process exited before we could get any info, weird but means the port is now available |
| return 0 |
| fi |
| |
| if ! echo $PS_OUT | grep -q $LAUNCHER_NAME ; then |
| echo "Port $1 is used by another process (pid=$(echo $PS_OUT | awk '{print $1}')), please ensure to free the port or change port configuration in '$JACK_CLIENT_SETTING' and '$JACK_HOME/config.properties'" |
| return 255 |
| fi |
| |
| if [ "$(echo $PS_OUT | awk '{print $2}')" -ne "$(id -u)" ] ; then |
| echo "Port $1 is used b a Jack server from another user uid=$(echo $PS_OUT | awk '{print $2}'), please change port configuration in '$JACK_CLIENT_SETTING' and '$JACK_HOME/config.properties'" |
| return 255 |
| fi |
| } |
| |
| |
| checkBase64() { |
| BASE64_COMMAND=$(which base64) |
| |
| if [ $? -ne 0 ] ; then |
| echo "base64 not found in PATH" |
| return 255 |
| fi |
| |
| BASE64_CHECK=$((echo amFjaw==;echo LXNlcnZlcg==) | "$BASE64_COMMAND" --decode 2>&1) |
| if [ "$BASE64_CHECK" != jack-server ]; then |
| echo "'$BASE64_COMMAND' is not a supported version" |
| return 255 |
| fi |
| } |
| |
| STATUS=0 |
| |
| if ! checkCurl ; then |
| STATUS=1 |
| fi |
| |
| if ! checkJava ; then |
| STATUS=1 |
| fi |
| if ! checkKeytool ; then |
| STATUS=1 |
| fi |
| |
| if ! checkport $SERVER_PORT_ADMIN ; then |
| STATUS=1 |
| fi |
| if ! checkport $SERVER_PORT_SERVICE ; then |
| STATUS=1 |
| fi |
| |
| if ! checkBase64 ; then |
| echo "base64 is not mandatory but installing a supported version can help with standard output and standard error problems" |
| fi |
| |
| if [ $STATUS -eq 0 ] ; then |
| echo "Diagnostic completed without error." |
| fi |
| # Exit |
| exit $STATUS |