Download raw body.
sysupgrade -c
On 2026/07/03 09:40, Manuel Giraud wrote:
> Hi,
>
> From a discussion on misc@ some days ago, here's my attempt at
> supporting a "check new version" feature in sysupgrade:
>
> Index: sysupgrade.8
> ===================================================================
> RCS file: /cvs/src/usr.sbin/sysupgrade/sysupgrade.8,v
> diff -u -p -r1.23 sysupgrade.8
> --- sysupgrade.8 11 Nov 2025 15:18:30 -0000 1.23
> +++ sysupgrade.8 3 Jul 2026 07:33:14 -0000
> @@ -22,7 +22,7 @@
> .Nd upgrade system to the next release or a new snapshot
> .Sh SYNOPSIS
> .Nm
> -.Op Fl fkns
> +.Op Fl cfkns
> .Op Fl b Ar base-directory
> .Op Fl R Ar version
> .Op Ar installurl | path
> @@ -54,6 +54,9 @@ Download files to
> .Ar base-directory Ns / Ns Pa _sysupgrade
> instead of
> .Pa /home/_sysupgrade .
> +.It Fl c
> +Print availability of a new version.
> +The sets are not downloaded.
> .It Fl f
> For snapshots, force an already applied upgrade.
> This option has no effect on releases.
> Index: sysupgrade.sh
> ===================================================================
> RCS file: /cvs/src/usr.sbin/sysupgrade/sysupgrade.sh,v
> diff -u -p -r1.62 sysupgrade.sh
> --- sysupgrade.sh 21 Mar 2026 01:34:25 -0000 1.62
> +++ sysupgrade.sh 3 Jul 2026 07:33:14 -0000
> @@ -74,6 +74,7 @@ rmel() {
>
> SNAP=false
> FILE=false
> +CHECK=false
> FORCE=false
> FORCE_VERSION=false
> KEEP=false
> @@ -83,9 +84,10 @@ WHAT='release'
> VERSION=$(uname -r)
> NEXT_VERSION=$(echo ${VERSION} + 0.1 | bc)
>
> -while getopts b:fknrR:s arg; do
> +while getopts b:cfknrR:s arg; do
> case ${arg} in
> b) SETSDIR=${OPTARG}/_sysupgrade;;
> + c) CHECK=true;;
> f) FORCE=true;;
> k) KEEP=true;;
> n) REBOOT=false;;
> @@ -186,10 +188,22 @@ unpriv cksum -qC SHA256 BUILDINFO
> if [[ -e /var/db/installed.BUILDINFO ]]; then
> installed_build_ts=$(cut -f3 -d' ' /var/db/installed.BUILDINFO)
> build_ts=$(cut -f3 -d' ' BUILDINFO)
> - if (( $build_ts <= $installed_build_ts )) && ! $FORCE; then
> + if $CHECK; then
> + build_human_ts=$(cut -f5- -d' ' BUILDINFO)
> + if (( $build_ts > $installed_build_ts )); then
> + echo "A new version ($build_human_ts) is available."
> + exit 0
> + else
> + echo "No new version available."
I'd recommend no new version -> no output (like syspatch -c does),
so it can be used in cron without an extra | grep -v.
> + exit 0
> + fi
> + elif (( $build_ts <= $installed_build_ts )) && ! $FORCE; then
> echo "Downloaded ${WHAT} is older than installed system. Use -f to force downgrade."
> exit 1
> fi
> +elif $CHECK; then
> + echo "Cannot find installed version."
> + exit 1
> fi
>
> # INSTALL.*, bsd*, *.tgz
>
> --
> Manuel Giraud
>
sysupgrade -c