xref: /dflybsd-src/etc/rc.d/bootconf (revision e54c8dc8ef199e733518bad6fde7888f8bca3c8e)
1095a621fSSascha Wildner#!/bin/sh
2095a621fSSascha Wildner#
3095a621fSSascha Wildner# $NetBSD: bootconf.sh,v 1.5 2002/03/25 03:22:10 wiz Exp $
4095a621fSSascha Wildner# $FreeBSD: src/etc/rc.d/bootconf.sh,v 1.4 2002/10/12 10:31:31 schweikh Exp $
5095a621fSSascha Wildner#
6095a621fSSascha Wildner
7095a621fSSascha Wildner# PROVIDE: bootconf
8095a621fSSascha Wildner# REQUIRE: root
9095a621fSSascha Wildner# BEFORE:  mountcritlocal
10095a621fSSascha Wildner
11095a621fSSascha Wildner. /etc/rc.subr
12095a621fSSascha Wildner
13095a621fSSascha Wildnerbootconf_start()
14095a621fSSascha Wildner{
15095a621fSSascha Wildner	# Refer to newbtconf(8) for more information
16095a621fSSascha Wildner	#
17095a621fSSascha Wildner
18095a621fSSascha Wildner	if [ ! -e /etc/etc.current ]; then
19095a621fSSascha Wildner		return 0
20095a621fSSascha Wildner	fi
21095a621fSSascha Wildner	if [ -L /etc/etc.default ]; then
22095a621fSSascha Wildner		def=`ls -ld /etc/etc.default 2>&1`
23095a621fSSascha Wildner		default="${def##*-> etc.}"
24095a621fSSascha Wildner	else
25095a621fSSascha Wildner		default=current
26095a621fSSascha Wildner	fi
27095a621fSSascha Wildner	if [ "$default" = "current" ]; then
28095a621fSSascha Wildner		def=`ls -ld /etc/etc.current 2>&1`
29095a621fSSascha Wildner		default="${def##*-> etc.}"
30095a621fSSascha Wildner	fi
31095a621fSSascha Wildner
32095a621fSSascha Wildner	spc=""
33095a621fSSascha Wildner	for i in /etc/etc.*; do
34095a621fSSascha Wildner		name="${i##/etc/etc.}"
35095a621fSSascha Wildner		case $name in
36095a621fSSascha Wildner		current|default|\*)
37095a621fSSascha Wildner			continue
38095a621fSSascha Wildner			;;
39095a621fSSascha Wildner		*)
40095a621fSSascha Wildner			if [ "$name" = "$default" ]; then
41095a621fSSascha Wildner				echo -n "${spc}[${name}]"
42095a621fSSascha Wildner			else
43095a621fSSascha Wildner				echo -n "${spc}${name}"
44095a621fSSascha Wildner			fi
45095a621fSSascha Wildner			spc=" "
46095a621fSSascha Wildner			;;
47095a621fSSascha Wildner		esac
48095a621fSSascha Wildner	done
49095a621fSSascha Wildner	echo
50*e54c8dc8SAaron LI
51095a621fSSascha Wildner	master=$$
52095a621fSSascha Wildner	_DUMMY=/etc/passwd
53095a621fSSascha Wildner	conf=${_DUMMY}
54095a621fSSascha Wildner	while [ ! -d /etc/etc.$conf/. ]; do
55095a621fSSascha Wildner		trap "conf=$default; echo; echo Using default of $conf" ALRM
56095a621fSSascha Wildner		echo -n "Which configuration [$default] ? "
57095a621fSSascha Wildner		(sleep 30 && kill -ALRM $master) >/dev/null 2>&1 &
58095a621fSSascha Wildner		read conf
59095a621fSSascha Wildner		trap : ALRM
60095a621fSSascha Wildner		if [ -z $conf ]; then
61095a621fSSascha Wildner			conf=$default
62095a621fSSascha Wildner		fi
63095a621fSSascha Wildner		if [ ! -d /etc/etc.$conf/. ]; then
64095a621fSSascha Wildner			conf=${_DUMMY}
65095a621fSSascha Wildner		fi
66095a621fSSascha Wildner	done
67095a621fSSascha Wildner
68095a621fSSascha Wildner	case  $conf in
69095a621fSSascha Wildner	current|default)
70095a621fSSascha Wildner		;;
71095a621fSSascha Wildner	*)
72095a621fSSascha Wildner		rm -f /etc/etc.current
73095a621fSSascha Wildner		ln -s /etc/etc.$conf /etc/etc.current
74095a621fSSascha Wildner		;;
75095a621fSSascha Wildner	esac
76095a621fSSascha Wildner
77095a621fSSascha Wildner	if [ -f /etc/rc.conf ]; then
78095a621fSSascha Wildner		. /etc/rc.conf
79095a621fSSascha Wildner	fi
80095a621fSSascha Wildner}
81095a621fSSascha Wildner
82095a621fSSascha Wildnercase "$1" in
83095a621fSSascha Wildner*start)
84095a621fSSascha Wildner	bootconf_start
85095a621fSSascha Wildner	;;
86095a621fSSascha Wildneresac
87095a621fSSascha Wildner
88095a621fSSascha Wildnerdummy_rc_command $1 XXX
89