#!/bin/bash # v1.0: # - Initial release of the script # v1.1 CHANGES: # - Updated query for installed version to versionstring instead of version # v1.2 CHANGES: # - Updated nextcloud release check to actually get latest version from the release-url # v1.3 CHANGES: # - Added check for configured apache-user and basepath exist. # v1.4 CHANGES: # - added extra logic to deal with unresponsive or empty response from release-url # v1.5 CHANGES: # - added enhancement sugestion made by briand on checkmk forum to make the version-compare more granular # Version 1.6 CHANGES: # - Restructured and refined variables, also added additional comments per line of code # # WARNING: Current logic in the check will report wrong version as upgrade when a release is withdrawn from a/the release-url. # Current active version of the script SCRIPT_VERSION=1.6 # Installation: # This file should be place on a/the nextcloud host in /usr/lib/check_mk_agent/local # # (optional) if you want the check to run on a different schedule (like once per hour) put it in a subdirectory of above path # named to the number of seconds of the interval wanted, so 3600/ for once an hour, 86400 for once per day. # # Also do not forget to make this file executable with chmod +x /usr/lib/check_mk_agent/local/nextcloud-updates.sh # (c) Michael Honkoop # License: GNU General Public License v2 ###################### # Configurable Parameters ###################### # url to check releases against RELEASEURL="https://download.nextcloud.com/server/releases/" #basepath of Nextcloud's occ executable BASEPATH="/var/www/nextcloud" # set the correct user for running the commands (either apache or www-data, this depends on your Linux-Distribution) APACHEUSER="www-data" # Service name SERVICE="NextCloud" # Set how exact the version-comparison should be - enhancement suggested by briand at checkmk forum # # how many “.”-separated fields to compare: # 3 → XX.YY.ZZ (full) # 2 → XX.YY (major+minor) # 1 → XX (major only) VERSION_FIELDS=2 # Service name SERVICE="NextCloud" ###################### # The code below should not be changed, unless you know EXACTLY what you are doing. # All configureable parameters are above this section. ###################### # check if jq package is present on the system if ! command -v curl >/dev/null 2>&1; then echo "2 \"$SERVICE\" - $SERVICE localcheck requires jq package to be installed" echo "2 \"$SERVICE Apps\" - $SERVICE Apps localcheck requires jq package to be installed" exit 0 fi # check if configured apache user exists if ! id -u "$APACHEUSER" >/dev/null 2>&1; then echo "2 \"$SERVICE\" - $SERVICE localcheck webserver user does not exist, check configuration!" echo "2 \"$SERVICE Apps\" - $SERVICE Apps localcheck webserver user does not exist, check configuration!" exit 0 fi # check if configured basepath exists if [ ! -d "$BASEPATH" ]; then echo "2 \"$SERVICE\" - $SERVICE localcheck could not find configured basepath, check configuration!" echo "2 \"$SERVICE Apps\" - $SERVICE Apps localcheck could not find configured basepath, check configuration!" exit 0 fi # Get current installed Nextcloud version-information # in v29.x.x version gives more detail, which is not given by the check on installed version, so switched to versionstring instead. NCINSTALLED=$(sudo -u "$APACHEUSER" php "$BASEPATH"/occ status --output=json | jq -r '.versionstring' | cut -d. -f1-"$VERSION_FIELDS") # Get latest avaiable (core) version information # In v29.x.x this has changed outputs , NCAVAILABLE=$(curl -s --connect-timeout 5 --fail-with-body "$RELEASEURL" | sed -e 's/<[^>]*>//g' | grep -o "^nextcloud.*.zip" | tail -n1 | cut -d'-' -f 2 | sed 's/.\{4\}$//' | cut -d. -f1-"$VERSION_FIELDS") # if the check on the release-url is not returning a version - report status if [ -z "$NCAVAILABLE" ]; then echo "1 \"$SERVICE\" - No data received from release-URL, can not determine latest release-version for $SERVICE Core" # compare resuts of installed and available version and report update available if they differ elif [ "$NCINSTALLED" != "$NCAVAILABLE" ]; then echo "1 \"$SERVICE\" - A new $SERVICE Core version ($NCAVAILABLE) is available, running Core version is: $NCINSTALLED please upgrade" else sudo -u "$APACHEUSER" php "$BASEPATH"/occ status -e if [ $? -eq 0 ]; then echo "0 \"$SERVICE\" - $SERVICE all up to date" elif [ $? -eq 1 ]; then echo "1 \"$SERVICE\" - $SERVICE maintenance-mode is enabled" elif [ $? -eq 2 ]; then echo "2 \"$SERVICE\" - $SERVICE Core needs updating" fi fi APPRESULT=$(sudo -u "$APACHEUSER" php "$BASEPATH"/occ app:update --showonly) if [[ "$APPRESULT" == *"All apps are up-to-date"* ]]; then echo "0 \"$SERVICE Apps\" - $SERVICE Apps all up to date" exit 0 else UPDATECOUNT=$(echo "$APPRESULT" | wc -l) echo "1 \"$SERVICE Apps\" - $UPDATECOUNT $SERVICE Apps requires updates" exit 0 fi