1#!/bin/sh 2# 3# $FreeBSD$ 4# 5 6# PROVIDE: devfs 7# REQUIRE: mountcritremote 8# BEFORE: SERVERS securelevel 9# KEYWORD: nojail 10 11. /etc/rc.subr 12 13name="devfs" 14desc="Device filesystem" 15start_cmd='devfs_start' 16stop_cmd=':' 17 18devfs_start() 19{ 20 if [ -n "$devfs_system_ruleset" -o -n "$devfs_set_rulesets" ] || 21 checkyesno devfs_load_rulesets; then 22 devfs_init_rulesets 23 if [ -n "$devfs_system_ruleset" ]; then 24 devfs_set_ruleset $devfs_system_ruleset /dev 25 devfs_apply_ruleset $devfs_system_ruleset /dev 26 fi 27 if [ -n "$devfs_set_rulesets" ]; then 28 local _dir_set 29 local _dir 30 local _set 31 for _dir_set in $devfs_set_rulesets; do 32 _dir=${_dir_set%=*} 33 _set=${_dir_set#*=} 34 devfs_set_ruleset $_set $_dir 35 devfs_apply_ruleset $_set $_dir 36 done 37 fi 38 fi 39 read_devfs_conf 40} 41 42read_devfs_conf() 43{ 44 if [ -r /etc/devfs.conf ]; then 45 cd /dev 46 while read action devicelist parameter; do 47 case "${action}" in 48 l*) for device in ${devicelist}; do 49 if [ ! -e ${parameter} ]; then 50 ln -fs ${device} ${parameter} 51 fi 52 done 53 ;; 54 o*) for device in ${devicelist}; do 55 if [ -c ${device} ]; then 56 chown ${parameter} ${device} 57 fi 58 done 59 ;; 60 p*) for device in ${devicelist}; do 61 if [ -c ${device} ]; then 62 chmod ${parameter} ${device} 63 fi 64 done 65 ;; 66 esac 67 done < /etc/devfs.conf 68 fi 69} 70 71load_rc_config $name 72run_rc_command "$1" 73