xref: /minix3/etc/rc.d/bootconf.sh (revision 325ce30bccba250bdfe2f52d4d341654683ad16f)
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