From 5462d2109c0693df564a8bc9116bd2c8f7939841 Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Thu, 14 May 2020 17:28:53 -0400 Subject: [PATCH] bin: Create and use new logging functions These write errors to stderr and avoid unintentional backslash escape processing in their arguments. --- bin/buildForWindows.sh | 39 +++++++++++++++++---------------------- bin/installDeps.sh | 39 ++++++++++++++++----------------------- bin/run.sh | 10 +++++++--- bin/safeRun.sh | 15 +++++++++------ 4 files changed, 49 insertions(+), 54 deletions(-) diff --git a/bin/buildForWindows.sh b/bin/buildForWindows.sh index 90bf187ae..229e4ea2f 100755 --- a/bin/buildForWindows.sh +++ b/bin/buildForWindows.sh @@ -1,5 +1,9 @@ #!/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 @@ -11,27 +15,18 @@ if [ -d "../bin" ]; then fi # Is wget installed? -is_cmd wget || { - echo "Please install wget" >&2 - exit 1 -} +is_cmd wget || fatal "Please install wget" # Is zip installed? -is_cmd zip || { - echo "Please install zip" >&2 - exit 1 -} +is_cmd zip || fatal "Please install zip" # Is zip installed? -is_cmd unzip || { - echo "Please install unzip" >&2 - exit 1 -} +is_cmd unzip || fatal "Please install unzip" START_FOLDER=$(pwd); TMP_FOLDER=$(mktemp -d) -echo "create a clean environment in $TMP_FOLDER..." +log "create a clean environment in $TMP_FOLDER..." cp -ar . $TMP_FOLDER cd $TMP_FOLDER rm -rf node_modules @@ -41,33 +36,33 @@ rm -f etherpad-lite-win.zip # making the windows package smaller export NODE_ENV=production -echo "do a normal unix install first..." +log "do a normal unix install first..." bin/installDeps.sh || exit 1 -echo "copy the windows settings template..." +log "copy the windows settings template..." cp settings.json.template settings.json -echo "resolve symbolic links..." +log "resolve symbolic links..." cp -rL node_modules node_modules_resolved rm -rf node_modules mv node_modules_resolved node_modules -echo "download windows node..." +log "download windows node..." cd bin wget "https://nodejs.org/dist/latest-erbium/win-x86/node.exe" -O ../node.exe -echo "remove git history to reduce folder size" +log "remove git history to reduce folder size" rm -rf .git/objects -echo "remove windows jsdom-nocontextify/test folder" +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 "create the zip..." +log "create the zip..." cd $TMP_FOLDER zip -9 -r $START_FOLDER/etherpad-lite-win.zip ./* -echo "clean up..." +log "clean up..." rm -rf $TMP_FOLDER -echo "Finished. You can find the zip in the Etherpad root folder, it's called etherpad-lite-win.zip" +log "Finished. You can find the zip in the Etherpad root folder, it's called etherpad-lite-win.zip" diff --git a/bin/installDeps.sh b/bin/installDeps.sh index 30c42df54..04e8ac13c 100755 --- a/bin/installDeps.sh +++ b/bin/installDeps.sh @@ -8,6 +8,10 @@ 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() { @@ -18,35 +22,30 @@ require_minimal_version() { # Flag -s (--only-delimited on GNU cut) ensures no string is returned # when there is no match - DETECTED_MAJOR=$(echo $VERSION_STRING | cut -s -d "." -f 1) - DETECTED_MINOR=$(echo $VERSION_STRING | cut -s -d "." -f 2) + DETECTED_MAJOR=$(pecho $VERSION_STRING | cut -s -d "." -f 1) + DETECTED_MINOR=$(pecho $VERSION_STRING | cut -s -d "." -f 2) if [ -z "$DETECTED_MAJOR" ]; then - printf 'Cannot extract %s major version from version string "%s"\n' "$PROGRAM_LABEL" "$VERSION_STRING" >&2 - exit 1 + fatal "Cannot extract $PROGRAM_LABEL major version from version string \"$VERSION_STRING\"" fi if [ -z "$DETECTED_MINOR" ]; then - printf 'Cannot extract %s minor version from version string "%s"\n' "$PROGRAM_LABEL" "$VERSION_STRING" >&2 - exit 1 + fatal "Cannot extract $PROGRAM_LABEL minor version from version string \"$VERSION_STRING\"" fi case "$DETECTED_MAJOR" in ''|*[!0-9]*) - printf '%s major version from "%s" is not a number. Detected: "%s"\n' "$PROGRAM_LABEL" "$VERSION_STRING" "$DETECTED_MAJOR" >&2 - exit 1 + fatal "$PROGRAM_LABEL major version from \"$VERSION_STRING\" is not a number. Detected: \"$DETECTED_MAJOR\"" ;; esac case "$DETECTED_MINOR" in ''|*[!0-9]*) - printf '%s minor version from "%s" is not a number. Detected: "%s"\n' "$PROGRAM_LABEL" "$VERSION_STRING" "$DETECTED_MINOR" >&2 - exit 1 + fatal "$PROGRAM_LABEL minor version from \"$VERSION_STRING\" is not a number. Detected: \"$DETECTED_MINOR\"" esac 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 + fatal "Your $PROGRAM_LABEL version \"$VERSION_STRING\" is too old. $PROGRAM_LABEL $REQUIRED_MAJOR.$REQUIRED_MINOR.x or higher is required." fi } @@ -60,16 +59,10 @@ fi # Is node installed? # Not checking io.js, default installation creates a symbolic link to node -is_cmd node || { - echo "Please install node.js ( https://nodejs.org )" >&2 - exit 1 -} +is_cmd node || fatal "Please install node.js ( https://nodejs.org )" # Is npm installed? -is_cmd npm || { - echo "Please install npm ( https://npmjs.org )" >&2 - exit 1 -} +is_cmd npm || fatal "Please install npm ( https://npmjs.org )" # Check npm version NPM_VERSION_STRING=$(npm --version) @@ -92,11 +85,11 @@ done # Does a $settings exist? if not copy the template if [ ! -f $settings ]; then - echo "Copy the settings template to $settings..." + log "Copy the settings template to $settings..." cp settings.json.template $settings || exit 1 fi -echo "Ensure that all dependencies are up to date... If this is the first time you have run Etherpad please be patient." +log "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 @@ -109,7 +102,7 @@ echo "Ensure that all dependencies are up to date... If this is the first time } # Remove all minified data to force node creating it new -echo "Clearing minified cache..." +log "Clearing minified cache..." rm -f var/minified* exit 0 diff --git a/bin/run.sh b/bin/run.sh index eafbd72a5..9ae768f1b 100755 --- a/bin/run.sh +++ b/bin/run.sh @@ -1,5 +1,10 @@ #!/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) @@ -23,8 +28,7 @@ if [ "$(id -u)" -eq 0 ] && [ $ignoreRoot -eq 0 ]; then read rocks if [ ! "$rocks" = "Etherpad rocks my socks" ] then - echo "Your input was incorrect" - exit 1 + fatal "Your input was incorrect" fi fi @@ -32,7 +36,7 @@ fi bin/installDeps.sh "$@" || exit 1 # Move to the node folder and start -echo "Started Etherpad..." +log "Starting 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 acf13ffd2..fca97cb14 100755 --- a/bin/safeRun.sh +++ b/bin/safeRun.sh @@ -16,6 +16,11 @@ 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 LOG="$1" @@ -29,8 +34,7 @@ fi # Check if a logfile parameter is set if [ -z "${LOG}" ]; then - echo "Set a logfile as the first parameter" - exit 1 + fatal "Set a logfile as the first parameter" fi shift @@ -38,13 +42,12 @@ 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 ) + touch ${LOG} || fatal "Logfile '${LOG}' is not writeable" fi # Check if the file is writeable if [ ! -w ${LOG} ]; then - echo "Logfile '${LOG}' is not writeable" - exit 1 + fatal "Logfile '${LOG}' is not writeable" fi # Start the application @@ -62,7 +65,7 @@ do fi fi - echo "RESTART!" >>${LOG} + pecho "RESTART!" >>${LOG} # Sleep 10 seconds before restart sleep 10