From c5d1c7ae239f4a0d233c012b6c03160014f506cc Mon Sep 17 00:00:00 2001 From: Eduard Veit Date: Fri, 25 Mar 2022 14:42:56 +0100 Subject: [PATCH] publish some update scripts --- gitea-update.sh | 100 ++++++++++++++++++++++++++++++++++++++++++ grocy-update.sh | 28 ++++++++++++ hedgedoc-update.sh | 77 ++++++++++++++++++++++++++++++++ nextcloud-update.sh | 23 ++++++++++ uptime-kuma-update.sh | 60 +++++++++++++++++++++++++ 5 files changed, 288 insertions(+) create mode 100644 gitea-update.sh create mode 100644 grocy-update.sh create mode 100644 hedgedoc-update.sh create mode 100644 nextcloud-update.sh create mode 100644 uptime-kuma-update.sh diff --git a/gitea-update.sh b/gitea-update.sh new file mode 100644 index 0000000..df1d16f --- /dev/null +++ b/gitea-update.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash + +APP_NAME=Gitea +GITEA_LOCATION=$HOME/gitea/gitea +TMP_LOCATION=$HOME/tmp +GPG_KEY_FINGERPRINT=7C9E68152594688862D62AF62D9AE806EC1592E2 + +ORG=go-gitea # Organisation or GitHub user +REPO=gitea +GITHUB_API_URL=https://api.github.com/repos/$ORG/$REPO/releases/latest + +function do_update_procedure +{ + $GITEA_LOCATION manager flush-queues + supervisorctl stop gitea + wget --quiet --progress=bar:force --output-document "$TMP_LOCATION"/gitea "$DOWNLOAD_URL" + verify_file + supervisorctl stop gitea + mv --verbose "$TMP_LOCATION"/gitea "$GITEA_LOCATION" + chmod u+x --verbose "$GITEA_LOCATION" + supervisorctl start gitea + supervisorctl status gitea +} + +function get_local_version +{ + LOCAL_VERSION=$($GITEA_LOCATION --version | + awk '{print $3}') +} + +function get_latest_version +{ + curl --silent $GITHUB_API_URL > "$TMP_LOCATION"/github_api_response.json + TAG_NAME=$(jq --raw-output '.tag_name' "$TMP_LOCATION"/github_api_response.json) + LATEST_VERSION=${TAG_NAME:1} + DOWNLOAD_URL=$(jq --raw-output '.assets[].browser_download_url' "$TMP_LOCATION"/github_api_response.json | + grep --max-count=1 "linux-amd64") +} + +function get_signature_file +{ + SIGNATURE_FILE_URL=$(jq --raw-output '.assets[].browser_download_url' "$TMP_LOCATION"/github_api_response.json | + grep "linux-amd64.asc") + rm "$TMP_LOCATION"/github_api_response.json + wget --quiet --progress=bar:force --output-document "$TMP_LOCATION"/gitea.asc "$SIGNATURE_FILE_URL" +} + +function verify_file +{ + get_signature_file + + ## downloading public key if it does not already exist + if ! gpg --fingerprint $GPG_KEY_FINGERPRINT + then + ## currently the key download via gpg does not work on Uberspace + #gpg --keyserver keys.openpgp.org --recv $GPG_KEY_FINGERPRINT + curl --silent https://keys.openpgp.org/vks/v1/by-fingerprint/$GPG_KEY_FINGERPRINT | gpg --import + fi + + if ! gpg --export-ownertrust | grep --quiet $GPG_KEY_FINGERPRINT:6: + then echo "$GPG_KEY_FINGERPRINT:6:" | gpg --import-ownertrust + fi + + if gpg --verify "$TMP_LOCATION"/gitea.asc "$TMP_LOCATION"/gitea + then rm "$TMP_LOCATION"/gitea.asc; return 0 + else echo "gpg verification results in a BAD signature"; exit 1 + echo "$GPG_KEY_FINGERPRINT:6:" | gpg --import-ownertrust + fi +} + +## this is a helper function to compare two versions as a "lower than" operator +function version_lt +{ + test "$(echo "$@" | + tr " " "n" | + sort --version-sort --reverse | + head --lines=1)" != "$1" +} + +function main +{ + get_local_version + get_latest_version + + if [ "$LOCAL_VERSION" = "$LATEST_VERSION" ] + then + echo "Your $APP_NAME is already up to date." + echo "You are running $APP_NAME $LOCAL_VERSION" + else + if version_lt "$LOCAL_VERSION" "$LATEST_VERSION" + then + echo "There is a new version available." + echo "Doing update from $LOCAL_VERSION to $LATEST_VERSION" + do_update_procedure + fi + fi +} + +main "$@" +exit $? \ No newline at end of file diff --git a/grocy-update.sh b/grocy-update.sh new file mode 100644 index 0000000..4c921a4 --- /dev/null +++ b/grocy-update.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +APP=grocy +ORG=grocy # Organisation or GitHub user +REPO=grocy +LOCAL_VERSION=$(jq --raw-output .Version /var/www/virtual/"$USER"/grocy/version.json) +TAG_NAME=$(curl -s https://api.github.com/repos/$ORG/$REPO/releases/latest | jq --raw-output .tag_name) +LATEST_VERSION=${TAG_NAME:1} # It is common to use the prefix v for the version tag. + +## this is a helper function to compare two versions as a "lower than" operator +function version_lt +{ + test "$(echo "$@" | + tr " " "n" | + sort --version-sort --reverse | + head --lines=1)" != "$1" +} + +if [ "$LOCAL_VERSION" = "$LATEST_VERSION" ]; then + echo "Your $APP is running on $LOCAL_VERSION and it is already up to date." +else + if version_lt "$LOCAL_VERSION" "$LATEST_VERSION" + then + echo "There is a new Version available of $ORG" + echo "The latest Version is $LATEST_VERSION" + echo "Your local Version is $LOCAL_VERSION" + bash /var/www/virtual/"$USER"/grocy/update.sh + fi +fi diff --git a/hedgedoc-update.sh b/hedgedoc-update.sh new file mode 100644 index 0000000..7f568d2 --- /dev/null +++ b/hedgedoc-update.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +APP_NAME=HedgeDoc +ORG=hedgedoc # Organisation or GitHub user +REPO=hedgedoc +LOCAL_VERSION=$(jq --raw-output .version ~/hedgedoc/package.json) +LATEST_VERSION=$(curl --silent https://api.github.com/repos/$ORG/$REPO/releases/latest | + jq --raw-output .tag_name) + +function do_upgrade() { + supervisorctl stop $APP_NAME + echo "waiting 1 minute until all processes are stopped" + sleep 1m + mv --verbose ~/hedgedoc ~/hedgedoc_"$LOCAL_VERSION" + VERSION=$LATEST_VERSION + cd || exit + wget https://github.com/hedgedoc/hedgedoc/releases/download/"$VERSION"/hedgedoc-"$VERSION".tar.gz + tar --extract --gzip --file=hedgedoc-"$VERSION".tar.gz + rm --verbose hedgedoc-"$VERSION".tar.gz + cp --verbose hedgedoc_"$LOCAL_VERSION"/config.json hedgedoc/config.json + cd ~/hedgedoc || exit + bin/setup + echo "You may need to wait a minute until HedgeDoc is up and running." + supervisorctl start $APP_NAME + echo "If everything works fine you can delete ~/hedgedoc_$USED_VERSION" + echo "Please consider that there might be uploaded files in ~/hedgedoc_$LOCAL_VERSION/public/uploads which were not migrated to the new version if you are using the default setting." + rm --recursive ~/hedgedoc_"$LOCAL_VERSION" +} + +function yes-no_question +{ + local question=$1 + while true + do + read -r -p "$question (Y/n) " ANSWER + if [ "$ANSWER" = "" ] + then ANSWER='Y' + fi + case $ANSWER in + [Yy]* | [Jj]* ) + return 0 ;; + [Nn]* ) + return 1 ;; + * ) echo "Please answer yes or no." ;; + esac + done +} + +## this is a helper function to compare two versions as a "lower than" operator +function version_lt +{ + test "$(echo "$@" | + tr " " "n" | + sort --version-sort --reverse | + head --lines=1)" != "$1" +} + +function main +{ + if [ "$LOCAL_VERSION" = "$LATEST_VERSION" ] + then echo "Your HedgeDoc is already up to date." + elif version_lt "$LOCAL_VERSION" "$LATEST_VERSION" + then + echo "There is a new Version available of $APP_NAME" + echo "The latest Version is $LATEST_VERSION" + echo "Your local Version is $LOCAL_VERSION" + echo "Upgrades to next major releases are not tested." + echo "Please read the release notes." + echo "Also check if the upgrade instructions have changed." + echo "Your instance might break." + if yes-no_question "Do you wish to proceed with the upgrade?" + then do_upgrade + fi + fi +} + +main "$@" +exit $? \ No newline at end of file diff --git a/nextcloud-update.sh b/nextcloud-update.sh new file mode 100644 index 0000000..7e76e72 --- /dev/null +++ b/nextcloud-update.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +APP_LOCATION=$HOME/html + +## Updater automatically works in maintenance:mode. +## Use the Uberspace backup system for files and database if you need to roll back. +## The Nextcloud updater creates backups only to safe base and app code data and config files +## so it takes ressources you might need for your productive data. +## Deactivate NC-updater Backups with --no-backup +php "$APP_LOCATION"/updater/updater.phar --no-backup --no-interaction + +## database optimisations +php "$APP_LOCATION"/occ db:add-missing-primary-keys --no-interaction +php "$APP_LOCATION"/occ db:add-missing-columns --no-interaction +php "$APP_LOCATION"/occ db:add-missing-indices --no-interaction +php "$APP_LOCATION"/occ db:convert-filecache-bigint --no-interaction + +php "$APP_LOCATION"/occ app:update --all +/usr/sbin/restorecon -R "$APP_LOCATION" + +if test -f ~/etc/services.d/notify_push.ini +then supervisorctl restart notify_push +fi \ No newline at end of file diff --git a/uptime-kuma-update.sh b/uptime-kuma-update.sh new file mode 100644 index 0000000..43925a6 --- /dev/null +++ b/uptime-kuma-update.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +APP_NAME="Uptime Kuma" +ORG=louislam # Organisation or GitHub user +REPO=uptime-kuma +GITHUB_API_URL=https://api.github.com/repos/$ORG/$REPO/releases/latest + +function get_local_version +{ + LOCAL_VERSION=$(git describe --tags) +} + +function get_latest_version +{ + LATEST_VERSION=$(curl --silent $GITHUB_API_URL | + jq --raw-output .tag_name) +} + +function do_update_procedure +{ + git fetch --all + git checkout "$LATEST_VERSION" --force + npm ci --production + npm run download-dist + supervisorctl restart uptime-kuma + sleep 3 + supervisorctl status +} + +## this is a helper function to compare two versions as a "lower than" operator +function version_lt +{ + test "$(echo "$@" | + tr " " "n" | + sort --version-sort --reverse | + head --lines=1)" != "$1" +} + +function main +{ + cd ~/uptime-kuma || exit 1 + get_local_version + get_latest_version + + if [ "$LOCAL_VERSION" = "$LATEST_VERSION" ] + then + echo "Your $APP_NAME is already up to date." + echo "You are running $APP_NAME $LOCAL_VERSION" + else + if version_lt "$LOCAL_VERSION" "$LATEST_VERSION" + then + echo "There is a new version available." + echo "Doing update from $LOCAL_VERSION to $LATEST_VERSION" + do_update_procedure + fi + fi +} + +main "${@}" +exit $?