1 #!/bin/bash 2 # 3 # Copyright (C) 2015 The Android Open Source Project 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of the License at 8 # 9 # http://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 # 17 # Version: 1.3-a11 18 # 19 set -o nounset 20 BASE_UMASK=$(umask) 21 umask 077 22 23 # 24 # Settings 25 # 26 JACK_HOME="${JACK_HOME:=$HOME/.jack-server}" 27 JACK_CLIENT_SETTING="${JACK_CLIENT_SETTING:=$HOME/.jack-settings}" 28 TMPDIR=${TMPDIR:=/tmp} 29 JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8}" 30 JACK_EXTRA_CURL_OPTIONS=${JACK_EXTRA_CURL_OPTIONS:=} 31 32 LAUNCHER_JAR="$JACK_HOME/launcher.jar" 33 LAUNCHER_NAME=com.android.jack.launcher.ServerLauncher 34 CURRENT_CHARSET=$(locale charmap) 35 if [ -z "$CURRENT_CHARSET" ]; then 36 CHARSET_ARGUMENT= 37 else 38 CHARSET_ARGUMENT=";charset=$CURRENT_CHARSET" 39 fi 40 41 JACK_LOGS_DIR="$JACK_HOME"/logs 42 JACK_OUT_ERR="$JACK_LOGS_DIR"/outputs.txt 43 JACK_CONNECTION_TIMEOUT=300 44 45 # 46 # Load client settings 47 # 48 if [ -f "$JACK_CLIENT_SETTING" ]; then 49 source "$JACK_CLIENT_SETTING" 50 fi 51 52 # 53 # Create or update client settings if needed 54 # 55 if [[ ! -f "$JACK_CLIENT_SETTING" || $SETTING_VERSION -lt 4 ]]; then 56 echo "Writing client settings in" $JACK_CLIENT_SETTING 57 cat >"$JACK_CLIENT_SETTING.$$" <<-EOT 58 # Server settings 59 SERVER_HOST=${SERVER_HOST:=localhost} 60 SERVER_PORT_SERVICE=${SERVER_PORT_SERVICE:=8076} 61 SERVER_PORT_ADMIN=${SERVER_PORT_ADMIN:=8077} 62 63 # Internal, do not touch 64 SETTING_VERSION=4 65 EOT 66 ln -f "$JACK_CLIENT_SETTING.$$" "$JACK_CLIENT_SETTING" 67 rm "$JACK_CLIENT_SETTING.$$" 68 source "$JACK_CLIENT_SETTING" 69 fi 70 71 usage () { 72 echo "Usage : $0 [ install-server <launcher.jar> <server.jar> | uninstall-server | list <program> | update <program> <program.jar> | start-server | stop-server | kill-server | list-server | server-stat | server-stat-reset | server-log | server-gc | cleanup-server | dump-report]" 73 } 74 75 abort () { exit 255; } 76 77 # 78 # $1: curl command status 79 # $2: HTTP status 80 # 81 handleHttpErrors() { 82 if [ $1 -eq 0 ]; then 83 # No problem, let's go 84 return 0; 85 elif [ $1 -eq 7 ]; then 86 echo "No Jack server running. Try 'jack-admin start-server'" >&2 87 abort 88 elif [ $1 -eq 35 ]; then 89 echo "SSL error when connecting to the Jack server. Try 'jack-diagnose'" >&2 90 abort 91 elif [ $1 -eq 58 ]; then 92 echo "Failed to contact Jack server: Problem reading ${JACK_HOME}/client.pem. Try 'jack-diagnose'" >&2 93 abort 94 elif [ $1 -eq 60 ]; then 95 echo "Failed to authenticate Jack server certificate. Try 'jack-diagnose'" >&2 96 abort 97 elif [ $1 -eq 77 ]; then 98 echo "Failed to contact Jack server: Problem reading ${JACK_HOME}/server.pem. Try 'jack-diagnose'" >&2 99 abort 100 elif [ $1 -eq 22 ]; then 101 # Http code not OK, let's decode and abort 102 if [ $2 -eq 400 ]; then 103 # 400: Bad request 104 echo "Bad request, see Jack server log" >&2 105 abort 106 else 107 # Other 108 echo "Internal unknown error ($2), try 'jack-diagnose' or see Jack server log" >&2 109 abort 110 fi 111 else 112 echo "Communication error with Jack server $1. Try 'jack-diagnose'" >&2 113 abort 114 fi 115 } 116 117 checkCurlVersion () { 118 curl --version | grep -q "SecureTransport" 119 if [ "$?" -eq 0 ]; then 120 echo "Unsupported curl, please use a curl not based on SecureTransport" >&2 121 abort 122 fi 123 } 124 125 # 126 # $1: program name 127 # $2: jar of the program 128 # 129 updateProgram () { 130 HTTP_CODE=$(curl -f $JACK_EXTRA_CURL_OPTIONS \ 131 --cert "${JACK_HOME}/client.pem" \ 132 --cacert "${JACK_HOME}/server.pem" \ 133 --output /dev/null \ 134 --no-buffer --write-out '%{http_code}' --silent --connect-timeout $JACK_CONNECTION_TIMEOUT \ 135 -X PUT \ 136 -F "jar=@$2;type=application/octet-stream" \ 137 -F "force=$FORCE_INSTALLATION;type=text/plain$CHARSET_ARGUMENT" \ 138 --noproxy ${SERVER_HOST} \ 139 https://${SERVER_HOST}:$SERVER_PORT_ADMIN/$1 \ 140 ) 141 handleHttpErrors $? $HTTP_CODE 142 143 if [ "$1" == server ]; then 144 echo "Server updated, waiting for restart" 145 waitServerStarted 146 fi 147 } 148 149 isServerRunning () { 150 RETRY_SESSION=3 151 DONE=1 152 let DATE_TIMEOUT=$(date +%s)+$JACK_CONNECTION_TIMEOUT 153 while [ "$DONE" -ne 0 ]; do 154 HTTP_CODE=$(curl -f $JACK_EXTRA_CURL_OPTIONS \ 155 --cert "${JACK_HOME}/client.pem" \ 156 --cacert "${JACK_HOME}/server.pem" \ 157 --output /dev/null \ 158 --no-buffer --write-out '%{http_code}' --silent --connect-timeout $JACK_CONNECTION_TIMEOUT \ 159 -X GET \ 160 -H "Accept: text/plain$CHARSET_ARGUMENT" \ 161 --noproxy ${SERVER_HOST} \ 162 https://${SERVER_HOST}:$SERVER_PORT_ADMIN/server \ 163 ) 164 CURL_CODE=$? 165 if [ $CURL_CODE -eq 0 ]; then 166 # No problem, let's go 167 return 0; 168 elif [ $CURL_CODE -eq 7 ]; then 169 return 1 170 else 171 # In case of partial, timeout, empty response, network error, let's retry 172 if [ $RETRY_SESSION -eq 0 ]; then 173 echo "Communication error with Jack server ($CURL_CODE), try 'jack-diagnose' or see Jack server log" >&2 174 abort 175 else 176 if [ $(date +%s) -lt $DATE_TIMEOUT ]; then 177 let RETRY_SESSION=RETRY_SESSION-1 178 else 179 echo "Communication error with Jack server ($CURL_CODE), try 'jack-diagnose' or see Jack server log" >&2 180 abort 181 fi 182 fi 183 fi 184 done 185 } 186 187 waitServerStarted () { 188 DONE=1 189 let DATE_TIMEOUT=$(date +%s)+$JACK_CONNECTION_TIMEOUT 190 while [ "$DONE" -ne 0 ]; do 191 HTTP_CODE=$(curl -f $JACK_EXTRA_CURL_OPTIONS \ 192 --cert "${JACK_HOME}/client.pem" \ 193 --cacert "${JACK_HOME}/server.pem" \ 194 --output /dev/null \ 195 --no-buffer --write-out '%{http_code}' --silent --connect-timeout $JACK_CONNECTION_TIMEOUT \ 196 -X GET \ 197 -H "Accept: text/plain$CHARSET_ARGUMENT" \ 198 --noproxy ${SERVER_HOST} \ 199 https://${SERVER_HOST}:$SERVER_PORT_ADMIN/server \ 200 ) 201 CURL_CODE=$? 202 if [ $CURL_CODE -eq 7 ] || [ $CURL_CODE -eq 35 ] || [ $CURL_CODE -eq 58 ] || [ $CURL_CODE -eq 60 ] || [ $CURL_CODE -eq 77 ]; then 203 if [ $(date +%s) -ge $DATE_TIMEOUT ]; then 204 echo "Jack server failed to (re)start, try 'jack-diagnose' or see Jack server log" >&2 205 abort 206 else 207 sleep 1 208 fi 209 else 210 # A connection was opened, no need to know if it went well 211 DONE=0; 212 fi 213 done 214 } 215 216 # 217 # $1: program name 218 # 219 listProgramVersion () { 220 exec 3>&1 221 HTTP_CODE=$(curl -f $JACK_EXTRA_CURL_OPTIONS \ 222 --cert "${JACK_HOME}/client.pem" \ 223 --cacert "${JACK_HOME}/server.pem" \ 224 --output >(tr -d '\015' >&3) \ 225 --no-buffer --write-out '%{http_code}' --silent --connect-timeout $JACK_CONNECTION_TIMEOUT \ 226 -X GET \ 227 -H "Accept: text/plain$CHARSET_ARGUMENT" \ 228 --noproxy ${SERVER_HOST} \ 229 https://${SERVER_HOST}:$SERVER_PORT_ADMIN/$1 \ 230 ) 231 handleHttpErrors $? $HTTP_CODE 232 exec 3>&- 233 } 234 235 # 236 # Decoding argument 237 # 238 if [ $# -eq 0 ] 239 then 240 usage 241 abort 242 fi 243 244 set +o errexit 245 246 FORCE_INSTALLATION=false 247 case $1 in 248 force-update) 249 FORCE_INSTALLATION=true 250 COMMAND=update;; 251 *) 252 COMMAND=$1;; 253 esac 254 255 case $COMMAND in 256 install-server) 257 if [ $# -ne 3 ]; then 258 usage 259 abort 260 fi 261 if [ ! -r "$2" ]; then 262 echo "Jack server launcher jar \"$2\" is not readable" >&2 263 abort 264 fi 265 if [ ! -r "$3" ]; then 266 echo "Jack server jar \"$3\" is not readable" >&2 267 abort 268 fi 269 270 checkCurlVersion 271 272 if [ ! -d "$JACK_HOME" ]; then 273 echo Installing jack server in \"$JACK_HOME\" 274 mkdir -p "$JACK_HOME" 275 cp $2 "$LAUNCHER_JAR" 276 cp $3 "$JACK_HOME/server-1.jar" 277 mkdir "$JACK_LOGS_DIR" 278 keytool -genkeypair -validity 3650 -alias server -keyalg RSA -keysize 2048 -keypass Jack-Server -storepass Jack-Server -dname "CN=$SERVER_HOST" -keystore "$JACK_HOME/server.jks" 279 keytool -genkeypair -validity 3650 -alias client -keyalg RSA -keysize 2048 -keypass Jack-Server -storepass Jack-Server -dname "CN=$(id -un)@$(uname -n)" -keystore "$JACK_HOME/client.jks" 280 else 281 echo "Jack server already installed in \"$JACK_HOME\"" >&2 282 abort 283 fi 284 exit 0 ;; 285 286 287 uninstall-server) 288 SERVERS_PID=$(ps -o "pid args" -u `id -u -n` | grep $LAUNCHER_NAME | grep -v grep | awk '{print $1}') 289 if [ -n "$SERVERS_PID" ]; then 290 echo "Jack server is running, please stop it before uninstall" >&2 291 echo "If you want to proceeed anyway, use '$0 force-uninstall-server'" >&2 292 exit 2 293 fi 294 295 if [ ! -d "$JACK_HOME" ]; then 296 echo "Jack server in \"$JACK_HOME\" not found" >&2 297 abort 298 fi 299 300 echo "Removing jack server from \"$JACK_HOME\"" 301 rm -rf "$JACK_HOME" 302 exit 0 ;; 303 304 305 force-uninstall-server) 306 if [ ! -d "$JACK_HOME" ]; then 307 echo "Jack server in \"$JACK_HOME\" not found" >&2 308 abort 309 fi 310 311 echo "Removing jack server from \"$JACK_HOME\"" 312 rm -rf "$JACK_HOME" 313 exit 0 ;; 314 315 316 list) 317 if [ $# -ne 2 ] 318 then 319 usage 320 abort 321 fi 322 323 listProgramVersion $2 ;; 324 325 326 update) 327 if [ $# -lt 3 ]; then 328 usage 329 abort 330 fi 331 332 if [ $# -gt 4 ]; then 333 usage 334 abort 335 fi 336 337 if [ ! -r "$3" ]; then 338 echo "Failed to update $2 of Jack server: \"$3\" is not readable" >&2 339 abort 340 fi 341 342 checkCurlVersion 343 344 if [ $FORCE_INSTALLATION = true ]; then 345 updateProgram $2 $3 346 else 347 if [ $# -eq 4 ]; then 348 HTTP_CODE=$(curl -f $JACK_EXTRA_CURL_OPTIONS \ 349 --cert "${JACK_HOME}/client.pem" \ 350 --cacert "${JACK_HOME}/server.pem" \ 351 --output /dev/null \ 352 --no-buffer --write-out '%{http_code}' --silent --connect-timeout $JACK_CONNECTION_TIMEOUT \ 353 -X HEAD \ 354 --data "$4" \ 355 -H "Content-Type:application/vnd.jack.select-exact;version=1" \ 356 --noproxy ${SERVER_HOST} \ 357 https://${SERVER_HOST}:$SERVER_PORT_ADMIN/$2 \ 358 ) 359 CURL_CODE=$? 360 if [ $CURL_CODE -eq 22 ]; then 361 if [ $HTTP_CODE -eq 404 ]; then 362 # version not found, proceed to installation 363 updateProgram $2 $3 364 exit 0 365 fi 366 fi 367 handleHttpErrors $CURL_CODE $HTTP_CODE 368 else 369 # No version provided, proceed directly without testing 370 updateProgram $2 $3 371 fi 372 fi 373 exit 0;; 374 375 376 stop-server) 377 echo "Stopping background server" 378 379 HTTP_CODE=$(curl -f $JACK_EXTRA_CURL_OPTIONS \ 380 --cert "${JACK_HOME}/client.pem" \ 381 --cacert "${JACK_HOME}/server.pem" \ 382 --output /dev/null \ 383 --no-buffer --write-out '%{http_code}' --silent --connect-timeout $JACK_CONNECTION_TIMEOUT \ 384 -X POST \ 385 --noproxy ${SERVER_HOST} \ 386 https://${SERVER_HOST}:$SERVER_PORT_ADMIN/server/stop \ 387 ) 388 handleHttpErrors $? $HTTP_CODE ;; 389 390 391 server-stat) 392 echo "Getting statistic from background server" 393 394 exec 3>&1 395 HTTP_CODE=$(curl -f $JACK_EXTRA_CURL_OPTIONS \ 396 --cert "${JACK_HOME}/client.pem" \ 397 --cacert "${JACK_HOME}/server.pem" \ 398 --output >(tr -d '\015' >&3) \ 399 --no-buffer --write-out '%{http_code}' --silent --connect-timeout $JACK_CONNECTION_TIMEOUT \ 400 -X GET \ 401 -H "Accept: text/plain$CHARSET_ARGUMENT" \ 402 --noproxy ${SERVER_HOST} \ 403 https://${SERVER_HOST}:$SERVER_PORT_ADMIN/stat \ 404 ) 405 handleHttpErrors $? $HTTP_CODE 406 exec 3>&- ;; 407 408 409 server-stat-reset) 410 echo "Reseting peak statistics from the background server" 411 412 HTTP_CODE=$(curl -f $JACK_EXTRA_CURL_OPTIONS \ 413 --cert "${JACK_HOME}/client.pem" \ 414 --cacert "${JACK_HOME}/server.pem" \ 415 --output /dev/null \ 416 --no-buffer --write-out '%{http_code}' --silent --connect-timeout $JACK_CONNECTION_TIMEOUT \ 417 -X DELETE \ 418 --noproxy ${SERVER_HOST} \ 419 https://${SERVER_HOST}:$SERVER_PORT_ADMIN/stat \ 420 ) 421 handleHttpErrors $? $HTTP_CODE ;; 422 423 424 server-log) 425 exec 3>&1 426 HTTP_CODE=$(curl -f $JACK_EXTRA_CURL_OPTIONS \ 427 --cert "${JACK_HOME}/client.pem" \ 428 --cacert "${JACK_HOME}/server.pem" \ 429 --output >(tr -d '\015' >&3) \ 430 --no-buffer --write-out '%{http_code}' --silent --connect-timeout $JACK_CONNECTION_TIMEOUT \ 431 -X GET \ 432 -H "Accept: text/plain$CHARSET_ARGUMENT" \ 433 --noproxy ${SERVER_HOST} \ 434 https://${SERVER_HOST}:$SERVER_PORT_ADMIN/launcher/log \ 435 ) 436 handleHttpErrors $? $HTTP_CODE 437 exec 3>&- ;; 438 439 440 kill-server) 441 echo "Killing background server" 442 SERVERS_PID=$(ps -o "pid args" -u `id -u -n` | grep $LAUNCHER_NAME | grep -v grep | awk '{print $1}') 443 if [ -z "$SERVERS_PID" ]; then 444 echo "No Jack server to kill" >&2 445 exit 2 446 fi 447 448 for PID in $SERVERS_PID; do 449 kill $PID 2>/dev/null 450 TIMEOUT=30 451 while [ "$TIMEOUT" -ne 0 ]; do 452 kill -0 $PID 2>/dev/null 453 if [ $? -ne 0 ]; then 454 continue 2 455 fi 456 sleep 1 457 let TIMEOUT=TIMEOUT-1 458 done 459 kill -KILL $PID 2>/dev/null 460 DONE=$? 461 while [ $DONE -eq 0 ]; do 462 kill -0 $PID 2>/dev/null 463 DONE=$? 464 sleep 1 465 done 466 done 467 468 exit 0 ;; 469 470 471 list-server) 472 ps -A -o "user pid args" | grep $LAUNCHER_NAME | grep -v grep 473 exit $? ;; 474 475 476 start-server) 477 if [ ! -d "$JACK_HOME" ]; then 478 echo "Jack server installation not found" >&2 479 abort 480 fi 481 482 isServerRunning 483 RUNNING=$? 484 if [ "$RUNNING" = 0 ]; then 485 echo "Server is already running" 486 else 487 JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME" 488 echo "Launching Jack server" $JACK_SERVER_COMMAND 489 ( 490 trap "" SIGHUP 491 for i in $(seq 3 255); do 492 eval exec "$i"'>&-' 493 done 494 cd "$JACK_HOME" 495 umask $BASE_UMASK 496 exec $JACK_SERVER_COMMAND 497 abort 498 ) >"$JACK_OUT_ERR" 2>&1 & 499 fi 500 501 waitServerStarted 502 exit 0 ;; 503 504 505 server-log-level) 506 if [ $# -eq 4 ] 507 then 508 LIMIT=$3 509 COUNT=$4 510 elif [ $# -eq 2 ] 511 then 512 COUNT=5 513 if [ \( "$2" = "ERROR" \) -o \( "$2" = "WARNING" \) ] 514 then 515 LIMIT=1048576 516 else 517 LIMIT=10485760 518 fi 519 else 520 usage 521 abort 522 fi 523 524 echo "Setting logging parameters of background server" 525 526 HTTP_CODE=$(curl --fail $JACK_EXTRA_CURL_OPTIONS \ 527 --cert "${JACK_HOME}/client.pem" \ 528 --cacert "${JACK_HOME}/server.pem" \ 529 --output /dev/null \ 530 --no-buffer --write-out '%{http_code}' --silent --connect-timeout $JACK_CONNECTION_TIMEOUT \ 531 --request PUT \ 532 --form "level=$2;type=text/plain$CHARSET_ARGUMENT" \ 533 --form "limit=$LIMIT;type=text/plain$CHARSET_ARGUMENT" \ 534 --form "count=$COUNT;type=text/plain$CHARSET_ARGUMENT" \ 535 --noproxy ${SERVER_HOST} \ 536 https://${SERVER_HOST}:$SERVER_PORT_ADMIN/launcher/log/level \ 537 ) 538 handleHttpErrors $? $HTTP_CODE ;; 539 540 541 server-gc) 542 echo "Requesting a garbage collection to the background server" 543 544 HTTP_CODE=$(curl -f $JACK_EXTRA_CURL_OPTIONS \ 545 --cert "${JACK_HOME}/client.pem" \ 546 --cacert "${JACK_HOME}/server.pem" \ 547 --output /dev/null \ 548 --no-buffer --write-out '%{http_code}' --silent --connect-timeout $JACK_CONNECTION_TIMEOUT \ 549 -X POST \ 550 --noproxy ${SERVER_HOST} \ 551 https://${SERVER_HOST}:$SERVER_PORT_ADMIN/gc \ 552 ) 553 handleHttpErrors $? $HTTP_CODE ;; 554 555 556 # 557 # Should be run when server is off. Allows to clean files that could be forgotten on disk in case of 558 # server VM crash after an update. 559 # 560 cleanup-server) 561 shopt -s nullglob 562 for file in $JACK_HOME/jack/*.deleted; do 563 rm "${file%.deleted}" 564 rm "$file" 565 done 566 exit 0 ;; 567 568 569 dump-report) 570 if [ ! -d "$JACK_HOME" ]; then 571 echo "Failed to locate Jack server installation" >&2 572 abort 573 fi 574 575 echo "Creating report..." 576 REPORT="jack-report.$$.zip" 577 REPORT_PATH="$(pwd)/$REPORT" 578 REPORT_INFO="$JACK_HOME/report.$$.txt" 579 580 if [ -e "$REPORT" ]; then 581 echo "Failed to create Jack server report '$REPORT', file already exists" >&2 582 abort 583 fi 584 585 trap 'rm -f "$REPORT_INFO" 2>/dev/null;' EXIT 586 587 date >>"$REPORT_INFO" 2>&1 588 589 echo "Dumping Jack server stacks..." 590 echo >>"$REPORT_INFO" 591 echo "\$ ps -o \"pid args\" | grep $LAUNCHER_NAME | grep -v grep | awk '{print $1}' | xargs kill -3" >>"$REPORT_INFO" 592 (ps -o "pid args" | grep $LAUNCHER_NAME | grep -v grep | awk '{print $1}' | xargs kill -3) >>"$REPORT_INFO" 2>&1 593 594 echo "Getting current user id..." 595 echo >>"$REPORT_INFO" 596 echo "\$ id -u" >>"$REPORT_INFO" 597 id -u >>"$REPORT_INFO" 598 599 echo "Listing Jack server process..." 600 echo >>"$REPORT_INFO" 601 echo "\$ ps -A -o \"uid pid args\" | grep $LAUNCHER_NAME | grep -v grep" >>"$REPORT_INFO" 602 (ps -A -o "uid pid args" | grep $LAUNCHER_NAME | grep -v grep) >>"$REPORT_INFO" 2>&1 603 604 echo "Listing process using Jack server service port $SERVER_PORT_SERVICE..." 605 echo >>"$REPORT_INFO" 606 echo "\$ lsof -i TCP:$SERVER_PORT_SERVICE -l" >>"$REPORT_INFO" 607 lsof -i TCP:$SERVER_PORT_SERVICE -l >>"$REPORT_INFO" 2>&1 608 609 echo "Listing process using Jack server admin port $SERVER_PORT_ADMIN..." 610 echo >>"$REPORT_INFO" 611 echo "\$ lsof -i TCP:$SERVER_PORT_ADMIN -l" >>"$REPORT_INFO" 612 lsof -i TCP:$SERVER_PORT_ADMIN -l >>"$REPORT_INFO" 2>&1 613 614 echo "Collecting Jack client configuration..." 615 echo >>"$REPORT_INFO" 616 echo "\$ cat \"\$JACK_CLIENT_SETTING\"" >>"$REPORT_INFO" 617 cat "$JACK_CLIENT_SETTING" >>"$REPORT_INFO" 2>&1 618 619 echo "Listing Jack server installation dir..." 620 echo >>"$REPORT_INFO" 621 echo "\$ cd \"\$JACK_HOME\"; ls -l -R -n ." >>"$REPORT_INFO" 622 (cd "$JACK_HOME" ; ls -l -R -n . >>"$REPORT_INFO" 2>&1) 623 624 echo "Collecting curl version..." 625 echo >>"$REPORT_INFO" 626 echo "\$ curl --version" >>"$REPORT_INFO" 627 curl --version >>"$REPORT_INFO" 2>&1 628 629 echo "Collecting curl connection info..." 630 echo >>"$REPORT_INFO" 631 echo "\$ JACK_EXTRA_CURL_OPTIONS=-v jack-admin list server" >>"$REPORT_INFO" 632 JACK_EXTRA_CURL_OPTIONS=-v "$0" list server >>"$REPORT_INFO" 2>&1 633 634 echo "Collecting Jack server stats..." 635 echo >>"$REPORT_INFO" 636 echo "\$ jack-admin server-stat" >>"$REPORT_INFO" 637 "$0" server-stat >>"$REPORT_INFO" 2>&1 638 639 echo "Collecting base64 info..." 640 echo >>"$REPORT_INFO" 641 echo "\$ base64 --version" >>"$REPORT_INFO" 642 base64 --version >>"$REPORT_INFO" 2>&1 643 echo >>"$REPORT_INFO" 644 echo "\$ (echo amFjaw==;echo LXNlcnZlcg==) | base64 --decode" >>"$REPORT_INFO" 645 (echo amFjaw==;echo LXNlcnZlcg==) | base64 --decode >>"$REPORT_INFO" 2>&1 646 647 echo "Zipping Jack server installation dir except keys and certificates..." 648 (cd "$JACK_HOME"; zip --exclude \*.pem \*.jks --recurse-paths "$REPORT_PATH" .) >/dev/null 649 echo "Jack server report saved in '$REPORT'. Consider reviewing content before publishing." 650 exit 0 ;; 651 652 653 *) 654 usage 655 abort ;; 656 esac 657 658 659 # Exit 660 661 exit 0 662