nextboot.sh revision 230812
1#! /bin/sh 2# 3# Copyright 2002. Gordon Tetlow. 4# gordon@FreeBSD.org 5# Copyright (c) 2012 Sandvine Incorporated. All rights reserved. 6# 7# $FreeBSD: head/sbin/reboot/nextboot.sh 230812 2012-01-31 15:32:05Z emaste $ 8 9delete="NO" 10kenv= 11force="NO" 12nextboot_file="/boot/nextboot.conf" 13 14add_kenv() 15{ 16 local var value 17 18 var=$1 19 # strip literal quotes if passed in 20 value=${2%\"*} 21 value=${value#*\"} 22 23 if [ -n "${kenv}" ]; then 24 kenv="${kenv} 25" 26 fi 27 kenv="${kenv}${var}=\"${value}\"" 28} 29 30display_usage() { 31 echo "Usage: nextboot [-e variable=value] [-f] [-k kernel] [-o options]" 32 echo " nextboot -D" 33} 34 35while getopts "De:fk:o:" argument ; do 36 case "${argument}" in 37 D) 38 delete="YES" 39 ;; 40 e) 41 var=${OPTARG%%=*} 42 value=${OPTARG#*=} 43 if [ -z "$var" -o -z "$value" ]; then 44 display_usage 45 exit 1 46 fi 47 add_kenv "$var" "$value" 48 ;; 49 f) 50 force="YES" 51 ;; 52 k) 53 kernel="${OPTARG}" 54 add_kenv kernel "$kernel" 55 ;; 56 o) 57 add_kenv kernel_options "${OPTARG}" 58 ;; 59 *) 60 display_usage 61 exit 1 62 ;; 63 esac 64done 65 66if [ ${delete} = "YES" ]; then 67 rm -f ${nextboot_file} 68 exit 0 69fi 70 71if [ -z "${kenv}" ]; then 72 display_usage 73 exit 1 74fi 75 76if [ -n "${kernel}" -a ${force} = "NO" -a ! -d /boot/${kernel} ]; then 77 echo "Error: /boot/${kernel} doesn't exist. Use -f to override." 78 exit 1 79fi 80 81df -Tn "/boot/" 2>/dev/null | while read _fs _type _other ; do 82 [ "zfs" = "${_type}" ] || continue 83 cat 1>&2 <<-EOF 84 WARNING: loader(8) has only R/O support for ZFS 85 nextboot.conf will NOT be reset in case of kernel boot failure 86 EOF 87done 88 89cat > ${nextboot_file} << EOF 90nextboot_enable="YES" 91$kenv 92EOF 93