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 | |
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@)
-rw-r--r-- | sbin/reboot/nextboot.8 | 13 | ||||
-rw-r--r-- | sbin/reboot/nextboot.sh | 41 |
2 files changed, 44 insertions, 10 deletions
diff --git a/sbin/reboot/nextboot.8 b/sbin/reboot/nextboot.8 index 99986b1..eb38319 100644 --- a/sbin/reboot/nextboot.8 +++ b/sbin/reboot/nextboot.8 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd November 4, 2002 +.Dd January 31, 2012 .Dt NEXTBOOT 8 .Os .Sh NAME @@ -32,15 +32,17 @@ .Nd "specify an alternate kernel and boot flags for the next reboot" .Sh SYNOPSIS .Nm +.Op Fl e Ar variable=value .Op Fl f +.Op Fl k Ar kernel .Op Fl o Ar options -.Fl k Ar kernel .Nm .Fl D .Sh DESCRIPTION The .Nm -utility allows specifying an alternate kernel and/or boot flags for the +utility allows specifying some combination of an alternate kernel, boot flags +and kernel environment for the next time the machine is booted. Once the .Xr loader 8 @@ -58,6 +60,11 @@ with this option removes an existing .Nm configuration. +.It Fl e Ar variable=value +This option adds the provided variable and value to the kernel environment. +The value is quoted when written to the +.Nm +configuration. .It Fl f This option disables the sanity checking which checks if the kernel really exists 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 |