nextboot.sh revision 259065
1#! /bin/sh 2# 3# Copyright (c) 2002 Gordon Tetlow. All rights reserved. 4# Copyright (c) 2012 Sandvine Incorporated. All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 1. Redistributions of source code must retain the above copyright 10# notice, this list of conditions and the following disclaimer. 11# 2. Redistributions in binary form must reproduce the above copyright 12# notice, this list of conditions and the following disclaimer in the 13# documentation and/or other materials provided with the distribution. 14# 15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25# SUCH DAMAGE. 26# 27# $FreeBSD: releng/10.0/sbin/reboot/nextboot.sh 231129 2012-02-07 14:06:30Z emaste $ 28 29delete="NO" 30kenv= 31force="NO" 32nextboot_file="/boot/nextboot.conf" 33 34add_kenv() 35{ 36 local var value 37 38 var=$1 39 # strip literal quotes if passed in 40 value=${2%\"*} 41 value=${value#*\"} 42 43 if [ -n "${kenv}" ]; then 44 kenv="${kenv} 45" 46 fi 47 kenv="${kenv}${var}=\"${value}\"" 48} 49 50display_usage() { 51 echo "Usage: nextboot [-e variable=value] [-f] [-k kernel] [-o options]" 52 echo " nextboot -D" 53} 54 55while getopts "De:fk:o:" argument ; do 56 case "${argument}" in 57 D) 58 delete="YES" 59 ;; 60 e) 61 var=${OPTARG%%=*} 62 value=${OPTARG#*=} 63 if [ -z "$var" -o -z "$value" ]; then 64 display_usage 65 exit 1 66 fi 67 add_kenv "$var" "$value" 68 ;; 69 f) 70 force="YES" 71 ;; 72 k) 73 kernel="${OPTARG}" 74 add_kenv kernel "$kernel" 75 ;; 76 o) 77 add_kenv kernel_options "${OPTARG}" 78 ;; 79 *) 80 display_usage 81 exit 1 82 ;; 83 esac 84done 85 86if [ ${delete} = "YES" ]; then 87 rm -f ${nextboot_file} 88 exit 0 89fi 90 91if [ -z "${kenv}" ]; then 92 display_usage 93 exit 1 94fi 95 96if [ -n "${kernel}" -a ${force} = "NO" -a ! -d /boot/${kernel} ]; then 97 echo "Error: /boot/${kernel} doesn't exist. Use -f to override." 98 exit 1 99fi 100 101df -Tn "/boot/" 2>/dev/null | while read _fs _type _other ; do 102 [ "zfs" = "${_type}" ] || continue 103 cat 1>&2 <<-EOF 104 WARNING: loader(8) has only R/O support for ZFS 105 nextboot.conf will NOT be reset in case of kernel boot failure 106 EOF 107done 108 109cat > ${nextboot_file} << EOF 110nextboot_enable="YES" 111$kenv 112EOF 113