aboutsummaryrefslogtreecommitdiff
path: root/sbin/reboot/nextboot.sh
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2012-01-31 15:32:05 +0000
committerEd Maste <emaste@FreeBSD.org>2012-01-31 15:32:05 +0000
commitb7fa166b60ab5637e94a6fc9ba197896a7f30198 (patch)
tree6abad1d4163fcb5d66f3173a728fc170a52d5165 /sbin/reboot/nextboot.sh
parent86872b65ef90ffa3540f824c9f1435d036a4831a (diff)
downloadsrc-b7fa166b60ab5637e94a6fc9ba197896a7f30198.tar.gz
src-b7fa166b60ab5637e94a6fc9ba197896a7f30198.zip
Add -e to set arbitrary kernel environment variables.
Nextboot(8) can now set any combination of kernel name (-k), kernel options (-o), and environment strings (-e). As a result of this change -k also becomes optional. Reviewed by: freebsd-current (Ian Lepore, pluknet@, jhb@)
Notes
Notes: svn path=/head/; revision=230812
Diffstat (limited to 'sbin/reboot/nextboot.sh')
-rw-r--r--sbin/reboot/nextboot.sh41
1 files changed, 34 insertions, 7 deletions
diff --git a/sbin/reboot/nextboot.sh b/sbin/reboot/nextboot.sh
index bb90c63d13c3..253ccf797b2f 100644
--- a/sbin/reboot/nextboot.sh
+++ b/sbin/reboot/nextboot.sh
@@ -2,31 +2,59 @@
#
# Copyright 2002. Gordon Tetlow.
# gordon@FreeBSD.org
+# Copyright (c) 2012 Sandvine Incorporated. All rights reserved.
#
# $FreeBSD$
delete="NO"
+kenv=
force="NO"
nextboot_file="/boot/nextboot.conf"
+add_kenv()
+{
+ local var value
+
+ var=$1
+ # strip literal quotes if passed in
+ value=${2%\"*}
+ value=${value#*\"}
+
+ if [ -n "${kenv}" ]; then
+ kenv="${kenv}
+"
+ fi
+ kenv="${kenv}${var}=\"${value}\""
+}
+
display_usage() {
- echo "Usage: nextboot [-f] [-o options] -k kernel"
+ echo "Usage: nextboot [-e variable=value] [-f] [-k kernel] [-o options]"
echo " nextboot -D"
}
-while getopts "Dfk:o:" argument ; do
+while getopts "De:fk:o:" argument ; do
case "${argument}" in
D)
delete="YES"
;;
+ e)
+ var=${OPTARG%%=*}
+ value=${OPTARG#*=}
+ if [ -z "$var" -o -z "$value" ]; then
+ display_usage
+ exit 1
+ fi
+ add_kenv "$var" "$value"
+ ;;
f)
force="YES"
;;
k)
kernel="${OPTARG}"
+ add_kenv kernel "$kernel"
;;
o)
- kernel_options="${OPTARG}"
+ add_kenv kernel_options "${OPTARG}"
;;
*)
display_usage
@@ -40,12 +68,12 @@ if [ ${delete} = "YES" ]; then
exit 0
fi
-if [ "xxx${kernel}" = "xxx" ]; then
+if [ -z "${kenv}" ]; then
display_usage
exit 1
fi
-if [ ${force} = "NO" -a ! -d /boot/${kernel} ]; then
+if [ -n "${kernel}" -a ${force} = "NO" -a ! -d /boot/${kernel} ]; then
echo "Error: /boot/${kernel} doesn't exist. Use -f to override."
exit 1
fi
@@ -60,6 +88,5 @@ done
cat > ${nextboot_file} << EOF
nextboot_enable="YES"
-kernel="${kernel}"
-kernel_options="${kernel_options}"
+$kenv
EOF