NetBSD/etc/rc.d/rndctl
joerg e7f29a3386 Split fsck during boot into two phases. Check the root file system
first, mount root and run the various disk providers. Add swap and
check the remaining file systems after that.
This breaks the dependency cycle for lvm, which needs writeable /dev.
Depend on rndctl in cgd.
2009-04-21 16:08:57 +00:00

81 lines
1.8 KiB
Bash

#!/bin/sh
#
# $NetBSD: rndctl,v 1.3 2009/04/21 16:08:57 joerg Exp $
#
# PROVIDE: rndctl
# BEFORE: DISKS ike ipsec sshd
# REQUIRE: wdogctl
$_rc_subr_loaded . /etc/rc.subr
name="rndctl"
rcvar=$name
command="/sbin/${name}"
start_cmd="rndctl_startcmd"
rndctl_startcmd()
{
# $rndctl_flags can contain multiple semicolon-separated
# segments in which each segment contains optional flags
# followed by one or more device or type names. If none of the
# -c/-C/-e/-E flags is specified, then "-c -e" is used. If
# neither of the -d/-t flags is specified, then "-d" is used.
#
# For example, given
# rndctl_flags="wd0 wd1; -t tty; -c -t net"
# we will perform the following commands:
# rndctl -c -e -d wd0
# rndctl -c -e -d wd1
# rndctl -c -e -t tty
# rndctl -c -t net
local args arg flags
# Split $rndctl_flags on semicolons
oIFS="$IFS"
IFS=';'
set -- $rndctl_flags
IFS="$oIFS"
# The outer "for args" loop cycles once per semicolon-separated
# segment; the inner "for arg" loop cycles once per word in a
# segment.
for args in "$@"; do
#echo >&2 "${name} DEBUG: Parsing segment: $args";
flags=''
for arg in ${args}; do
case "${arg}" in
-*)
flags="${flags} ${arg}"
;;
*)
# We have a device or type name.
# If none of -c/-C/-e/-E flags was
# specified, add "-c -e". If neither
# of -d/-t was specified, add "-d".
# Then perform the command with the
# specified device or type name.
#
# Note that -d/-t flag must be last.
#
case "${flags}" in
*[cCeE]*) ;;
*) flags="-c -e ${flags}" ;;
esac
case "${flags}" in
*[dt]*) ;;
*) flags="${flags} -d" ;;
esac
#echo >&2 "${name} DEBUG: running:" \
# "$command $flags $arg"
$command ${flags} ${arg}
;;
esac
done
done
}
load_rc_config $name
run_rc_command "$1"