123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #!/bin/bash
- # Version 1.5
- #
- # v1.5 CHANGES:
- # - added enhancement sugestion made by briand on checkmk forum to make the version-compare more granular
- # v1.4 CHANGES:
- # - added extra logic to deal with unresponsive or empty response from release-url
- # v1.3 CHANGES:
- # - Added check for configured apache-user and basepath exist.
- # v1.2 CHANGES:
- # - Updated nextcloud release check to actually get latest version from the release-url
- # v1.1 CHANGES:
- # - Updated query for installed version to versionstring instead of version
- #
- # WARNING: Current logic in the check will report wrong version as upgrade when a release is withdrawn from a/the release-url.
- # 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 <mhonkoop@comsolve.nl>
- # License: GNU General Public License v2
- RELEASEURL="https://download.nextcloud.com/server/releases/"
- #basepath of Nextcloud's occ executable
- BASEPATH="/var/www/html"
- # set the correct user for running the commands ( either apache or www-data, this depends on your Linux-Distribution)
- APACHEUSER="apache"
- # 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
- ######################
- # The code below should not be changed, unless you know EXACTLY what you are doing.
- # All confogureable parameters are above this section.
- ######################
- # check if jq package is present on the system
- /usr/bin/which jq >/dev/null 2>&1
- if [ $? -ne 0 ]; then
- echo "2 \"NextCloud\" - NextCloud localcheck requires jq package to be installed"
- echo "2 \"NextCloud Apps\" - NextCloud localcheck requires jq package to be installed"
- exit;
- fi
- # check if configured apache user exists
- if ! id -u "$APACHEUSER" >/dev/null 2>&1; then
- echo "2 \"NextCloud\" - NextCloud localcheck webserver user does not exist, check configuration!"
- echo "2 \"NextCloud Apps\" - NextCloud localcheck webserver user does not exist, check configuration!"
- exit;
- fi
- # check if configured basepath exists
- if [ ! -d "$BASEPATH" ]; then
- echo "2 \"NextCloud\" - NextCloud localcheck could not find configured basepath, check configuration!"
- echo "2 \"NextCloud Apps\" - NextCloud localcheck could not find configured basepath, check configuration!"
- exit;
- 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 version information
- # In v29.x.x this has changed outputs <name-of-instance> <version>,
- 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 \"NextCloud\" - No data received from release-URL, can not determine latest release-version"
- # compare resuts of installed and available version and report update available if they differ
- elif [ $NCINSTALLED != $NCAVAILABLE ]; then
- echo "1 \"NextCloud\" - A new NextCloud version ($NCAVAILABLE)is available, running version $NCINSTALLED please upgrade"
- else
- sudo -u $APACHEUSER php $BASEPATH/occ status -e
- if [ $? -eq 0 ]; then
- echo "0 \"NextCloud\" - NextCloud all up to date"
- elif [ $? -eq 1 ]; then
- echo "1 \"NextCloud\" - NextCloud maintenance-mode is enabled"
- elif [ $? -eq 2 ]; then
- echo "2 \"NextCloud\" - NextCloud 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 \"NextCloud Apps\" - NextCloud Apps all up to date"
- else
- UPDATECOUNT=$(echo "$APPRESULT" | wc -l)
- echo "1 \"NextCloud Apps\" - $UPDATECOUNT NextCloud Apps requires updates"
- fi
|