Re: sysupgrade -c

Stuart Henderson <[email protected]>
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
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
>
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.