#!/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-a8 # set -o nounset # # Settings # JACK_HOME="${JACK_HOME:=$HOME/.jack-server}" CLIENT_SETTING="${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 "$CLIENT_SETTING" ]; then source "$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 "'$CURL_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 '$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 '$CLIENT_SETTING' and '$JACK_HOME/config.properties'" return 255 fi } checkCurl checkJava checkKeytool checkport $SERVER_PORT_ADMIN checkport $SERVER_PORT_SERVICE # Exit exit 0