Der steht in diversen UCR-Variablen; siehe Ausgabe von ucr search --brief '^version/'
Der ist leider nicht so einfach zu ermitteln. Das, was @thhoe vorgeschlagen hat…
…funktioniert nur für Errata-Updates, nicht aber für neue Major-/Minor-Releases/Patchlevel. Der Grund ist, dass für jedes Major-/Minor-Release/Patchlevel neue APT-Quellen hinzukommen. Oder anders ausgedrückt: wenn man aktuell (fiktiv) 4.2-3 Errata 123 laufen hat, so kann man alle Errata-Updates für 4.2-3 direkt über APT herausbekommen (vorher ein apt-get update), nicht aber, dass es 4.2-4 oder gar 4.3-0 gibt.
Um herauszufinden, ob es neue Majors/Minors/Patchlevel gibt, kann man das machen, was der Univention-Updater ebenfalls macht: unter der URL https://updates.software-univention.de/ nachschauen, welche Verzeichnisse es gibt. Wenn ich den Code (def get_next_version in /usr/share/pyshared/univention/updater/tools.py) richtig lese, so nimmt der Updater die aktuelle Version als Basis (z.B. 4.2-4), zählt zuerst das Patchlevel hoch (also 4.2-5) und prüft, ob es dafür das Komponentenverzeichnis https://updates.software-univention.de/<major>.<minor>/maintained/<major>.<minor>-<patchlevel>/ (effektiv somit https://updates.software-univention.de/4.2/maintained/4.2-5/) gibt.
Das gleiche wird dann auch mit hochgezählter Minor-Release und Patchlevel 0 (also 4.3-0) sowie mit hochgezähltem Major mit Minor & Patchlevel = 0 (5.0-0) gemacht.
Das ganze berücksichtigt noch nicht die Apps, die installiert sein können. Dafür müsste man die entsprechenden App-Center-Katalogdateien herunterladen und auswerten. Glücklicherweise sind das JSON-Dateien und damit einfach zu handhaben. Die URL für die Katalogdatei lautet: https://appcenter.software-univention.de/meta-inf/<major>.<minor>/index.json.gz
Was man etwas einfacher abfragen kann, ist die Frage, ob es generell Updates gibt. Das liegt daran, dass der Updater regelmäßig im Prüfmodus ausgeführt wird und das Ergebnis in der UCR-Variable update/available speichert.
Das ist mir noch gar nicht aufgefallen. Wieder was gelernt.
Updates mache ich meist an der Console, das hat mich auf diese Idee gebracht:
:~# /usr/sbin/univention-upgrade --check
Starting univention-upgrade. Current UCS version is 4.3-1 errata202
Checking for package updates: none
Checking for app updates: none
Checking for release updates: none
No update available.
oder ein anderer Server:
:~# /usr/sbin/univention-upgrade --check
Starting univention-upgrade. Current UCS version is 4.2-4 errata490
Checking for package updates: none
Checking for app updates: none
Checking for release updates: The update to UCS 4.3 is blocked because the component 'benno-mailarchiv_20170619120638' is marked as required.
none
No update available.
Damit sollte sich auf jeden Fall etwas mchen lassen.
Mein Post sollte eher Möglichkeiten aufzeigen, wie man herausfinden kann, welche Updates es alle gibt (was für mich am ehesten die Antwort auf die Frage des OPs ist, “verfügbarer Stand”), und nicht nur die Frage, ob es generell welche gibt. Leider liefert univention-app info da auch nur die halbe Miete, denn es zeigt nur an, welche neuen App-Versionen es für das gerade installierte UCS-Release gibt. Für neuere UCR-Releases kann es durchaus noch neuere App-Releases geben.
Das Thema ist schlicht vielschichtig
@Quickly71 UCS bietet übrigens auch die Möglichkeit, Updates automatisch installieren zu lassen. Man kann über Richtlinien feingranular einstellen, ob man nur Erratalevel-Updates, Patchlevel+Erratalevel oder sogar Minor-Releases+Patchlevel+Erratalevel installieren möchte. Die Möglichkeiten habe ich in folgendem Post ausführlich erläutert (auf Englisch):
Das kann ich nur bestätigen. Auf einer Testmaschie hatte ich gerade folgendes beobachdet:
Anmeldung an der UMC → Meldung: Es steht ein Update zur Verfügung.
Wechseln zum Modul Software-Aktualisierung → alles aktuell
Anmeldung über SSh
:~# univention-upgrade --check
Starting univention-upgrade. Current UCS version is 4.3-1 errata202
Checking for package updates: none
Checking for app updates: found
Please rerun command without --check argument to install.
:~# univention-upgrade
Starting univention-upgrade. Current UCS version is 4.3-1 errata202
Checking for local repository: none
Checking for package updates: none
Checking for app updates: found
The following apps can be upgraded:
Benno MailArchiv: The underlying container can be upgraded
Starting app upgrade
Do you want to upgrade Benno MailArchiv [Y|n]? y
Dummerweise habe ich das Update schon installiert, die Ausgabe von check_app währe schon interessant gewesen.
Für mich ist die Ausgabe von univention-upgrade --check ausreichend. Wenn jemand dafür ein Nagios-Check hat würde der mich sehr interesieren. Mir fehlt im Moment die Zeit einen zu entwickeln.
Die Diskrepanz hier zwischen check_apt und univention-app info passt genau, wie ich oben erläutert habe. Hier kommt erschwerend hinzu, dass diverse Apps gar nicht mehr als Debian-Pakete paketiert und in APT-Repositories verfügbar sind, sondern als Docker-Container daherkommen. Daher werden Updates für diese Art von Apps rein über den JSON-Meta-Index und die darüber referenzierten weiteren Meta-Info-Dateien bekanntgegeben. check_apt ist da dann komplett außen vor.
#!/bin/bash
# Nagios Plugin Bash Script - check-univention-update.sh
# It only works on local Univention UCS servers.
# The script checks if a reboot is required and if an update is available.
#
# Autor: info@thhoe.de
#set -x
RC_OK=0
RC_WARN=1
RC_CRIT=2
RC_UNKNOWN=3
RC=0
usage()
{
echo ""
echo " The script only works on local Univention UCS servers. "
echo " It checks if a reboot is required and if an update is available."
echo ""
}
if [ $1 ]
then
usage
exit $RC_UNKNOWN
fi
BOOT=$(ucr get update/reboot/required)
RC=$?
if [ $RC -gt 0 ]
then
echo "UNKNOWN: No Univention server"
exit $RC_UNKNOWN
fi
INFO=$(univention-app info | sed 's/UCS\:/UCS\ version\ is/' | sed '/UCS*/!d')
if [ -z $BOOT ]
then
RC=$RC_UNKNOWN
MSG="UNKNOWN Response"
UPDATE=$(univention-upgrade --check | awk '$5 ~ /found/ { print $3 }')
case $UPDATE in
package)
MSG=", package update available"
RC=$RC_CRIT
;;
release)
MSG=", release update available"
RC=$RC_WARN
;;
app)
APP=$(univention-app info | sed '/Upg*/!d' | sed 's/Upgradable\:\ //')
MSG=", APP "$APP" upgradable"
RC=$RC_WARN
;;
*)
MSG=", no update available"
RC=$RC_OK
;;
esac
else
MSG=", reboot required"
RC=$RC_CRIT
fi
case $RC in
0)
RC_TEXT="OK: "
;;
1)
RC_TEXT="WARNING: "
;;
2)
RC_TEXT="CRITICAL: "
;;
*)
RC_TEXT="UNKNOWN: "
;;
esac
echo $RC_TEXT$INFO$MSG
exit $RC