diff --git a/startup_scripts/looker21 b/startup_scripts/looker21 new file mode 100755 index 0000000..b42c15d --- /dev/null +++ b/startup_scripts/looker21 @@ -0,0 +1,176 @@ +#!/bin/sh + +# +# This is the startup script for Looker using OpenJDK 21. Looker supports +# OpenJDK 21 starting with the 26.4 release +# + +JAVA_VER=$(java -version 2>&1 | grep 'version "' | head -1 | cut -d'"' -f2 | sed '/^1\./s///' | cut -d'.' -f1) +if [ "$JAVA_VER" != "21" ]; then + WHERE=`which java` + echo "This script runs with OpenJDK 21, your executable $WHERE has Java major version $JAVA_VER" + exit 1 +fi + +cd "$HOME/looker" || exit 1 +# set your java memory- there should be over 1.5G of system memory +# left to run the OS +MEM=$(cat /proc/meminfo 2>/dev/null | grep MemTotal | awk '{print $2}') +if [ -n "$MEM" ]; then + JM=$((MEM * 6 / 10)) + JAVAMEM="${JM}k" +else + JAVAMEM="2048m" +fi +METAMEM="800m" + +# Extra Java startup args and Looker startup args. These can also be set in +# a file named lookerstart.cfg +JMXARGS="-Dcom.sun.akuma.jvmarg.com.sun.management.jmxremote -Dcom.sun.akuma.jvmarg.com.sun.management.jmxremote.port=9910 -Dcom.sun.akuma.jvmarg.com.sun.management.jmxremote.ssl=false -Dcom.sun.akuma.jvmarg.com.sun.management.jmxremote.local.only=false -Dcom.sun.akuma.jvmarg.com.sun.management.jmxremote.authenticate=true -Dcom.sun.akuma.jvmarg.com.sun.management.jmxremote.access.file=${HOME}/.lookerjmx/jmxremote.access -Dcom.sun.akuma.jvmarg.com.sun.management.jmxremote.password.file=${HOME}/.lookerjmx/jmxremote.password" + +# Starting with JDK9 some reflective accesses log warning messages, these java +# args increase module visibility and so suppress the output +REFLECTIVE_ACCESS_ARGS="--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED" + +# JVM flags for JDK 21 module visibility (primarily for JRuby compatibility) +JDK21_MODULE_ARGS="--add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED" + +# to set up JMX monitoring, add JMXARGS to JAVAARGS +JAVAARGS="" +LOOKERARGS="--force-gcm-encryption" + +# check for a lookerstart.cfg file to set JAVAARGS and LOOKERARGS +if [ -r ./lookerstart.cfg ]; then + . ./lookerstart.cfg +fi + +# check if --no-ssl is specified in LOOKERARGS and set protocol accordingly +PROTOCOL="" + +echo "${LOOKERARGS}" | grep -q "\-\-no\-ssl" +if [ $? -eq 0 ] +then + PROTOCOL='http' +else + PROTOCOL='https' +fi +LOOKERPORT=${LOOKERPORT:-"9999"} + +start() { + if [ -e .deploying ]; then + echo "Startup suppressed: ${PWD}/.deploying file exists. Remove .deploying file to allow startup" + exit 1 + fi + + LOCKFILE=.starting + if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then + echo "Startup suppressed: ${LOCKFILE} contains running pid, startup script is already running" + exit 1 + fi + + # make sure the lockfile is removed when we exit and then claim it + trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT + echo $$ > ${LOCKFILE} + + fixcrypt + java \ + -XX:+UseG1GC -XX:MaxGCPauseMillis=2000 -XX:MaxMetaspaceSize=$METAMEM \ + -Xms$JAVAMEM -Xmx$JAVAMEM \ + -Xlog:gc*,gc+ref=debug,gc+heap=debug,gc+age=debug:file=/tmp/gc-%p-%t.log:tags,uptime,time,level:filecount=7,filesize=10m \ + ${REFLECTIVE_ACCESS_ARGS} \ + ${JDK21_MODULE_ARGS} \ + ${JAVAARGS} \ + -jar looker.jar start ${LOOKERARGS} + + if [ -x ./tunnel ]; then + ./tunnel start + fi + + rm -f ${LOCKFILE} +} + +stop() { + if [ ! -f .tmp/looker.pid ]; then + echo "Error: .tmp/looker.pid not found." + exit 1 + fi + pid=$(cat .tmp/looker.pid) + if [ -f .status_server_token ] && [ -x /usr/bin/curl ]; then + state="running" + token=$(cat .status_server_token) + request="control/stop?token=${token}" + timeout 20 curl -m 10 -ks ${PROTOCOL}://127.0.0.1:${LOOKERPORT}/${request} > /dev/null 2>&1 + ECODE=$? + [ $ECODE -eq 7 ] && state="stopped" + if [ $ECODE -gt 7 ] ; then + kill $pid + fi + i=1 + while [ $i -le 30 ]; do + timeout 20 curl -m 5 -ks ${PROTOCOL}://127.0.0.1:${LOOKERPORT}/alive > /dev/null 2>&1 + ECODE=$? + if [ $ECODE -eq 7 ]; then + state="stopped" + break + fi + if [ $ECODE -gt 7 ] ; then + kill -9 $pid + fi + sleep 1 + i=$((i + 1)) + done + if [ "${state}" = "running" ]; then + echo "Force Stop Looker Web Application" + kill $pid + kill -0 $pid && kill -9 $pid + fi + else + timeout 20 java -jar looker.jar stop + if [ $? -ne 0 ]; then + kill -9 $pid + fi + fi +} + +fixcrypt() { + CRYPTEXIST=`/sbin/ldconfig -p | grep -c '\slibcrypt.so\s'` + + if [ $CRYPTEXIST -eq 0 ]; then + if [ ! -d .tmp ]; then + mkdir .tmp + fi + CRYPTLN=`/sbin/ldconfig -p | grep '\slibcrypt\.so\.[[:digit:]]' | awk '{print $(NF)}'` + ln -s -f $CRYPTLN `pwd`/.tmp/libcrypt.so + export LD_LIBRARY_PATH=`pwd`/.tmp/:$LD_LIBRARY_PATH + fi +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + echo "Restarting Looker Web Application" "looker" + stop + sleep 3 + start + ;; + status) + curl -ks ${PROTOCOL}://127.0.0.1:${LOOKERPORT}/alive > /dev/null 2>&1 + if [ $? -eq 7 ]; then + echo "Status:Looker Web Application stopped" + exit 7 + else + echo "Status:Looker Web Application running" + exit 0 + fi + ;; + *) + java -jar looker.jar $* + ;; +esac + +exit 0