diff --git a/auto-fix-qortal.sh b/auto-fix-qortal.sh index 1cec81a..6c7d1ff 100644 --- a/auto-fix-qortal.sh +++ b/auto-fix-qortal.sh @@ -13,6 +13,7 @@ NC='\033[0m' # No Color PI_32_DETECTED=false PI_64_DETECTED=false +UPDATED_SETTINGS=false # Function to update the script initial_update() { @@ -476,48 +477,55 @@ force_bootstrap() { } potentially_update_settings() { - - echo "${GREEN}Backing up settings to backup-settings.json...${NC}" + echo "${GREEN}Backing up settings to a timestamped backup file...${NC}" echo "${YELLOW}Changing to qortal directory...${NC}" cd "${HOME}/qortal" - cp settings.json backup-settings.json + if [ ${SETTINGS_UPDATED} ]; then + echo "${YELLOW} Settings already updated this run, no need to attempt again...${NC}" + return + fi + + TIMESTAMP=$(date +%Y%m%d%H%M%S) + BACKUP_FILE="backup-settings-${TIMESTAMP}.json" + cp settings.json "${BACKUP_FILE}" SETTINGS_FILE="settings.json" echo "${YELLOW}Checking for${NC} ${GREEN}archivingPause${NC} ${YELLOW}setting...${NC}" if grep -q '"archivingPause"' "${SETTINGS_FILE}"; then - echo "${BLUE}archivingPause exists...${NC}${GREEN} updating value...${NC}" + echo "${BLUE}archivingPause exists...${NC}${GREEN} removing it...${NC}" if command -v jq &> /dev/null; then echo "${GREEN}jq exists,${NC}${YELLOW} using jq to modify setting...${NC}" - jq '.archivingPause = 999999999999' "${SETTINGS_FILE}" > "settings.tmp" && mv "settings.tmp" "${SETTINGS_FILE}" - if [ $? -ne 0 ]; then - echo "${RED}jq edit failed${NC}, ${YELLOW}modifying with sed...${NC}" - sed -i 's/"archivingPause"[[:space:]]*:[[:space:]]*[0-9]*/"archivingPause": 999999999999/' "${SETTINGS_FILE}" + jq 'del(.archivingPause)' "${SETTINGS_FILE}" > "settings.tmp" + if [ $? -eq 0 ]; then + mv "settings.tmp" "${SETTINGS_FILE}" + SETTINGS_UPDATED=true + else + echo "${RED}jq edit failed, restoring backup...${NC}" + mv "${BACKUP_FILE}" "${SETTINGS_FILE}" + return 1 fi else - echo "${BLUE}jq doesn't exist, modifying with sed...${NC}" - sed -i 's/"archivingPause"[[:space:]]*:[[:space:]]*[0-9]*/"archivingPause": 999999999999/' "${SETTINGS_FILE}" + echo "${BLUE}jq doesn't exist, modifying with sed...${NC}" + sed -i '/"archivingPause"[[:space:]]*:/d' "${SETTINGS_FILE}" + if [ $? -ne 0 ]; then + echo "${RED}sed edit failed, restoring backup...${NC}" + mv "${BACKUP_FILE}" "${SETTINGS_FILE}" + return 1 + fi + SETTINGS_UPDATED=true fi else - echo "${BLUE}archivingPause doesn't exist, adding...${NC}" - if command -v jq &> /dev/null; then - echo "${BLUE}jq exists, adding with jq...${NC}" - jq '. + {archivingPause: 999999999999}' "${SETTINGS_FILE}" > "settings.tmp" && mv "settings.tmp" "${SETTINGS_FILE}" - if [ $? -ne 0 ]; then - echo "${RED}jq edit failed, modifying with sed...${NC}" - sed -i 's/}$/,"archivingPause": 999999999999}/' "${SETTINGS_FILE}" - fi - else - echo "${BLUE}jq doesn't exist, adding with sed...${NC}" - sed -i 's/}$/,"archivingPause": 999999999999}/' "${SETTINGS_FILE}" - fi - fi + echo "${BLUE}archivingPause does not exist, no changes needed...${NC}" + fi echo "${GREEN}Settings modification complete.${NC}" cd "${HOME}" + return 0 } + update_script() { echo "${YELLOW}Updating script to newest version and backing up old one...${NC}\n" mkdir -p "${HOME}/qortal/new-scripts/backups" diff --git a/start-32bit.sh b/start-32bit.sh new file mode 100644 index 0000000..76341d7 --- /dev/null +++ b/start-32bit.sh @@ -0,0 +1,65 @@ +#!/bin/sh + +# There's no need to run as root, so don't allow it, for security reasons +if [ "$USER" = "root" ]; then + echo "Please su to non-root user before running" + exit +fi + +# Validate Java is installed and the minimum version is available +MIN_JAVA_VER='11' + +if command -v java > /dev/null 2>&1; then + # Example: openjdk version "11.0.6" 2020-01-14 + version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | cut -d'.' -f1,2) + if echo "${version}" "${MIN_JAVA_VER}" | awk '{ if ($2 > 0 && $1 >= $2) exit 0; else exit 1}'; then + echo 'Passed Java version check' + else + echo "Please upgrade your Java to version ${MIN_JAVA_VER} or greater" + exit 1 + fi +else + echo "Java is not available, please install Java ${MIN_JAVA_VER} or greater" + exit 1 +fi + +# No qortal.jar but we have a Maven built one? +# Be helpful and copy across to correct location +if [ ! -e qortal.jar -a -f target/qortal*.jar ]; then + echo "Copying Maven-built Qortal JAR to correct pathname" + cp target/qortal*.jar qortal.jar +fi + +# Limits Java JVM stack size and maximum heap usage. +# Comment out for bigger systems, e.g. non-routers +# or when API documentation is enabled +JVM_MEMORY_ARGS="-Xss1256k -Xms1750m -Xmx1750m" +#JVM_MEMORY_ARGS=" + -Xms1750m \ + -Xmx1750m \ + -Xss1212k \ + -XX:+HeapDumpOnOutOfMemoryError \ + -XX:HeapDumpPath=./heapdump.hprof \ + -XX:+UseG1GC \ + -XX:MaxGCPauseMillis=300 \ + -XX:InitiatingHeapOccupancyPercent=50 \ + -XX:ParallelGCThreads=4 \ + -XX:ConcGCThreads=2 \ + -XX:G1HeapRegionSize=32m \ + -XX:MaxTenuringThreshold=10 \ + -XX:+AlwaysPreTouch +" + +# Although java.net.preferIPv4Stack is supposed to be false +# by default in Java 11, on some platforms (e.g. FreeBSD 12), +# it is overridden to be true by default. Hence we explicitly +# set it to false to obtain desired behaviour. +nohup nice -n 15 java \ + -Djava.net.preferIPv4Stack=false \ + ${JVM_MEMORY_ARGS} \ + -jar qortal.jar \ + 1>run.log 2>&1 & + +# Save backgrounded process's PID +echo $! > run.pid +echo qortal running as pid $! diff --git a/4GB-start.sh b/start-4GB.sh similarity index 90% rename from 4GB-start.sh rename to start-4GB.sh index 0cb63ea..b426992 100644 --- a/4GB-start.sh +++ b/start-4GB.sh @@ -33,8 +33,8 @@ fi # Limits Java JVM stack size and maximum heap usage. # Comment out for bigger systems, e.g. non-routers # or when API documentation is enabled -#JVM_MEMORY_ARGS="-XX:MaxRAMPercentage=60 -XX:+UseG1GC -Xss512k -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapdump.hprof -Xlog:gc*:file=gc.log:time,uptime,level,tags" -JVM_MEMORY_ARGS=" +JVM_MEMORY_ARGS="-XX:MaxRAMPercentage=80 -XX:+UseG1GC -Xss1024k" +#JVM_MEMORY_ARGS=" -Xms2600m \ -Xmx2600m \ -Xss1024k \ diff --git a/start-6001-to-16000m.sh b/start-6001-to-16000m.sh index 425d3dc..0dd874c 100644 --- a/start-6001-to-16000m.sh +++ b/start-6001-to-16000m.sh @@ -33,8 +33,8 @@ fi # Limits Java JVM stack size and maximum heap usage. # Comment out for bigger systems, e.g. non-routers # or when API documentation is enabled -#JVM_MEMORY_ARGS="-XX:MaxRAMPercentage=40 -XX:+UseG1GC -Xss512k -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapdump.hprof" -JVM_MEMORY_ARGS=" +JVM_MEMORY_ARGS="-XX:MaxRAMPercentage40 -XX:+UseG1GC -Xss512k" +#JVM_MEMORY_ARGS=" -Xms6000m \ -Xmx6000m \ -Xss2048k \ diff --git a/start-high-RAM.sh b/start-high-RAM.sh index 1c90d5a..adc74f4 100644 --- a/start-high-RAM.sh +++ b/start-high-RAM.sh @@ -34,8 +34,8 @@ fi # Comment out for bigger systems, e.g. non-routers # or when API documentation is enabled # Uncomment (remove '#' sign) line below if your system has less than 12GB of RAM for optimal RAM defaults -#JVM_MEMORY_ARGS="-XX:MaxRAMPercentage=40 -XX:+UseG1GC -Xss512k -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapdump.hprof" -JVM_MEMORY_ARGS=" +JVM_MEMORY_ARGS="-XX:MaxRAMPercentage=40 -XX:+UseG1GC -Xss1024k" +#JVM_MEMORY_ARGS=" -Xms8000m \ -Xmx8000m \ -Xss4096k \ diff --git a/start-modified-memory-args.sh b/start-modified-memory-args.sh index b7b52c0..76341d7 100644 --- a/start-modified-memory-args.sh +++ b/start-modified-memory-args.sh @@ -33,8 +33,8 @@ fi # Limits Java JVM stack size and maximum heap usage. # Comment out for bigger systems, e.g. non-routers # or when API documentation is enabled -#JVM_MEMORY_ARGS="-Xss1256k -Xms1750m -Xmx1750m" -JVM_MEMORY_ARGS=" +JVM_MEMORY_ARGS="-Xss1256k -Xms1750m -Xmx1750m" +#JVM_MEMORY_ARGS=" -Xms1750m \ -Xmx1750m \ -Xss1212k \