diff options
author | emaste <emaste@FreeBSD.org> | 2012-01-31 15:32:05 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2012-01-31 15:32:05 +0000 |
commit | 036c70dad3fd256395530c77c8486bc3364a3ef1 (patch) | |
tree | 6abad1d4163fcb5d66f3173a728fc170a52d5165 /sbin/reboot/nextboot.sh | |
parent | 3e5b0f32817fab3d565a8e0f7517efff903bb64b (diff) | |
download | FreeBSD-src-036c70dad3fd256395530c77c8486bc3364a3ef1.zip FreeBSD-src-036c70dad3fd256395530c77c8486bc3364a3ef1.tar.gz |
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@)
Diffstat (limited to 'sbin/reboot/nextboot.sh')
-rw-r--r-- | sbin/reboot/nextboot.sh | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/sbin/reboot/nextboot.sh b/sbin/reboot/nextboot.sh index bb90c63..253ccf7 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 |