From 9ffb2ccfb0858528f0310a2ba8b27c457947d5af Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Mon, 1 Jun 2020 22:45:11 -0400 Subject: [PATCH] Revert "scripts: Various shell script cleanups (#4008)" This reverts commit fba4fd53146fc85043e47ed26e96a7dc93bb10d6. The series of commits I made for PR #4008 were squashed into a single commit and rebased. Somewhere along the way a mistake was made in a merge conflict resolution, resulting in some bad code in `bin/buildForWindows.sh`. This commit reverts the bad squashed commit. --- bin/buildForWindows.sh | 52 ++++++++++------------------ bin/debugRun.sh | 15 +++++--- bin/installDeps.sh | 77 +++++++++++++++++++++++++----------------- bin/run.sh | 40 +++++++++++----------- bin/safeRun.sh | 77 +++++++++++++++++++++--------------------- 5 files changed, 132 insertions(+), 129 deletions(-) diff --git a/bin/buildForWindows.sh b/bin/buildForWindows.sh index b991b7ce3..e4ca9a883 100755 --- a/bin/buildForWindows.sh +++ b/bin/buildForWindows.sh @@ -1,23 +1,5 @@ #!/bin/sh -pecho() { printf %s\\n "$*"; } -log() { pecho "$@"; } -error() { log "ERROR: $@" >&2; } -fatal() { error "$@"; exit 1; } -is_cmd() { command -v "$@" >/dev/null 2>&1; } - -# Move to the folder where ep-lite is installed -cd "$(dirname "$0")"/.. - -# Is wget installed? -is_cmd wget || fatal "Please install wget" - -# Is zip installed? -is_cmd zip || fatal "Please install zip" - -# Is zip installed? -is_cmd unzip || fatal "Please install unzip" -======= #Move to the folder where ep-lite is installed cd $(dirname $0) @@ -47,9 +29,9 @@ hash unzip > /dev/null 2>&1 || { START_FOLDER=$(pwd); TMP_FOLDER=$(mktemp -d) -log "create a clean environment in $TMP_FOLDER..." -cp -ar . "$TMP_FOLDER" -cd "$TMP_FOLDER" +echo "create a clean environment in $TMP_FOLDER..." +cp -ar . $TMP_FOLDER +cd $TMP_FOLDER rm -rf node_modules rm -f etherpad-lite-win.zip @@ -57,33 +39,33 @@ rm -f etherpad-lite-win.zip # making the windows package smaller export NODE_ENV=production -log "do a normal unix install first..." +echo "do a normal unix install first..." bin/installDeps.sh || exit 1 -log "copy the windows settings template..." +echo "copy the windows settings template..." cp settings.json.template settings.json -log "resolve symbolic links..." +echo "resolve symbolic links..." cp -rL node_modules node_modules_resolved rm -rf node_modules mv node_modules_resolved node_modules -log "download windows node..." +echo "download windows node..." cd bin wget "https://nodejs.org/dist/latest-erbium/win-x86/node.exe" -O ../node.exe -log "remove git history to reduce folder size" +echo "remove git history to reduce folder size" rm -rf .git/objects -log "remove windows jsdom-nocontextify/test folder" -rm -rf "$TMP_FOLDER"/src/node_modules/wd/node_modules/request/node_modules/form-data/node_modules/combined-stream/test -rm -rf "$TMP_FOLDER"/src/node_modules/nodemailer/node_modules/mailcomposer/node_modules/mimelib/node_modules/encoding/node_modules/iconv-lite/encodings/tables +echo "remove windows jsdom-nocontextify/test folder" +rm -rf $TMP_FOLDER/src/node_modules/wd/node_modules/request/node_modules/form-data/node_modules/combined-stream/test +rm -rf $TMP_FOLDER/src/node_modules/nodemailer/node_modules/mailcomposer/node_modules/mimelib/node_modules/encoding/node_modules/iconv-lite/encodings/tables -log "create the zip..." -cd "$TMP_FOLDER" -zip -9 -r "$START_FOLDER"/etherpad-lite-win.zip ./* +echo "create the zip..." +cd $TMP_FOLDER +zip -9 -r $START_FOLDER/etherpad-lite-win.zip ./* -log "clean up..." -rm -rf "$TMP_FOLDER" +echo "clean up..." +rm -rf $TMP_FOLDER -log "Finished. You can find the zip in the Etherpad root folder, it's called etherpad-lite-win.zip" \ No newline at end of file +echo "Finished. You can find the zip in the Etherpad root folder, it's called etherpad-lite-win.zip" diff --git a/bin/debugRun.sh b/bin/debugRun.sh index d9b18aaa2..246d53900 100755 --- a/bin/debugRun.sh +++ b/bin/debugRun.sh @@ -1,15 +1,20 @@ #!/bin/sh -# Move to the folder where ep-lite is installed -cd "$(dirname "$0")"/.. +#Move to the folder where ep-lite is installed +cd $(dirname $0) -# Prepare the environment +#Was this script started in the bin folder? if yes move out +if [ -d "../bin" ]; then + cd "../" +fi + +#Prepare the environment bin/installDeps.sh || exit 1 echo "If you are new to debugging Node.js with Chrome DevTools, take a look at this page:" echo "https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27" echo "Open 'chrome://inspect' on Chrome to start debugging." -# Use 0.0.0.0 to allow external connections to the debugger -# (ex: running Etherpad on a docker container). Use default port # (9229) +#Use 0.0.0.0 to allow external connections to the debugger +#(ex: running Etherpad on a docker container). Use default port # (9229) node --inspect=0.0.0.0:9229 node_modules/ep_etherpad-lite/node/server.js "$@" diff --git a/bin/installDeps.sh b/bin/installDeps.sh index 5e0bbb931..cac279e11 100755 --- a/bin/installDeps.sh +++ b/bin/installDeps.sh @@ -8,12 +8,6 @@ REQUIRED_NODE_MINOR=13 REQUIRED_NPM_MAJOR=5 REQUIRED_NPM_MINOR=5 -pecho() { printf %s\\n "$*"; } -log() { pecho "$@"; } -error() { log "ERROR: $@" >&2; } -fatal() { error "$@"; exit 1; } -is_cmd() { command -v "$@" >/dev/null 2>&1; } - require_minimal_version() { PROGRAM_LABEL="$1" VERSION_STRING="$2" @@ -22,50 +16,71 @@ require_minimal_version() { # Flag -s (--only-delimited on GNU cut) ensures no string is returned # when there is no match - DETECTED_MAJOR=$(pecho "$VERSION_STRING" | cut -s -d "." -f 1) - DETECTED_MINOR=$(pecho "$VERSION_STRING" | cut -s -d "." -f 2) + DETECTED_MAJOR=$(echo $VERSION_STRING | cut -s -d "." -f 1) + DETECTED_MINOR=$(echo $VERSION_STRING | cut -s -d "." -f 2) - [ -n "$DETECTED_MAJOR" ] || fatal "Cannot extract $PROGRAM_LABEL major version from version string \"$VERSION_STRING\"" + if [ -z "$DETECTED_MAJOR" ]; then + printf 'Cannot extract %s major version from version string "%s"\n' "$PROGRAM_LABEL" "$VERSION_STRING" >&2 + exit 1 + fi - [ -n "$DETECTED_MINOR" ] || fatal "Cannot extract $PROGRAM_LABEL minor version from version string \"$VERSION_STRING\"" + if [ -z "$DETECTED_MINOR" ]; then + printf 'Cannot extract %s minor version from version string "%s"\n' "$PROGRAM_LABEL" "$VERSION_STRING" >&2 + exit 1 + fi case "$DETECTED_MAJOR" in ''|*[!0-9]*) - fatal "$PROGRAM_LABEL major version from \"$VERSION_STRING\" is not a number. Detected: \"$DETECTED_MAJOR\"" + printf '%s major version from "%s" is not a number. Detected: "%s"\n' "$PROGRAM_LABEL" "$VERSION_STRING" "$DETECTED_MAJOR" >&2 + exit 1 ;; esac case "$DETECTED_MINOR" in ''|*[!0-9]*) - fatal "$PROGRAM_LABEL minor version from \"$VERSION_STRING\" is not a number. Detected: \"$DETECTED_MINOR\"" + printf '%s minor version from "%s" is not a number. Detected: "%s"\n' "$PROGRAM_LABEL" "$VERSION_STRING" "$DETECTED_MINOR" >&2 + exit 1 esac - [ "$DETECTED_MAJOR" -gt "$REQUIRED_MAJOR" ] || ([ "$DETECTED_MAJOR" -eq "$REQUIRED_MAJOR" ] && [ "$DETECTED_MINOR" -ge "$REQUIRED_MINOR" ]) \ - || fatal "Your $PROGRAM_LABEL version \"$VERSION_STRING\" is too old. $PROGRAM_LABEL $REQUIRED_MAJOR.$REQUIRED_MINOR.x or higher is required." + if [ "$DETECTED_MAJOR" -lt "$REQUIRED_MAJOR" ] || ([ "$DETECTED_MAJOR" -eq "$REQUIRED_MAJOR" ] && [ "$DETECTED_MINOR" -lt "$REQUIRED_MINOR" ]); then + printf 'Your %s version "%s" is too old. %s %d.%d.x or higher is required.\n' "$PROGRAM_LABEL" "$VERSION_STRING" "$PROGRAM_LABEL" "$REQUIRED_MAJOR" "$REQUIRED_MINOR" >&2 + exit 1 + fi } -# Move to the folder where ep-lite is installed -cd "$(dirname "$0")"/.. +#Move to the folder where ep-lite is installed +cd $(dirname $0) -# Is node installed? -# Not checking io.js, default installation creates a symbolic link to node -is_cmd node || fatal "Please install node.js ( https://nodejs.org )" +#Was this script started in the bin folder? if yes move out +if [ -d "../bin" ]; then + cd "../" +fi -# Is npm installed? -is_cmd npm || fatal "Please install npm ( https://npmjs.org )" +#Is node installed? +#Not checking io.js, default installation creates a symbolic link to node +hash node > /dev/null 2>&1 || { + echo "Please install node.js ( https://nodejs.org )" >&2 + exit 1 +} -# Check npm version +#Is npm installed? +hash npm > /dev/null 2>&1 || { + echo "Please install npm ( https://npmjs.org )" >&2 + exit 1 +} + +#Check npm version NPM_VERSION_STRING=$(npm --version) require_minimal_version "npm" "$NPM_VERSION_STRING" "$REQUIRED_NPM_MAJOR" "$REQUIRED_NPM_MINOR" -# Check node version +#Check node version NODE_VERSION_STRING=$(node --version) NODE_VERSION_STRING=${NODE_VERSION_STRING#"v"} require_minimal_version "nodejs" "$NODE_VERSION_STRING" "$REQUIRED_NODE_MAJOR" "$REQUIRED_NODE_MINOR" -# Get the name of the settings file +#Get the name of the settings file settings="settings.json" a=''; for arg in "$@"; do @@ -73,13 +88,13 @@ for arg in "$@"; do a=$arg done -# Does a $settings exist? if not copy the template -if [ ! -f "$settings" ]; then - log "Copy the settings template to $settings..." - cp settings.json.template "$settings" || exit 1 +#Does a $settings exist? if not copy the template +if [ ! -f $settings ]; then + echo "Copy the settings template to $settings..." + cp settings.json.template $settings || exit 1 fi -log "Ensure that all dependencies are up to date... If this is the first time you have run Etherpad please be patient." +echo "Ensure that all dependencies are up to date... If this is the first time you have run Etherpad please be patient." ( mkdir -p node_modules cd node_modules @@ -91,8 +106,8 @@ log "Ensure that all dependencies are up to date... If this is the first time y exit 1 } -# Remove all minified data to force node creating it new -log "Clearing minified cache..." +#Remove all minified data to force node creating it new +echo "Clearing minified cache..." rm -f var/minified* exit 0 diff --git a/bin/run.sh b/bin/run.sh index ff6b3de09..74fa56d68 100755 --- a/bin/run.sh +++ b/bin/run.sh @@ -1,37 +1,39 @@ #!/bin/sh -pecho() { printf %s\\n "$*"; } -log() { pecho "$@"; } -error() { log "ERROR: $@" >&2; } -fatal() { error "$@"; exit 1; } +#Move to the folder where ep-lite is installed +cd $(dirname $0) -# Move to the folder where ep-lite is installed -cd "$(dirname "$0")"/.. +#Was this script started in the bin folder? if yes move out +if [ -d "../bin" ]; then + cd "../" +fi ignoreRoot=0 -for ARG in "$@"; do +for ARG in "$@" +do if [ "$ARG" = "--root" ]; then ignoreRoot=1 fi done -# Stop the script if it's started as root -if [ "$(id -u)" -eq 0 ] && [ "$ignoreRoot" -eq 0 ]; then - cat <&2 -You shouldn't start Etherpad as root! -Please type 'Etherpad rocks my socks' (or restart with the '--root' -argument) if you still want to start it as root: -EOF - printf "> " >&2 +#Stop the script if it's started as root +if [ "$(id -u)" -eq 0 ] && [ $ignoreRoot -eq 0 ]; then + echo "You shouldn't start Etherpad as root!" + echo "Please type 'Etherpad rocks my socks' or supply the '--root' argument if you still want to start it as root" read rocks - [ "$rocks" = "Etherpad rocks my socks" ] || fatal "Your input was incorrect" + if [ ! "$rocks" == "Etherpad rocks my socks" ] + then + echo "Your input was incorrect" + exit 1 + fi fi -# Prepare the environment +#Prepare the environment bin/installDeps.sh "$@" || exit 1 -# Move to the node folder and start -log "Starting Etherpad..." +#Move to the node folder and start +echo "Started Etherpad..." SCRIPTPATH=$(pwd -P) exec node "$SCRIPTPATH/node_modules/ep_etherpad-lite/node/server.js" "$@" + diff --git a/bin/safeRun.sh b/bin/safeRun.sh index 6d43e3035..99a72bcc0 100755 --- a/bin/safeRun.sh +++ b/bin/safeRun.sh @@ -1,11 +1,10 @@ #!/bin/sh -# This script ensures that ep-lite is automatically restarting after -# an error happens +#This script ensures that ep-lite is automatically restarting after an error happens -# Handling Errors -# 0 silent -# 1 email +#Handling Errors +# 0 silent +# 1 email ERROR_HANDLING=0 # Your email address which should receive the error messages EMAIL_ADDRESS="no-reply@example.com" @@ -16,54 +15,54 @@ TIME_BETWEEN_EMAILS=600 # 10 minutes # DON'T EDIT AFTER THIS LINE -pecho() { printf %s\\n "$*"; } -log() { pecho "$@"; } -error() { log "ERROR: $@" >&2; } -fatal() { error "$@"; exit 1; } - LAST_EMAIL_SEND=0 - -# Move to the folder where ep-lite is installed -cd "$(dirname "$0")"/.. - -# Check if a logfile parameter is set LOG="$1" -[ -n "${LOG}" ] || fatal "Set a logfile as the first parameter" + +#Move to the folder where ep-lite is installed +cd $(dirname $0) + +#Was this script started in the bin folder? if yes move out +if [ -d "../bin" ]; then + cd "../" +fi + +#Check if a logfile parameter is set +if [ -z "${LOG}" ]; then + echo "Set a logfile as the first parameter" + exit 1 +fi + shift +while [ 1 ] +do + #Try to touch the file if it doesn't exist + if [ ! -f ${LOG} ]; then + touch ${LOG} || ( echo "Logfile '${LOG}' is not writeable" && exit 1 ) + fi -while true; do - # Try to touch the file if it doesn't exist - [ -f "${LOG}" ] || touch "${LOG}" || fatal "Logfile '${LOG}' is not writeable" + #Check if the file is writeable + if [ ! -w ${LOG} ]; then + echo "Logfile '${LOG}' is not writeable" + exit 1 + fi - # Check if the file is writeable - [ -w "${LOG}" ] || fatal "Logfile '${LOG}' is not writeable" + #Start the application + bin/run.sh $@ >>${LOG} 2>>${LOG} - # Start the application - bin/run.sh "$@" >>${LOG} 2>>${LOG} - - TIME_FMT=$(date +%Y-%m-%dT%H:%M:%S%z) - - # Send email - if [ "$ERROR_HANDLING" = 1 ]; then + #Send email + if [ $ERROR_HANDLING = 1 ]; then TIME_NOW=$(date +%s) TIME_SINCE_LAST_SEND=$(($TIME_NOW - $LAST_EMAIL_SEND)) - if [ "$TIME_SINCE_LAST_SEND" -gt "$TIME_BETWEEN_EMAILS" ]; then - { - cat <>${LOG} + echo "RESTART!" >>${LOG} - # Sleep 10 seconds before restart + #Sleep 10 seconds before restart sleep 10 done