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@)
This commit is contained in:
parent
86872b65ef
commit
b7fa166b60
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user