3 # Copyright (c) 2013 Dag-Erling Smørgrav
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
9 # 1. Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # 2. Redistributions in binary form must reproduce the above copyright
12 # notice, this list of conditions and the following disclaimer in the
13 # documentation and/or other materials provided with the distribution.
15 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 USERLAND_VERSION="@@REVISION@@-@@BRANCH@@"
34 : ${LOADER_DIR:=$ROOT/boot}
35 : ${LOADER_CONF_FILES:=$LOADER_DIR/defaults/loader.conf $LOADER_DIR/loader.conf $LOADER_DIR/loader.conf.local}
36 LOADER_RE1='^\([A-Z_a-z][0-9A-Z_a-z]*=[-./0-9A-Z_a-z]\{1,\}\).*$'
37 LOADER_RE2='^\([A-Z_a-z][0-9A-Z_a-z]*="[-./0-9A-Z_a-z]\{1,\}"\).*$'
38 KERNEL_RE='^@@TYPE@@ \([-.0-9A-Za-z]\{1,\}\) .*$'
43 # Print an error message and exit.
46 echo "$progname: $*" >&2
51 # Try to get the name of the installed kernel from loader.conf and
52 # return the full path. If loader.conf does not exist or we could not
53 # read it, return the path to the default kernel.
56 eval $(sed -n "s/$LOADER_RE1/\\1;/p; s/$LOADER_RE2/\\1;/p" \
57 $LOADER_CONF_FILES 2>/dev/null)
58 echo "$LOADER_DIR/${kernel:-kernel}/${bootfile:-kernel}"
62 # Extract the kernel version from the installed kernel.
65 kernfile=$(kernel_file)
66 if [ ! -f "$kernfile" -o ! -r "$kernfile" ] ; then
67 error "unable to locate kernel"
69 what -qs "$kernfile" | sed -n "s/$KERNEL_RE/\\1/p"
73 # Print the version of the currently running kernel.
76 sysctl -n kern.osrelease
80 # Print the hardcoded userland version.
83 echo $USERLAND_VERSION
87 # Print the hardcoded userland version of a jail.
91 jexec -- $i freebsd-version
96 # Print a usage string and exit.
99 echo "usage: $progname [-kru] [-j jail]" >&2
107 # parse command-line arguments
108 local OPTIND=1 OPTARG option
109 while getopts "kruj:" option ; do
133 if [ $OPTIND -le $# ] ; then
138 if [ $((opt_k + opt_r + opt_u + opt_j)) -eq 0 ] ; then
142 # print installed kernel version
147 # print running kernel version
152 # print userland version