Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Oct 2000 03:32:45 +0200
From:      Neil Blakey-Milner <nbm@mithrandr.moria.org>
To:        FreeBSD Hackers <hackers@FreeBSD.org>
Cc:        Doug Barton <DougB@gorean.org>, Sheldon Hearn <sheldonh@uunet.co.za>
Subject:   Making /etc/defaults/rc.conf a configuration file.
Message-ID:  <20001003033245.A63319@mithrandr.moria.org>

next in thread | raw e-mail | index | archive | help

--Qxx1br4bt0+wmkIi
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi,

With these patches, and the new tiny util 'sourceconf', we can make
/etc/defaults/rc.conf and /etc/defaults/periodic.conf configuration
files again, such that they can be parsed by things other than 'sh'.

It also allows you to set 'rc_conf_files' (or, actually, whatever you
set filevar to) in lower places than the default file, so that you don't
change the default file.

This only shows how to replace things using rc.conf - changing scripts
to use periodic.conf is as simple as replacing

if [ -r /etc/defaults/periodic.conf ]
then
    . /etc/defaults/periodic.conf
    source_periodic_confs
fi

with

rcfile=/etc/defaults/periodic.conf listvar=periodic_conf_files .  /etc/sourceconf

Neil
-- 
Neil Blakey-Milner
Sunesi Clinical Systems
nbm@mithrandr.moria.org

--Qxx1br4bt0+wmkIi
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="sc.patch"

Index: etc/netstart
===================================================================
RCS file: /home/ncvs/src/etc/netstart,v
retrieving revision 1.55
diff -u -r1.55 netstart
--- etc/netstart	2000/04/27 08:43:47	1.55
+++ etc/netstart	2000/10/03 01:14:04
@@ -9,13 +9,9 @@
 # the network by hand, this script will do it for you).
 #
 
-# If there is a global system configuration file, suck it in.
-if [ -f /etc/defaults/rc.conf ]; then
-	. /etc/defaults/rc.conf
-	source_rc_confs
-elif [ -f /etc/rc.conf ]; then
-	. /etc/rc.conf
-fi
+# Suck in the configuration variables
+#
+. /etc/sourceconf
 
 if [ -f /etc/rc.network ]; then
 	. /etc/rc.network
Index: etc/pccard_ether
===================================================================
RCS file: /home/ncvs/src/etc/pccard_ether,v
retrieving revision 1.18
diff -u -r1.18 pccard_ether
--- etc/pccard_ether	2000/09/07 03:06:06	1.18
+++ etc/pccard_ether	2000/10/03 01:02:26
@@ -9,12 +9,7 @@
 
 # Suck in the configuration variables
 #
-if [ -r /etc/defaults/rc.conf ]; then
-	. /etc/defaults/rc.conf
-	source_rc_confs
-elif [ -r /etc/rc.conf ]; then
-	. /etc/rc.conf
-fi
+. /etc/sourceconf
 
 interface=$1
 shift
Index: etc/rc
===================================================================
RCS file: /home/ncvs/src/etc/rc,v
retrieving revision 1.230
diff -u -r1.230 rc
--- etc/rc	2000/08/21 14:37:52	1.230
+++ etc/rc	2000/10/03 01:13:43
@@ -34,14 +34,9 @@
 	fi
 fi
 
-# If there is a global system configuration file, suck it in.
+# Suck in the configuration variables
 #
-if [ -r /etc/defaults/rc.conf ]; then
-	. /etc/defaults/rc.conf
-	source_rc_confs
-elif [ -r /etc/rc.conf ]; then
-	. /etc/rc.conf
-fi
+. /etc/sourceconfs
 
 # Configure ccd devices.
 #
@@ -564,18 +559,13 @@
 echo .
 
 # Do traditional (but rather obsolete) rc.local file if it exists.  If you
-# use this file and want to make it programmatic, source /etc/defaults/rc.conf
+# use this file and want to make it programmatic, source /etc/sourceconf
 # in /etc/rc.local and add your custom variables to /etc/rc.conf, as
 # shown below.  Please do not put local extensions into /etc/rc itself.
 # Use /etc/rc.local
 #
 # ---- rc.local ----
-#	if [ -r /etc/defaults/rc.conf ]; then
-#		. /etc/defaults/rc.conf
-#		source_rc_confs
-#	elif [ -r /etc/rc.conf ]; then
-#		. /etc/rc.conf
-#	fi
+#	. /etc/sourceconf
 #
 #	... additional startup conditionals ...
 # ---- rc.local ----
Index: etc/rc.devfs
===================================================================
RCS file: /home/ncvs/src/etc/rc.devfs,v
retrieving revision 1.8
diff -u -r1.8 rc.devfs
--- etc/rc.devfs	2000/04/27 08:43:48	1.8
+++ etc/rc.devfs	2000/10/03 01:14:34
@@ -1,14 +1,9 @@
 #
 # $FreeBSD: src/etc/rc.devfs,v 1.8 2000/04/27 08:43:48 sheldonh Exp $
 #
-# If there is a global system configuration file, suck it in.
+# Suck in the configuration variables
 #
-if [ -r /etc/defaults/rc.conf ]; then
-	. /etc/defaults/rc.conf
-	source_rc_confs
-elif [ -r /etc/rc.conf ]; then
-	. /etc/rc.conf
-fi
+. /etc/sourceconf
 
 # Setup DEVFS, ie permissions, links etc.
 #
Index: etc/rc.diskless2
===================================================================
RCS file: /home/ncvs/src/etc/rc.diskless2,v
retrieving revision 1.6
diff -u -r1.6 rc.diskless2
--- etc/rc.diskless2	2000/04/27 08:43:48	1.6
+++ etc/rc.diskless2	2000/10/03 01:04:43
@@ -5,12 +5,7 @@
 
 # If there is a global system configuration file, suck it in.
 #
-if [ -r /etc/defaults/rc.conf ]; then
-	. /etc/defaults/rc.conf
-	source_rc_confs
-elif [ -r /etc/rc.conf ]; then
-	. /etc/rc.conf
-fi
+. /etc/sourceconf
 
 mount_mfs -s ${varsize:=65536} -T qp120at dummy /var
 var_dirs="run dev db msgs tmp spool spool/mqueue spool/lpd spool/output \
Index: etc/rc.firewall
===================================================================
RCS file: /home/ncvs/src/etc/rc.firewall,v
retrieving revision 1.37
diff -u -r1.37 rc.firewall
--- etc/rc.firewall	2000/08/30 13:14:32	1.37
+++ etc/rc.firewall	2000/10/03 01:04:57
@@ -3,12 +3,7 @@
 # $FreeBSD: src/etc/rc.firewall,v 1.37 2000/08/30 13:14:32 ru Exp $
 
 # Suck in the configuration variables.
-if [ -r /etc/defaults/rc.conf ]; then
-	. /etc/defaults/rc.conf
-	source_rc_confs
-elif [ -r /etc/rc.conf ]; then
-	. /etc/rc.conf
-fi
+. /etc/sourceconf
 
 ############
 # Define the firewall type in /etc/rc.conf.  Valid values are:
Index: etc/rc.shutdown
===================================================================
RCS file: /home/ncvs/src/etc/rc.shutdown,v
retrieving revision 1.11
diff -u -r1.11 rc.shutdown
--- etc/rc.shutdown	2000/08/18 10:34:11	1.11
+++ etc/rc.shutdown	2000/10/03 01:14:46
@@ -17,14 +17,9 @@
 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
 export HOME PATH
 
-# If there is a global system configuration file, suck it in.
+# Suck in the configuration variables
 #
-if [ -r /etc/defaults/rc.conf ]; then
-	. /etc/defaults/rc.conf
-	source_rc_confs
-elif [ -r /etc/rc.conf ]; then
-	. /etc/rc.conf
-fi
+. /etc/sourceconf
 
 # Write some entropy so the rebooting /dev/random can reseed
 #
Index: etc/defaults/rc.conf
===================================================================
RCS file: /home/ncvs/src/etc/defaults/rc.conf,v
retrieving revision 1.78
diff -u -r1.78 rc.conf
--- etc/defaults/rc.conf	2000/09/01 01:08:52	1.78
+++ etc/defaults/rc.conf	2000/10/03 01:23:32
@@ -298,28 +298,3 @@
 start_vinum=""		# set to YES to start vinum
 entropy_file="/var/db/entropy"
 			# Set to NO to disable caching entropy through reboots
-
-##############################################################
-### Define source_rc_confs, the mechanism used by /etc/rc.* ##
-### scripts to source rc_conf_files overrides safely.	    ##
-##############################################################
-
-if [ -z "${source_rc_confs_defined}" ]; then
-        source_rc_confs_defined=yes
-        source_rc_confs ( ) {
-                local i sourced_files
-                for i in ${rc_conf_files}; do
-                        case ${sourced_files} in
-                        *:$i:*)
-                                ;;
-                        *)
-                                sourced_files="${sourced_files}:$i:"
-                                if [ -r $i ]; then
-                                        . $i
-                                fi
-                                ;;
-                        esac
-                done
-        }
-fi
-

--Qxx1br4bt0+wmkIi
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=sourceconf

#!/bin/sh
#
# Copyright (c) 2000 Neil Blakey-Milner
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# Original code by Doug Barton <Doug@gorean.org>
#

sourceconf_decho ( ) {
	case "$sourceconf_debug" in
	'')
		;;
	*)
		echo $*
		;;
	esac
}

sourceconf_dosrc ( ) {
	local ${listvar}
	for i in $*; do
		case "${sourceconf_sourced_files}" in
		*:$i:*)
			;;
		*)
			sourceconf_sourced_files="${sourceconf_sourced_files}:$i:"
			sourceconf_decho $i
			if [ -r $i ]; then
				. $i
				eval sourceconf_dosrc \$${listvar}
			fi
			;;
		esac
	done
}


sourceconf_start ( ) {
	local rcfile
	local sourceconf_sourced_files
	local listvar

	sourceconf_sourced_files=

	case "$rcfile" in
	'')
		rcfile=/etc/defaults/rc.conf
		;;
	esac

	case "$listvar" in
	'')
		listvar=rc_conf_files
		;;
	esac

	sourceconf_dosrc $rcfile
}

sourceconf_start

unset sourceconf_start
unset sourceconf_dosrc
unset sourceconf_decho

--Qxx1br4bt0+wmkIi--


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20001003033245.A63319>