git: e02bf0022e90 - stable/12 - freebsd-update(8): Add -j flag to support jails

From: Kyle Evans <kevans_at_FreeBSD.org>
Date: Fri, 08 Oct 2021 16:27:51 UTC
The branch stable/12 has been updated by kevans:

URL: https://cgit.FreeBSD.org/src/commit/?id=e02bf0022e90214918faeadde3500aaef087cc42

commit e02bf0022e90214918faeadde3500aaef087cc42
Author:     Faraz Vahedi <kfv@kfv.io>
AuthorDate: 2021-10-01 18:48:57 +0000
Commit:     Kyle Evans <kevans@FreeBSD.org>
CommitDate: 2021-10-08 16:27:35 +0000

    freebsd-update(8): Add -j flag to support jails
    
    Make freebsd-update(8) support jails by adding the -j flag which takes
    a jail jid or name as an argument. This takes advantage of the recently
    added -j support to freebsd-version(8) in order to get the version of
    the installed userland.
    
    Reviewed by:    dteske, kevans
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D25711
    
    (cherry picked from commit c76da1f01064b2b9a1903b30d4b4c444b85f8724)
---
 usr.sbin/freebsd-update/freebsd-update.8  | 11 ++++++++++-
 usr.sbin/freebsd-update/freebsd-update.sh | 20 +++++++++++++++++++-
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/usr.sbin/freebsd-update/freebsd-update.8 b/usr.sbin/freebsd-update/freebsd-update.8
index 54ec17b5ea36..be477d0cdce7 100644
--- a/usr.sbin/freebsd-update/freebsd-update.8
+++ b/usr.sbin/freebsd-update/freebsd-update.8
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd November 14, 2020
+.Dd October 1, 2021
 .Dt FREEBSD-UPDATE 8
 .Os
 .Sh NAME
@@ -37,6 +37,7 @@
 .Op Fl d Ar workdir
 .Op Fl f Ar conffile
 .Op Fl F
+.Op Fl j Ar jail
 .Op Fl k Ar KEY
 .Op Fl r Ar newrelease
 .Op Fl s Ar server
@@ -90,6 +91,14 @@ Read configuration options from
 Force
 .Nm Cm fetch
 to proceed in the case of an unfinished upgrade.
+.It Fl j Ar jail
+Operate on the given jail specified by
+.Va jid
+or
+.Va name .
+(The version of the installed userland is detected and the
+.Fl -currently-running
+option is no more required.)
 .It Fl k Ar KEY
 Trust an RSA key with SHA256 of
 .Ar KEY .
diff --git a/usr.sbin/freebsd-update/freebsd-update.sh b/usr.sbin/freebsd-update/freebsd-update.sh
index 4fbac58cb562..1776115d0776 100644
--- a/usr.sbin/freebsd-update/freebsd-update.sh
+++ b/usr.sbin/freebsd-update/freebsd-update.sh
@@ -36,7 +36,7 @@
 # --no-stats	-- don't show progress statistics while fetching files
 usage () {
 	cat <<EOF
-usage: `basename $0` [options] command ... [path]
+usage: `basename $0` [options] command ...
 
 Options:
   -b basedir   -- Operate on a system mounted at basedir
@@ -47,6 +47,7 @@ Options:
                   (default: /etc/freebsd-update.conf)
   -F           -- Force a fetch operation to proceed in the
                   case of an unfinished upgrade
+  -j jail      -- Operate on the given jail specified by jid or name
   -k KEY       -- Trust an RSA key with SHA256 hash of KEY
   -r release   -- Target for upgrade (e.g., 11.1-RELEASE)
   -s server    -- Server from which to fetch updates
@@ -324,6 +325,19 @@ config_SourceRelease () {
 	export UNAME_r
 }
 
+# Get the Jail's path and the version of its installed userland
+config_TargetJail () {
+	JAIL=$1
+	UNAME_r=$(freebsd-version -j ${JAIL})
+	BASEDIR=$(jls -j ${JAIL} -h path | awk 'NR == 2 {print}')
+	if [ -z ${BASEDIR} ] || [ -z ${UNAME_r} ]; then
+		echo "The specified jail either doesn't exist or" \
+		      "does not have freebsd-version."
+		exit 1
+	fi
+	export UNAME_r
+}
+
 # Define what happens to output of utilities
 config_VerboseLevel () {
 	if [ -z ${VERBOSELEVEL} ]; then
@@ -492,6 +506,10 @@ parse_cmdline () {
 			if [ $# -eq 1 ]; then usage; fi; shift
 			config_WorkDir $1 || usage
 			;;
+		-j)
+			if [ $# -eq 1 ]; then usage; fi; shift
+			config_TargetJail $1 || usage
+			;;
 		-k)
 			if [ $# -eq 1 ]; then usage; fi; shift
 			config_KeyPrint $1 || usage