git.lirion.de

Of git, get, and gud

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormail_redacted_for_web 2025-04-21 11:30:41 +0200
committermail_redacted_for_web 2025-04-21 11:30:41 +0200
commit7cbe397b6d5e6d134f5dceb717081c5a78be0b1b (patch)
treebe9dc9b19e5b36cfb0a745eb62ccb5629f13c7b6
parent5eba88991da735b630fa0c2094ab648a60c1e90a (diff)
downloadnextcloud-update-7cbe397b6d5e6d134f5dceb717081c5a78be0b1b.tar.bz2
Parametrise nextcloud-upgrade
-rwxr-xr-xbin/nextcloud-update14
-rwxr-xr-xbin/nextcloud-upgrade303
2 files changed, 217 insertions, 100 deletions
diff --git a/bin/nextcloud-update b/bin/nextcloud-update
index c6b1aa3..c88d11c 100755
--- a/bin/nextcloud-update
+++ b/bin/nextcloud-update
@@ -180,10 +180,22 @@ if [[ "$NC_COREUPD" -eq 1 && "$NC_UA_CORE" -eq 1 ]]; then
fi
##### NEXTCLOUD UPDATES #####
+# printf 'NC_COREUPD: %b\n' "$NC_COREUPD"
+# printf 'NC_UA_CORE: %b\n' "$NC_UA_CORE"
+# printf 'NC_APPSUPD: %b\n' "$NC_APPSUPD"
+# printf 'NC_UA_APPS: %b\n' "$NC_UA_APPS"
if [[ "$NC_COREUPD" -eq 1 || "$NC_APPSUPD" -eq 1 ]]; then
UPDCALL=( '/usr/local/bin/nextcloud-upgrade' )
if [[ "$NC_COREUPD" -eq 1 && "$NC_UA_CORE" -eq 1 ]]; then
- UPDCALL=( '-c' "$UPDVER"
+ UPDCALL+=( '-c' "$UPDVER" )
+ elif [[ "$NC_COREUPD" -eq 1 && "$NC_UA_CORE" -eq 0 ]]; then
+ UPDCALL+=( '-c' 0 )
fi
+ if [[ "$NC_APPSUP" -eq 1 && "$NX_UA_APPS" -eq 1 ]]; then
+ UPDCALL+=( '-a' )
+ fi
+else
+ UPDCALL='/usr/bin/true'
fi
# /usr/local/bin/nextcloud-upgrade "$UPDVER" || exit "$?"
+"${UPDCALL[@]}" || exit "$?"
diff --git a/bin/nextcloud-upgrade b/bin/nextcloud-upgrade
index c77182b..4dec0aa 100755
--- a/bin/nextcloud-upgrade
+++ b/bin/nextcloud-upgrade
@@ -5,7 +5,55 @@
# Error codes: 131-159 (130 is reserved for sigint et al!)
-[ -z "$1" ] && printf 'Usage: %b VERSION\n' "$(basename "$0")" >&2 && exit 101
+# Define help function
+function hayulp {
+ printf 'USAGE: %b [-a|--app-update] [-c|--core-update VERSION]\n\n' "$(basename "$0")"
+ (
+ printf -- '-a,\n'
+ printf -- '--app-update;Update all apps\n'
+ printf -- '-c,\n'
+ printf -- '--core-update;Update the Nextcloud core (including apps update)\n'
+ printf -- ';VERSION is mandatory. "0" for no update at all (e.g. for wrapper scripts).\n'
+ printf -- '-s,\n'
+ printf -- '--status;Status including version\n'
+ printf -- '-u,\n'
+ printf -- '--update-check;Status including update check\n'
+ printf -- '-h,\n'
+ printf -- '--help;This help text\n'
+ )|column -ts \;
+ printf '\n'
+}
+
+##### PARSE: COMMAND LINE PARAMETERS #####
+NC_APPSUPD=0; NC_COREUPD=0
+while [[ $# -gt 0 ]]; do
+ case "$1" in
+ "-h"|"--help")
+ hayulp
+ exit 0
+ ;;
+ "-a"|"--app-update")
+ NC_APPSUPD=1
+ shift
+ ;;
+ "-c"|"--core-update")
+ NC_COREUPD=1
+ shift
+ UPDVER="$1"
+ shift
+ ;;
+ "-"*)
+ hayulp
+ printf '\033[93mUnknown option: %b\033[0m\n' "$1" >&2
+ exit 104
+ ;;
+ esac
+done
+
+if [ "$UPDVER" == '0' ]; then
+ NC_COREUPD=2
+fi
+
# shellcheck disable=SC1091
source /etc/lirion/nextcloud.conf || exit 102
# shellcheck disable=SC1091
@@ -14,116 +62,166 @@ source /usr/lib/lirion/ln-initfunctions || exit 103
/usr/bin/sudo -u "$NCUSER" /usr/bin/whoami > /dev/null || exit 133
/usr/bin/sudo /usr/bin/whoami > /dev/null || exit 133
-lnbegin "File inventory"
-if ! /usr/bin/sudo -u "$NCUSER" /usr/bin/stat -tL "${NCDLTGT}/nextcloud-${1}.tar.bz2" > /dev/null 2>&1; then
- lnfail "archive not found"
- exit 131
-elif ! /usr/bin/sudo -u "$NCUSER" /usr/bin/stat -tL "${NCDLTGT}/nextcloud-${1}.tar.bz2.sha512" >/dev/null 2>&1; then
- lnfail "checksum file not found"
- exit 131
-elif ! /usr/bin/sudo -u "$NCUSER" /usr/bin/stat -tL "${NCDLTGT}/nextcloud-${1}.tar.bz2.asc" >/dev/null 2>&1; then
- lnfail "signature file not found"
- exit 131
-fi
-lnok
-# TODO: implement script parameter skipping this - if we execute right after nextcloud-download,
-# this is redundant as the latter also verifies. We need this only on separate execution (so
-# by default as well).
-lnbegin "Verifying download"
-lnprog 'GPG'
-if ! /usr/bin/sudo -u "$NCUSER" /usr/bin/gpg --no-default-keyring --keyring /var/www/keyrings/nextcloud-security.gpg \
- --quiet --verify "${NCDLTGT}/nextcloud-${1}.tar.bz2.asc" "${NCDLTGT}/nextcloud-${1}.tar.bz2" 2>/dev/null
-then
- lnfail 'GPG failed'
- exit 132
+if [ "$NC_COREUPD" -gt 0 ]; then
+ lnbegin "File inventory"
+ if [ "$NC_COREUPD" -gt 1 ]; then
+ lnskip
+ else
+ if ! /usr/bin/sudo -u "$NCUSER" /usr/bin/stat -tL "${NCDLTGT}/nextcloud-${1}.tar.bz2" > /dev/null 2>&1; then
+ lnfail "archive not found"
+ exit 131
+ elif ! /usr/bin/sudo -u "$NCUSER" /usr/bin/stat -tL "${NCDLTGT}/nextcloud-${1}.tar.bz2.sha512" >/dev/null 2>&1; then
+ lnfail "checksum file not found"
+ exit 131
+ elif ! /usr/bin/sudo -u "$NCUSER" /usr/bin/stat -tL "${NCDLTGT}/nextcloud-${1}.tar.bz2.asc" >/dev/null 2>&1; then
+ lnfail "signature file not found"
+ exit 131
+ fi
+ lnok
+ # TODO: implement script parameter skipping this - if we execute right after nextcloud-download,
+ # this is redundant as the latter also verifies. We need this only on separate execution (so
+ # by default as well).
+ lnbegin "Verifying download"
+ lnprog 'GPG'
+ if ! /usr/bin/sudo -u "$NCUSER" /usr/bin/gpg --no-default-keyring --keyring /var/www/keyrings/nextcloud-security.gpg \
+ --quiet --verify "${NCDLTGT}/nextcloud-${1}.tar.bz2.asc" "${NCDLTGT}/nextcloud-${1}.tar.bz2" 2>/dev/null
+ then
+ lnfail 'GPG failed'
+ exit 132
+ fi
+ lnok
+ fi
fi
-lnok
-lnbegin 'Setting maintenance mode'
-if ! /usr/bin/sudo -u "$NCUSER" "$NCPHPBIN" "${NCAPPLDIR}/occ" 'maintenance:mode' '--on' >/dev/null 2>&1; then
- lnfail 'enabling failed'
- exit 133
+if [ "$NC_COREUPD" -gt 0 ]; then
+ lnbegin 'Setting maintenance mode'
+ if [ "$NC_COREUPD" -gt 1 ]; then
+ lnskip
+ else
+ if ! /usr/bin/sudo -u "$NCUSER" "$NCPHPBIN" "${NCAPPLDIR}/occ" 'maintenance:mode' '--on' >/dev/null 2>&1; then
+ lnfail 'enabling failed'
+ exit 133
+ fi
+ lnok
+ lnbegin "Grace period with maintenance mode"
+ while [ "$NCGRACE" -ge 1 ]; do
+ lnprog "$NCGRACE"
+ NCGRACE="$((NCGRACE-1))"
+ sleep 1
+ done
+ lnok
+ fi
fi
-lnok
-lnbegin "Grace period with maintenance mode"
-while [ "$NCGRACE" -ge 1 ]; do
- lnprog "$NCGRACE"
- NCGRACE="$((NCGRACE-1))"
- sleep 1
-done
-lnok
-lnbegin 'Move old Nextcloud folder'
-lnprog 'folder backup removal'
-if ! /usr/bin/sudo rm -rf "${NCAPPLDIR}.bak" >/dev/null 2>&1; then
- lnfail 'folder backup removal failed'
- exit 134
-fi
-lnprog 'folder backup'
-if ! /usr/bin/sudo /usr/bin/mv -v "${NCAPPLDIR}" "${NCAPPLDIR}.bak" >/dev/null 2>&1; then
- lnfail 'folder backup failed'
- exit 135
+if [ "$NC_COREUPD" -gt 0 ]; then
+ lnbegin 'Move old Nextcloud folder'
+ if [ "$NC_COREUPD" -gt 1 ]; then
+ lnskip
+ else
+ lnprog 'folder backup removal'
+ if ! /usr/bin/sudo rm -rf "${NCAPPLDIR}.bak" >/dev/null 2>&1; then
+ lnfail 'folder backup removal failed'
+ exit 134
+ fi
+ lnprog 'folder backup'
+ if ! /usr/bin/sudo /usr/bin/mv -v "${NCAPPLDIR}" "${NCAPPLDIR}.bak" >/dev/null 2>&1; then
+ lnfail 'folder backup failed'
+ exit 135
+ fi
+ lnok
+ fi
fi
-lnok
-lnbegin 'NC download extraction'
-if ! /usr/bin/sudo /usr/bin/install -dm'0750' -o"$NCUSER" -g"$NCUSER" "$NCAPPLDIR" > /dev/null 2>&1; then
- lnfail 'folder creation failed'
- exit 136
-elif ! MYTMP="$(/usr/bin/sudo -u "$NCUSER" /usr/bin/mktemp -d -p /tmp nextcloud.XXXXXX 2>/dev/null)"; then
- lnfail 'temp creation failed'
- exit 137
-elif ! /usr/bin/sudo -u "$NCUSER" /usr/bin/tar -C "$MYTMP" --checkpoint-action='.' --checkpoint=16384 \
- -xjf "${NCDLTGT}/nextcloud-${1}.tar.bz2"; then
- lnfail 'tarball extraction failed'
- exit 138
-elif [ "$(/usr/bin/sudo -u "$NCUSER" /usr/bin/find "$MYTMP" -mindepth 1 -maxdepth 1 -name 'nextcloud' 2>/dev/null | wc -w)" -ne 1 ]; then
- lnfail 'subfolder nextcloud not found'
- exit 139
-elif ! /usr/bin/sudo rsync -rlptD "${MYTMP}/nextcloud/" "${NCAPPLDIR}/" >/dev/null 2>&1; then
- lnfail 'folder sync failed'
- exit 140
+
+if [ "$NC_COREUPD" -gt 0 ]; then
+ lnbegin 'NC download extraction'
+ if [ "$NC_COREUPD" -gt 1 ]; then
+ lnskip
+ else
+ if ! /usr/bin/sudo /usr/bin/install -dm'0750' -o"$NCUSER" -g"$NCUSER" "$NCAPPLDIR" > /dev/null 2>&1; then
+ lnfail 'folder creation failed'
+ exit 136
+ elif ! MYTMP="$(/usr/bin/sudo -u "$NCUSER" /usr/bin/mktemp -d -p /tmp nextcloud.XXXXXX 2>/dev/null)"; then
+ lnfail 'temp creation failed'
+ exit 137
+ elif ! /usr/bin/sudo -u "$NCUSER" /usr/bin/tar -C "$MYTMP" --checkpoint-action='.' --checkpoint=16384 \
+ -xjf "${NCDLTGT}/nextcloud-${1}.tar.bz2"; then
+ lnfail 'tarball extraction failed'
+ exit 138
+ elif [ "$(/usr/bin/sudo -u "$NCUSER" /usr/bin/find "$MYTMP" -mindepth 1 -maxdepth 1 -name 'nextcloud' 2>/dev/null | wc -w)" -ne 1 ]; then
+ lnfail 'subfolder nextcloud not found'
+ exit 139
+ elif ! /usr/bin/sudo rsync -rlptD "${MYTMP}/nextcloud/" "${NCAPPLDIR}/" >/dev/null 2>&1; then
+ lnfail 'folder sync failed'
+ exit 140
+ fi
+ lnok
+ fi
fi
-lnok
+
function ctrl_c {
printf '\n'
lnbegin 'Caught TERM/INT, aborting.'
lnquit
- if ! /usr/bin/sudo /usr/bin/rm -rf "$MYTMP"; then
- exit 141
+ if [[ "$NC_COREUPD" -eq 1 ]]; then
+ if ! /usr/bin/sudo /usr/bin/rm -rf "$MYTMP"; then
+ exit 141
+ fi
fi
exit 130
}
trap ctrl_c INT
trap ctrl_c TERM
-lnbegin 'Temp dir removal'
-if ! /usr/bin/sudo -u "$NCUSER" /usr/bin/rm -rf "$MYTMP" >/dev/null 2>&1; then
- lnfail 142
+
+if [ "$NC_COREUPD" -gt 0 ]; then
+ lnbegin 'Temp dir removal'
+ if [ "$NC_COREUPD" -gt 1 ]; then
+ lnskip
+ else
+ if ! /usr/bin/sudo -u "$NCUSER" /usr/bin/rm -rf "$MYTMP" >/dev/null 2>&1; then
+ lnfail 142
+ fi
+ lnok
+ fi
fi
-lnok
-lnbegin 'Sync old config/apps'
-# do use trailing slashes for folders here, we are rsyncing!
-for src in 'config/config.php' 'apps/' 'apps-extras/' 'apps-external/'; do
- lnprog "$src"
- if ! stat -tL "${NCAPPLDIR}.bak/$src" >/dev/null 2>&1; then
- lnprog "$src not existing in backup"
- sleep 0.314159
- continue
+
+if [ "$NC_COREUPD" -gt 0 ]; then
+ lnbegin 'Sync old config/apps'
+ if [ "$NC_COREUPD" -gt 1 ]; then
+ lnskip
+ else
+ # do use trailing slashes for folders here, we are rsyncing!
+ for src in 'config/config.php' 'apps/' 'apps-extras/' 'apps-external/'; do
+ lnprog "$src"
+ if ! stat -tL "${NCAPPLDIR}.bak/$src" >/dev/null 2>&1; then
+ lnprog "$src not existing in backup"
+ sleep 0.314159
+ continue
+ fi
+ if ! /usr/bin/sudo /usr/bin/rsync -rulptgoD "${NCAPPLDIR}.bak/$src" "${NCAPPLDIR}/$src" >/dev/null 2>&1; then
+ lnfail "syncing $src failed"
+ exit 143
+ fi
+ done
+ lnok
fi
- if ! /usr/bin/sudo /usr/bin/rsync -rulptgoD "${NCAPPLDIR}.bak/$src" "${NCAPPLDIR}/$src" >/dev/null 2>&1; then
- lnfail "syncing $src failed"
- exit 143
+fi
+
+if [ "$NC_COREUPD" -gt 0 ]; then
+ lnbegin "Nextcloud file permissions"
+ if [ "$NC_COREUPD" -gt 1 ]; then
+ lnskip
+ else
+ if ! /usr/bin/sudo /usr/bin/chown -R "${NCUSER}:" "${NCAPPLDIR}/" >/dev/null 2>&1 && \
+ /usr/bin/sudo /usr/bin/chmod o-rwx "${NCAPPLDIR}/" >/dev/null 2>&1; then
+ lnfail
+ exit 144
+ fi
+ lnok
fi
-done
-lnok
-lnbegin "Nextcloud file permissions"
-if ! /usr/bin/sudo /usr/bin/chown -R "${NCUSER}:" "${NCAPPLDIR}/" >/dev/null 2>&1 && \
- /usr/bin/sudo /usr/bin/chmod o-rwx "${NCAPPLDIR}/" >/dev/null 2>&1; then
- lnfail
- exit 144
fi
-lnok
-# TODO: make update check decide on whether to update
+# Play it safe: disable maintenance mode independent of what was executed before. Currently, this
+# gives an output of "already disabled" and RC=0, so we're fine.
lnbegin 'Disabling maintenance mode'
if ! /usr/bin/sudo -u "$NCUSER" "$NCPHPBIN" "${NCAPPLDIR}/occ" 'maintenance:mode' '--off' >/dev/null 2>&1; then
lnfail 'disabling failed'
@@ -136,15 +234,19 @@ if ! /usr/bin/sudo -u "$NCUSER" /usr/bin/stat -tL "${NCAPPLDIR}/occ" >/dev/null
lnfail
exit 145
fi
+# Play it safe: Run the upgrade command in any case. Doesn't hurt; unless necessary it'll tell that there's
+# "No upgrade required." and give an RC=0 in any case, so we're fine.
lnprog "occ upgrade"
if ! /usr/bin/sudo -u "$NCUSER" "$NCPHPBIN" "${NCAPPLDIR}/occ" upgrade -q >/dev/null 2>&1; then
lnfail
exit 146
fi
-lnprog "occ app:update --all"
-if ! /usr/bin/sudo -u "$NCUSER" "$NCPHPBIN" "${NCAPPLDIR}/occ" app:update -q --all >/dev/null 2>&1; then
- lnfail "occ app:update"
- exit 147
+if [ "$NC_APPSUPD" -eq 1 ]; then
+ lnprog "occ app:update --all"
+ if ! /usr/bin/sudo -u "$NCUSER" "$NCPHPBIN" "${NCAPPLDIR}/occ" app:update -q --all >/dev/null 2>&1; then
+ lnfail "occ app:update"
+ exit 147
+ fi
fi
lnprog "occ db:add-missing-primary-keys"
if ! /usr/bin/sudo -u "$NCUSER" "$NCPHPBIN" "${NCAPPLDIR}/occ" db:add-missing-primary-keys -q >/dev/null 2>&1; then
@@ -161,9 +263,12 @@ if ! /usr/bin/sudo -u "$NCUSER" "$NCPHPBIN" "${NCAPPLDIR}/occ" db:add-missing-in
lnfail "occ db:add-missing-indices"
exit 150
fi
-lnprog "cron.php"
-if ! /usr/bin/sudo -u "$NCUSER" "$NCPHPBIN" -f "${NCAPPLDIR}/cron.php" 2>/dev/null; then
- lnfail "cron.php"
- exit 151
+if [[ "$NC_APPSUPD" -eq 1 || "$NC_COREUPD" -eq 1 ]]; then
+ lnprog "cron.php"
+ if ! /usr/bin/sudo -u "$NCUSER" "$NCPHPBIN" -f "${NCAPPLDIR}/cron.php" 2>/dev/null; then
+ lnfail "cron.php"
+ exit 151
+ fi
+ sleep 1
fi
lnok