Author: emaste
Date: Tue Jan 31 15:32:05 2012
New Revision: 230812
URL: http://svn.freebsd.org/changeset/base/230812

Log:
  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@)

Modified:
  head/sbin/reboot/nextboot.8
  head/sbin/reboot/nextboot.sh

Modified: head/sbin/reboot/nextboot.8
==============================================================================
--- head/sbin/reboot/nextboot.8 Tue Jan 31 15:25:00 2012        (r230811)
+++ head/sbin/reboot/nextboot.8 Tue Jan 31 15:32:05 2012        (r230812)
@@ -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

Modified: head/sbin/reboot/nextboot.sh
==============================================================================
--- head/sbin/reboot/nextboot.sh        Tue Jan 31 15:25:00 2012        
(r230811)
+++ head/sbin/reboot/nextboot.sh        Tue Jan 31 15:32:05 2012        
(r230812)
@@ -2,31 +2,59 @@
 #
 # Copyright 2002. Gordon Tetlow.
 # gor...@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
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to