View | Details | Raw Unified | Return to bug 251316 | Differences between
and this patch

Collapse All | Expand All

(-)bin/freebsd-version/freebsd-version.sh.in (-1 / +9 lines)
Lines 1-141 Link Here
1
#!/bin/sh
1
#!/bin/sh
2
#-
2
#-
3
# Copyright (c) 2013 Dag-Erling Smørgrav
3
# Copyright (c) 2013 Dag-Erling Smørgrav
4
# All rights reserved.
4
# All rights reserved.
5
#
5
#
6
# Redistribution and use in source and binary forms, with or without
6
# Redistribution and use in source and binary forms, with or without
7
# modification, are permitted provided that the following conditions
7
# modification, are permitted provided that the following conditions
8
# are met:
8
# are met:
9
# 1. Redistributions of source code must retain the above copyright
9
# 1. Redistributions of source code must retain the above copyright
10
#    notice, this list of conditions and the following disclaimer.
10
#    notice, this list of conditions and the following disclaimer.
11
# 2. Redistributions in binary form must reproduce the above copyright
11
# 2. Redistributions in binary form must reproduce the above copyright
12
#    notice, this list of conditions and the following disclaimer in the
12
#    notice, this list of conditions and the following disclaimer in the
13
#    documentation and/or other materials provided with the distribution.
13
#    documentation and/or other materials provided with the distribution.
14
#
14
#
15
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
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
16
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18
# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
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
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
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
24
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25
# SUCH DAMAGE.
25
# SUCH DAMAGE.
26
#
26
#
27
# $FreeBSD$
27
# $FreeBSD$
28
#
28
#
29
29
30
set -e
30
set -e
31
31
32
USERLAND_VERSION="@@REVISION@@-@@BRANCH@@"
32
USERLAND_VERSION="@@REVISION@@-@@BRANCH@@"
33
33
34
: ${ROOT:=}
34
: ${ROOT:=}
35
: ${LOADER_DIR:=$ROOT/boot}
35
: ${LOADER_DIR:=$ROOT/boot}
36
: ${LOADER_CONF_FILES:=$LOADER_DIR/defaults/loader.conf $LOADER_DIR/loader.conf $LOADER_DIR/loader.conf.local}
36
: ${LOADER_CONF_FILES:=$LOADER_DIR/defaults/loader.conf $LOADER_DIR/loader.conf $LOADER_DIR/loader.conf.local}
37
LOADER_RE1='^\([A-Z_a-z][0-9A-Z_a-z]*=[-./0-9A-Z_a-z]\{1,\}\).*$'
37
LOADER_RE1='^\([A-Z_a-z][0-9A-Z_a-z]*=[-./0-9A-Z_a-z]\{1,\}\).*$'
38
LOADER_RE2='^\([A-Z_a-z][0-9A-Z_a-z]*="[-./0-9A-Z_a-z]\{1,\}"\).*$'
38
LOADER_RE2='^\([A-Z_a-z][0-9A-Z_a-z]*="[-./0-9A-Z_a-z]\{1,\}"\).*$'
39
KERNEL_RE='^@@TYPE@@ \([-.0-9A-Za-z]\{1,\}\) .*$'
39
KERNEL_RE='^@@TYPE@@ \([-.0-9A-Za-z]\{1,\}\) .*$'
40
40
41
progname=${0##*/}
41
progname=${0##*/}
42
progverb=0
42
43
43
#
44
#
44
# Print an error message and exit.
45
# Print an error message and exit.
45
#
46
#
46
error() {
47
error() {
47
	echo "$progname: $*" >&2
48
	echo "$progname: $*" >&2
48
	exit 1
49
	exit 1
49
}
50
}
50
51
51
#
52
#
52
# Try to get the name of the installed kernel from loader.conf and
53
# Try to get the name of the installed kernel from loader.conf and
53
# return the full path.  If loader.conf does not exist or we could not
54
# return the full path.  If loader.conf does not exist or we could not
54
# read it, return the path to the default kernel.
55
# read it, return the path to the default kernel.
55
#
56
#
56
kernel_file() {
57
kernel_file() {
57
	eval $(sed -n "s/$LOADER_RE1/\\1;/p; s/$LOADER_RE2/\\1;/p" \
58
	eval $(sed -n "s/$LOADER_RE1/\\1;/p; s/$LOADER_RE2/\\1;/p" \
58
	    $LOADER_CONF_FILES 2>/dev/null)
59
	    $LOADER_CONF_FILES 2>/dev/null)
59
	echo "$LOADER_DIR/${kernel:-kernel}/${bootfile:-kernel}"
60
	echo "$LOADER_DIR/${kernel:-kernel}/${bootfile:-kernel}"
60
}
61
}
61
62
62
#
63
#
63
# Extract the kernel version from the installed kernel.
64
# Extract the kernel version from the installed kernel.
64
#
65
#
65
kernel_version() {
66
kernel_version() {
66
	kernfile=$(kernel_file)
67
	kernfile=$(kernel_file)
67
	if [ ! -f "$kernfile" -o ! -r "$kernfile" ] ; then
68
	if [ ! -f "$kernfile" -o ! -r "$kernfile" ] ; then
68
		error "unable to locate kernel"
69
		error "unable to locate kernel"
69
	fi
70
	fi
70
	what -qs "$kernfile" | sed -n "s/$KERNEL_RE/\\1/p"
71
	what -qs "$kernfile" | sed -n "s/$KERNEL_RE/\\1/p"
71
}
72
}
72
73
73
#
74
#
74
# Print the version of the currently running kernel.
75
# Print the version of the currently running kernel.
75
#
76
#
76
running_version() {
77
running_version() {
78
	[ $progverb -gt 0 ] && \
79
		echo `sysctl -n kern.osrelease kern.osreldate` || \
77
	sysctl -n kern.osrelease
80
	sysctl -n kern.osrelease
78
}
81
}
79
82
80
#
83
#
81
# Print the hardcoded userland version.
84
# Print the hardcoded userland version.
82
#
85
#
83
userland_version() {
86
userland_version() {
87
	[ $progverb -gt 0 ] && \
88
		echo $USERLAND_VERSION `uname -U` || \
84
	echo $USERLAND_VERSION
89
	echo $USERLAND_VERSION
85
}
90
}
86
91
87
#
92
#
88
# Print a usage string and exit.
93
# Print a usage string and exit.
89
#
94
#
90
usage() {
95
usage() {
91
	echo "usage: $progname [-kru]" >&2
96
	echo "usage: $progname [-kru]" >&2
92
	exit 1
97
	exit 1
93
}
98
}
94
99
95
#
100
#
96
# Main program.
101
# Main program.
97
#
102
#
98
main() {
103
main() {
99
	# parse command-line arguments
104
	# parse command-line arguments
100
	while getopts "kru" option ; do
105
	while getopts "kruv" option ; do
101
		case $option in
106
		case $option in
102
		k)
107
		k)
103
			opt_k=1
108
			opt_k=1
104
			;;
109
			;;
105
		r)
110
		r)
106
			opt_r=1
111
			opt_r=1
107
			;;
112
			;;
108
		u)
113
		u)
109
			opt_u=1
114
			opt_u=1
115
			;;
116
		v)
117
			progverb=1
110
			;;
118
			;;
111
		*)
119
		*)
112
			usage
120
			usage
113
			;;
121
			;;
114
		esac
122
		esac
115
	done
123
	done
116
	if [ $OPTIND -le $# ] ; then
124
	if [ $OPTIND -le $# ] ; then
117
		usage
125
		usage
118
	fi
126
	fi
119
127
120
	# default is -u
128
	# default is -u
121
	if [ $((opt_k + opt_r + opt_u)) -eq 0 ] ; then
129
	if [ $((opt_k + opt_r + opt_u)) -eq 0 ] ; then
122
		opt_u=1
130
		opt_u=1
123
	fi
131
	fi
124
132
125
	# print installed kernel version
133
	# print installed kernel version
126
	if [ $opt_k ] ; then
134
	if [ $opt_k ] ; then
127
		kernel_version
135
		kernel_version
128
	fi
136
	fi
129
137
130
	# print running kernel version
138
	# print running kernel version
131
	if [ $opt_r ] ; then
139
	if [ $opt_r ] ; then
132
		running_version
140
		running_version
133
	fi
141
	fi
134
142
135
	# print userland version
143
	# print userland version
136
	if [ $opt_u ] ; then
144
	if [ $opt_u ] ; then
137
		userland_version
145
		userland_version
138
	fi
146
	fi
139
}
147
}
140
148
141
main "$@"
149
main "$@"

Return to bug 251316