]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - bin/freebsd-version/freebsd-version.sh.in
unbound: Vendor import 1.18.0
[FreeBSD/FreeBSD.git] / bin / freebsd-version / freebsd-version.sh.in
1 #!/bin/sh
2 #-
3 # Copyright (c) 2013 Dag-Erling Smørgrav
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
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.
14 #
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
25 # SUCH DAMAGE.
26 #
27 #
28
29 set -e
30
31 USERLAND_VERSION="@@REVISION@@-@@BRANCH@@"
32
33 : ${ROOT:=}
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,\}\) .*$'
39
40 progname=${0##*/}
41
42 #
43 # Print an error message and exit.
44 #
45 error() {
46         echo "$progname: $*" >&2
47         exit 1
48 }
49
50 #
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.
54 #
55 kernel_file() {
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}"
59 }
60
61 #
62 # Extract the kernel version from the installed kernel.
63 #
64 kernel_version() {
65         kernfile=$(kernel_file)
66         if [ ! -f "$kernfile" -o ! -r "$kernfile" ] ; then
67                 error "unable to locate kernel"
68         fi
69         what -qs "$kernfile" | sed -n "s/$KERNEL_RE/\\1/p"
70 }
71
72 #
73 # Print the version of the currently running kernel.
74 #
75 running_version() {
76         sysctl -n kern.osrelease
77 }
78
79 #
80 # Print the hardcoded userland version.
81 #
82 userland_version() {
83         echo $USERLAND_VERSION
84 }
85
86 #
87 # Print the hardcoded userland version of a jail.
88 #
89 jail_version() {
90         for i in $jail; do
91                 jexec -- $i freebsd-version
92         done
93 }
94
95 #
96 # Print a usage string and exit.
97 #
98 usage() {
99         echo "usage: $progname [-kru] [-j jail]" >&2
100         exit 1
101 }
102
103 #
104 # Main program.
105 #
106 main() {
107         # parse command-line arguments
108         local OPTIND=1 OPTARG option
109         while getopts "kruj:" option ; do
110                 case $option in
111                 k)
112                         opt_k=1
113                         ;;
114                 r)
115                         opt_r=1
116                         ;;
117                 u)
118                         opt_u=1
119                         ;;
120                 j)
121                         if [ $opt_j ] ; then
122                                 jail="$jail $OPTARG"
123                         else
124                                 opt_j=1
125                                 jail="$OPTARG"
126                         fi
127                         ;;
128                 *)
129                         usage
130                         ;;
131                 esac
132         done
133         if [ $OPTIND -le $# ] ; then
134                 usage
135         fi
136
137         # default is -u
138         if [ $((opt_k + opt_r + opt_u + opt_j)) -eq 0 ] ; then
139                 opt_u=1
140         fi
141
142         # print installed kernel version
143         if [ $opt_k ] ; then
144                 kernel_version
145         fi
146
147         # print running kernel version
148         if [ $opt_r ] ; then
149                 running_version
150         fi
151
152         # print userland version
153         if [ $opt_u ] ; then
154                 userland_version
155         fi
156
157         # print jail version
158         if [ $opt_j ] ; then
159                 jail_version
160         fi
161 }
162
163 main "$@"