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