freebsd-version(1): Add -j flag to support jails

Make freebsd-version(1) support jails by adding the -j flag which takes
a jail jid or name as an argument. As with other options, -j
flags stack and display in the order requested.

Reviewed by:	bcr (manpages), kevans
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D25705

(cherry picked from commit f54b18fc4d)
This commit is contained in:
Faraz Vahedi 2021-10-01 13:46:23 -05:00 committed by Kyle Evans
parent 5018dfb90f
commit cae3560307
2 changed files with 37 additions and 5 deletions

View File

@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd November 14, 2017
.Dd October 1, 2021
.Dt FREEBSD-VERSION 1
.Os
.Sh NAME
@ -34,6 +34,7 @@
.Sh SYNOPSIS
.Nm
.Op Fl kru
.Op Fl j Ar jail
.Sh DESCRIPTION
The
.Nm
@ -60,12 +61,20 @@ Print the version and patch level of the installed userland.
These are hardcoded into
.Nm
during the build.
.It Fl j Ar jail
Print the version and patch level of the installed userland in the
given jail specified by
.Va jid
or
.Va name .
This option can be specified multiple times.
.El
.Pp
If several of the above options are specified,
.Nm
will print the installed kernel version first, then the running kernel
version, and finally the userland version, on separate lines.
version, next the userland version, and finally the userland version
of the specified jails, on separate lines.
If neither is specified, it will print the userland version only.
.Sh IMPLEMENTATION NOTES
The

View File

@ -84,11 +84,20 @@ userland_version() {
echo $USERLAND_VERSION
}
#
# Print the hardcoded userland version of a jail.
#
jail_version() {
for i in $jail; do
jexec -- $i freebsd-version
done
}
#
# Print a usage string and exit.
#
usage() {
echo "usage: $progname [-kru]" >&2
echo "usage: $progname [-kru] [-j jail]" >&2
exit 1
}
@ -97,7 +106,8 @@ usage() {
#
main() {
# parse command-line arguments
while getopts "kru" option ; do
local OPTIND=1 OPTARG option
while getopts "kruj:" option ; do
case $option in
k)
opt_k=1
@ -108,6 +118,14 @@ main() {
u)
opt_u=1
;;
j)
if [ $opt_j ] ; then
jail="$jail $OPTARG"
else
opt_j=1
jail="$OPTARG"
fi
;;
*)
usage
;;
@ -118,7 +136,7 @@ main() {
fi
# default is -u
if [ $((opt_k + opt_r + opt_u)) -eq 0 ] ; then
if [ $((opt_k + opt_r + opt_u + opt_j)) -eq 0 ] ; then
opt_u=1
fi
@ -136,6 +154,11 @@ main() {
if [ $opt_u ] ; then
userland_version
fi
# print jail version
if [ $opt_j ] ; then
jail_version
fi
}
main "$@"