1#!/bin/sh 2# 3# $NetBSD: bootconf.sh,v 1.15 2012/12/31 23:21:27 christos Exp $ 4# 5 6# PROVIDE: bootconf 7# REQUIRE: mountcritlocal 8# KEYWORD: interactive 9 10$_rc_subr_loaded . /etc/rc.subr 11 12name="bootconf" 13start_cmd="bootconf_start" 14stop_cmd=":" 15 16bootconf_start() 17{ 18 # Refer to newbtconf(8) for more information 19 # 20 21 if [ ! -e /etc/etc.current ]; then 22 return 0 23 fi 24 if [ -h /etc/etc.default ]; then 25 def=$(ls -ld /etc/etc.default 2>&1) 26 default="${def##*-> *etc.}" 27 else 28 default=current 29 fi 30 if [ "$default" = "current" ]; then 31 def=$(ls -ld /etc/etc.current 2>&1) 32 default="${def##*-> *etc.}" 33 fi 34 35 spc="" 36 for i in /etc/etc.*; do 37 name="${i##/etc/etc.}" 38 case $name in 39 current|default|\*) 40 continue 41 ;; 42 *) 43 if [ "$name" = "$default" ]; then 44 echo -n "${spc}[${name}]" 45 else 46 echo -n "${spc}${name}" 47 fi 48 spc=" " 49 ;; 50 esac 51 done 52 echo 53 _DUMMY=/etc/passwd 54 conf=${_DUMMY} 55 while [ ! -d /etc/etc.$conf/. ]; do 56 trap "conf=$default; echo; echo Using default of $default" ALRM 57 echo -n "Which configuration [$default] ? " 58 (sleep 30 && kill -ALRM $RC_PID) >/dev/null 2>&1 & 59 read conf 60 trap : ALRM 61 if [ -z $conf ] ; then 62 conf=$default 63 fi 64 if [ ! -d /etc/etc.$conf/. ]; then 65 conf=${_DUMMY} 66 fi 67 done 68 69 print_rc_metadata "note:Using configuration \"${conf}\"" 70 71 case $conf in 72 current|default) 73 ;; 74 *) 75 rm -f /etc/etc.current 76 ln -s etc.$conf /etc/etc.current 77 sync 78 ;; 79 esac 80 81 if [ -f /etc/rc.conf ] ; then 82 . /etc/rc.conf 83 fi 84} 85 86load_rc_config $name 87run_rc_command "$1" 88