sysupgrade -c

Manuel Giraud <[email protected]>
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
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."
+		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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.