freebsd-dev/etc/rc.d/devfs
Mike Makonnen 130112f793 Add a general mechanism for creating and applying
devfs(8) rules in rc(8). It is most useful for applying
rules to devfs(5) mount points in /dev or inside jails.
The following line of script is sufficient to
mount a relatively useful+secure devfs(5) in a jail:

	devfs_mount_jail /some/jail/dev

Some new shell routines available to scripts that source
rc.subr(5):
	o devfs_link		- Makes it a little easier to create symlinks
	o devfs_init_rulesets	- Create devfs(8) rulesets from devfs.rules
	o devfs_set_ruleset	- Set a ruleset to a devfs(5) mount
	o devfs_apply_ruleset	- Apply a ruleset to a devfs(5) mount
	o devfs_domount		- Mount devfs(5) and apply some ruleset
	o devfs_mount_jail	- Mount devfs(5) and apply a ruleset
				  appropriate to jails.

Additional rulesets can be specified in /etc/devfs.rules.
If the devfs_system_ruleset variable is defined in rc.conf
and it contains the name of a ruleset defined in /etc/defaults/devfs.rules
or user supplied rulesets in /etc/devfs.rules then that ruleset will
be applied to /dev at startup by the /etc/rc.d/devfs script. It can
also be applied post-startup:

	/etc/rc.d/devfs start

This is a more flexible mechanism than the previous method of using
/etc/devfs.conf. However, that method is still available.

Note: since devfs(8) doesn't provide any way for creating symlinks
as part of a ruleset, anyone wishing to create symlinks in a devfs(5)
as part of the bootup sequence will still have to rely on /etc/devfs.conf.
2003-08-20 06:15:18 +00:00

52 lines
843 B
Bash

#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: devfs
# REQUIRE: LOGIN
# BEFORE: securelevel
# KEYWORD: FreeBSD
. /etc/rc.subr
name="devfs"
start_cmd='devfs_start'
stop_cmd=':'
devfs_start()
{
if [ -n "$devfs_system_ruleset" ]; then
devfs_init_rulesets
devfs_set_ruleset $devfs_system_ruleset /dev
devfs_apply_ruleset $devfs_system_ruleset /dev
fi
read_devfs_conf
}
read_devfs_conf()
{
if [ -r /etc/devfs.conf ]; then
cd /dev
while read action device parameter; do
case "${action}" in
l*) if [ -c ${device} -a ! -e ${parameter} ]; then
ln -fs ${device} ${parameter}
fi
;;
o*) if [ -c ${device} ]; then
chown ${parameter} ${device}
fi
;;
p*) if [ -c ${device} ]; then
chmod ${parameter} ${device}
fi
;;
esac
done < /etc/devfs.conf
fi
}
load_rc_config $name
run_rc_command "$1"