#!/bin/sh # # Copyright (c) 2000-2004 The FreeBSD Project # 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. # # @(#)rc 5.27 (Berkeley) 6/5/91 # $FreeBSD$ # # System startup script run by init on autoboot # or after single-user. # Output and error are redirected to console by init, # and the console is the controlling terminal. # Note that almost all of the user-configurable behavior is no longer in # this file, but rather in /etc/defaults/rc.conf. Please check that file # first before contemplating any changes here. If you do need to change # this file for some reason, we would like to know about it. stty status '^T' # Set shell to ignore SIGINT (2), but not children; # shell catches SIGQUIT (3) and returns to single user. # trap : 2 trap "echo 'Boot interrupted'; exit 1" 3 HOME=/ PATH=/sbin:/bin:/usr/sbin:/usr/bin export HOME PATH if [ "$1" = autoboot ]; then autoboot=yes _boot="faststart" rc_fast=yes # run_rc_command(): do fast booting else autoboot=no _boot="quietstart" fi dlv=`/sbin/sysctl -n vfs.nfs.diskless_valid 2> /dev/null` if [ ${dlv:=0} -ne 0 -o -f /etc/diskless ]; then sh /etc/rc.initdiskless fi # Run these after determining whether we are booting diskless in order # to minimize the number of files that are needed on a diskless system, # and to make the configuration file variables available to rc itself. # . /etc/rc.subr load_rc_config 'XXX' skip="-s nostart" if [ `/sbin/sysctl -n security.jail.jailed` -eq 1 ]; then skip="$skip -s nojail" if [ "$early_late_divider" = "FILESYSTEMS" ]; then early_late_divider=NETWORKING fi fi # Do a first pass to get everything up to $early_late_divider so that # we can do a second pass that includes $local_startup directories # files=`rcorder ${skip} /etc/rc.d/* 2>/dev/null` _rc_elem_done=' ' for _rc_elem in ${files}; do run_rc_script ${_rc_elem} ${_boot} _rc_elem_done="${_rc_elem_done}${_rc_elem} " case "$_rc_elem" in */${early_late_divider}) break ;; esac done unset files local_rc # Now that disks are mounted, for each dir in $local_startup # search for init scripts that use the new rc.d semantics. # case ${local_startup} in [Nn][Oo] | '') ;; *) find_local_scripts_new ;; esac rm /tmp/.bgStart.$$ 2>/dev/null # Startup tasks we can background safely bgtasks="/usr/local/etc/rc.d/webcamd /usr/local/etc/rc.d/wardenrc /usr/local/etc/rc.d/virtuoso /usr/local/etc/rc.d/vboxwebsrv /usr/local/etc/rc.d/vboxnet /usr/local/etc/rc.d/vboxheadless /usr/local/etc/rc.d/uuidd /usr/local/etc/rc.d/uhidd /usr/local/etc/rc.d/swapexd /usr/local/etc/rc.d/svnserve /usr/local/etc/rc.d/snmptrapd /usr/local/etc/rc.d/snmpd /usr/local/etc/rc.d/slpd /usr/local/etc/rc.d/saned /usr/local/etc/rc.d/rsyncd /usr/local/etc/rc.d/portjail /usr/local/etc/rc.d/pcbsdinit /usr/local/etc/rc.d/pc-sounddetect /usr/local/etc/rc.d/pbid /usr/local/etc/rc.d/netatalk /usr/local/etc/rc.d/mysql-server /usr/local/etc/rc.d/mdnsd /usr/local/etc/rc.d/lircd /usr/local/etc/rc.d/kdm4 /usr/local/etc/rc.d/gpsd /usr/local/etc/rc.d/git_daemon /usr/local/etc/rc.d/fusefs /usr/local/etc/rc.d/ffserver /usr/local/etc/rc.d/denyhosts /usr/local/etc/rc.d/cupsd /usr/local/etc/rc.d/bsdstats /usr/local/etc/rc.d/avahi-dnsconfd /usr/local/etc/rc.d/anacron /etc/rc.d/cron /etc/rc.d/jail /etc/rc.d/bgfsck /etc/rc.d/ntpd /etc/rc.d/powerd /etc/rc.d/sshd /etc/rc.d/sendmail /etc/rc.d/ftpd /etc/rc.d/ftp-proxy /etc/rc.d/inetd /etc/rc.d/netif /etc/rc.d/routing /etc/rc.d/routed /etc/rc.d/wpa_supplicant /etc/rc.d/pfsync /etc/rc.d/pflog /etc/rc.d/defaultroute /etc/rc.d/dhclient /etc/rc.d/dmesg /etc/rc.d/hastd /etc/rc.d/ipxrouted /etc/rc.d/kerberos /etc/rc.d/kadmind /etc/rc.d/keyserv /etc/rc.d/kpasswdd /etc/rc.d/nfsuserd /etc/rc.d/gssd /etc/rc.d/quota /etc/rc.d/mountd /etc/rc.d/nfsd /etc/rc.d/statd /etc/rc.d/lockd /etc/rc.d/pppoed /etc/rc.d/pwcheck /etc/rc.d/virecover /etc/rc.d/apm /etc/rc.d/apmd /etc/rc.d/bootparams /etc/rc.d/hcsecd /etc/rc.d/bthidd /etc/rc.d/local /etc/rc.d/lpd /etc/rc.d/mountlate /etc/rc.d/nscd /etc/rc.d/rarpd /etc/rc.d/rctl /etc/rc.d/sdpd /etc/rc.d/rfcomm_pppd_server /etc/rc.d/rtadvd /etc/rc.d/rwho /etc/rc.d/timed /etc/rc.d/ugidfw /etc/rc.d/yppasswdd /etc/rc.d/ypxfrd /etc/rc.d/ypupdated /etc/rc.d/watchdogd /etc/rc.d/ubthidhci /etc/rc.d/securelevel /etc/rc.d/othermta /etc/rc.d/nfscbd /etc/rc.d/msgs /etc/rc.d/hostapd /etc/rc.d/gptboot /etc/rc.d/geli2 /etc/rc.d/bsnmpd /etc/rc.d/devd /usr/local/etc/rc.d/avahi-daemon /usr/local/etc/rc.d/avahi-dnsconfd" files=`rcorder ${skip} /etc/rc.d/* ${local_rc} 2>/dev/null` for _rc_elem in ${files}; do case "$_rc_elem_done" in *" $_rc_elem "*) continue ;; esac # Check if this can be safely started after login bgSafe=0 for i in ${bgtasks}; do if [ "${i}" = "${_rc_elem}" ] ; then bgSafe=1 break fi done if [ $bgSafe -eq 0 ]; then # Run startup now run_rc_script ${_rc_elem} ${_boot} echo "${_rc_elem}" >>/tmp/rcele else # Delay startup until after system loaded echo "${_rc_elem}" >>/tmp/.bgStart.$$ fi done # Start the delayed service startup (sleep 30; /bin/sh /etc/rc.delay /tmp/.bgStart.$$)& echo '' date exit 0