1#!/bin/sh 2# 3# rcng command 4# 5# $DragonFly: src/sbin/rcrun/rcrun.sh,v 1.4 2003/12/13 02:49:09 dillon Exp $ 6 7OS=`sysctl -n kern.ostype` 8 9dostart() 10{ 11 arg=$1 12 shift 13 14 for i in $@; do 15 case X`varsym -s -q rcng_$i` in 16 Xrunning*) 17 echo "$i has already been started" 18 ;; 19 Xconfigured*) 20 echo "$i has already been configured" 21 ;; 22 *) 23 _return=0 24 for j in `rcorder -k $OS -o $i /etc/rc.d/*`; do 25 need=1 26 for k in `rcorder -p $j`; do 27 if [ $k = $i ]; then 28 need=0 29 else 30 state=`varsym -s -q rcng_$k` 31 case X$state in 32 Xrunning*|Xconfigured*|Xirrelevant*|Xdisabled*) 33 ;; 34 *) 35 echo "$i depends on $k, current state: $state" 36 _return=1 37 ;; 38 esac 39 fi 40 done 41 done 42 # $j contains the last dependancy, which we run 43 # 44 if [ X$j = X ]; then 45 echo "Unable to find keyword $i" 46 elif [ $_return = 0 ]; then 47 echo "Running $j $arg" 48 (cd /etc/rc.d; sh $j $arg) 49 case X`varsym -s -q rcng_$i` in 50 Xdisabled*) 51 echo "$i is disabled, enable in rc.conf first or use rcforce" 52 ;; 53 Xfailed*) 54 echo "$i has failed to start" 55 ;; 56 57 esac 58 fi 59 ;; 60 esac 61 done 62} 63 64arg=$0 65case ${0##*/} in 66rcstart) 67 arg=start 68 ;; 69rcstop) 70 arg=stop 71 ;; 72rcrestart) 73 arg=restart 74 ;; 75rcvar) 76 arg=rcvar 77 ;; 78rcvars) 79 arg=rcvar 80 ;; 81rclist) 82 arg=list 83 ;; 84rcforce) 85 arg=forcestart 86 ;; 87rcfast) 88 arg=faststart 89 ;; 90rcenable) 91 arg=enable 92 ;; 93rcdisable) 94 arg=disable 95 ;; 96*) 97 arg=$1 98 shift 99 ;; 100esac 101 102case $arg in 103start) 104 dostart start $@ 105 ;; 106forcestart) 107 dostart forcestart $@ 108 ;; 109faststart) 110 dostart faststart $@ 111 ;; 112stop) 113 for i in $@; do 114 j=`rcorder -k $OS -o $i /etc/rc.d/* | tail -1` 115 if [ X$j = X ]; then 116 echo "Unable to find keyword $i" 117 else 118 (cd /etc/rc.d; sh $j stop) 119 fi 120 done 121 ;; 122restart) 123 for i in $@; do 124 j=`rcorder -k $OS -o $i /etc/rc.d/* | tail -1` 125 if [ X$j = X ]; then 126 echo "Unable to find keyword $i" 127 else 128 (cd /etc/rc.d; sh $j restart) 129 fi 130 done 131 ;; 132disable|enable) 133 if [ "$arg" = "enable" ]; then 134 mode=YES 135 else 136 mode=NO 137 fi 138 for i in $@; do 139 j=`rcorder -k $OS -o $i /etc/rc.d/* | tail -1` 140 if [ X$j = X ]; then 141 echo "Unable to find provider id $i" 142 elif [ `varsym -s -q rcng_$i` = "$mode" ]; then 143 echo "$i is already $mode" 144 else 145 vars=`(cd /etc/rc.d; sh $j rcvar) 2>/dev/null | egrep '_enable' | sed -e 's/\\$//g' | sed -e 's/=.*//g'` 146 cp /etc/rc.conf /etc/rc.conf.bak 147 for k in $vars; do 148 rm -f /etc/rc.conf.$$ 149 ( egrep -v "#rcrun ${k}" /etc/rc.conf; printf "${k}=${mode}\t#rcrun ${k}_enable\n" ) > /etc/rc.conf.$$ 150 mv -f /etc/rc.conf.$$ /etc/rc.conf 151 echo "added/modified: ${k}=${mode}" 152 done 153 if [ $arg = enable ]; then 154 rcstart $i 155 else 156 rcstop $i 157 fi 158 fi 159 done 160 ;; 161rcvar) 162 for i in $@; do 163 j=`rcorder -k $OS -o $i /etc/rc.d/* | tail -1` 164 if [ X$j = X ]; then 165 echo "Unable to find provider id $i" 166 else 167 (cd /etc/rc.d; sh $j rcvar) 168 fi 169 done 170 ;; 171list) 172 if [ X$@ = X ]; then 173 for i in `varsym -a -s | egrep '^rcng_'`; do 174 echo $i 175 done 176 else 177 for i in $@; do 178 varsym -s rcng_$i 2>/dev/null || varsym -s rcng_$i 179 done 180 fi 181 ;; 182*) 183 echo "$0 {start|stop|restart|rcvar|list|forcestart|faststart} <rcng_list>" 184 ;; 185esac 186 187