Annotation of src/etc/rc, Revision 1.133
1.133 ! darrenr 1: # $NetBSD: rc,v 1.132 1999/09/28 14:53:17 bouyer Exp $
1.73 perry 2: # originally from: @(#)rc 8.2 (Berkeley) 3/17/94
1.1 cgd 3:
4: # System startup script run by init on autoboot
5: # or after single-user.
6: # Output and error are redirected to console by init,
7: # and the console is the controlling terminal.
8:
9: stty status '^T'
10:
11: # Set shell to ignore SIGINT (2), but not children;
12: # shell catches SIGQUIT (3) and returns to single user after fsck.
13: trap : 2
14: trap : 3 # shouldn't be needed
15:
1.68 mycroft 16: export HOME=/
1.96 jonathan 17: export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin
1.50 thorpej 18:
19: # Configure ccd devices.
1.63 mrg 20: if [ -f /etc/ccd.conf ]; then
1.50 thorpej 21: ccdconfig -C
22: fi
1.107 tron 23:
24: # Configure raid devices.
25: for dev in 0 1 2 3; do
26: if [ -f /etc/raid$dev.conf ]; then
27: raidctl -c /etc/raid$dev.conf raid$dev
28: fi
29: done
1.1 cgd 30:
1.79 thorpej 31: # Add all block-type swap devices; these might be necessary
32: # during disk checks.
33: swapctl -A -t blk
34:
1.63 mrg 35: if [ -e /fastboot ]; then
1.38 cgd 36: echo "Fast boot: skipping disk checks."
1.68 mycroft 37: elif [ "$1" = autoboot ]; then
1.38 cgd 38: echo "Automatic boot in progress: starting file system checks."
1.1 cgd 39: fsck -p
40: case $? in
41: 0)
42: ;;
43: 2)
44: exit 1
45: ;;
46: 4)
1.35 cgd 47: echo "Rebooting..."
1.1 cgd 48: reboot
1.38 cgd 49: echo "Reboot failed; help!"
1.1 cgd 50: exit 1
51: ;;
52: 8)
1.38 cgd 53: echo "Automatic file system check failed; help!"
1.1 cgd 54: exit 1
55: ;;
56: 12)
1.38 cgd 57: echo "Boot interrupted."
1.1 cgd 58: exit 1
59: ;;
60: 130)
61: # interrupt before catcher installed
62: exit 1
63: ;;
64: *)
1.38 cgd 65: echo "Unknown error; help!"
1.1 cgd 66: exit 1
67: ;;
68: esac
69: fi
70:
1.38 cgd 71: trap "echo 'Boot interrupted.'; exit 1" 3
1.1 cgd 72:
73: umount -a >/dev/null 2>&1
1.83 drochner 74: mount /
1.1 cgd 75: rm -f /fastboot # XXX (root now writeable)
1.40 cgd 76:
1.90 veego 77: if [ -f /etc/rc.subr ]; then
78: . /etc/rc.subr
1.89 cjs 79: else
1.90 veego 80: echo "Can't read /etc/rc.subr; aborting."
1.89 cjs 81: exit 1;
82: fi
83:
1.71 mycroft 84: if [ -f /etc/rc.conf ]; then
1.63 mrg 85: . /etc/rc.conf
86: fi
87:
1.89 cjs 88: if [ "$rc_configured" != YES ]; then
89: echo "/etc/rc.conf is not configured. Multiuser boot aborted."
90: exit 1
91: fi
92:
1.40 cgd 93: # set flags on ttys. (do early, in case they use tty for SLIP in netstart)
94: echo 'setting tty flags'
95: ttyflags -a
1.1 cgd 96:
1.83 drochner 97: # load kernel modules specified in /etc/lkm.conf if the /usr filesystem
98: # is already present with "/" or can be mounted now
1.93 drochner 99: if checkyesno lkm && [ -f /etc/rc.lkm ]; then
1.83 drochner 100: mount /usr >/dev/null 2>&1
101: if [ -x /usr/bin/ld ]; then
102: lkmstage=BEFORENET
103: . /etc/rc.lkm
104: fi
1.63 mrg 105: fi
106:
1.124 cjs 107: mount_critical_filesystems local
1.120 mellon 108:
1.133 ! darrenr 109: if [ -e /etc/etc.current ] ; then
! 110: if [ -h /etc/etc.default ] ; then
! 111: def=`ls -ld /etc/etc.default 2>&1`
! 112: default=`expr "$def" : '.*-> etc\.\(.*\)' 2>&1`
! 113: else
! 114: default=current
! 115: fi
! 116: spc=""
! 117: conflist=`cd /etc; ls -1d etc.* 2>&1 | egrep -v 'current|default'`
! 118: for i in $conflist; do
! 119: name=`expr $i : 'etc\.\(.*\)' 2>&1`
! 120: if [ $name = $default ] ; then
! 121: echo -n "${spc}[${name}]"
! 122: else
! 123: echo -n "${spc}${name}"
! 124: fi
! 125: spc=" "
! 126: done
! 127: echo
! 128: master=$$
! 129: conf=/etc/passwd
! 130: while [ ! -d /etc/etc.$conf ] ; do
! 131: trap 'conf=$default; echo; echo Using default of $conf' 14
! 132: echo -n "Which configuration [$default] ? "
! 133: (sleep 30 && kill -ALRM $master) >/dev/null 2>&1 &
! 134: read conf
! 135: trap "" 14
! 136: if [ -z $conf ] ; then
! 137: conf=$default
! 138: fi
! 139: if [ ! -d /etc/etc.$conf -a ! -h /etc/etc.$conf ] ; then
! 140: conf=/etc/passwd
! 141: fi
! 142: done
! 143: rm -f /etc/etc.current
! 144: ln -s /etc/etc.$conf /etc/etc.current
! 145: if [ -f /etc/rc.conf ] ; then
! 146: . /etc/rc.conf
! 147: fi
! 148: fi
! 149:
1.1 cgd 150: # set hostname, turn on network
151: echo 'starting network'
1.76 scottr 152: sh /etc/netstart
153: if [ $? -ne 0 ]; then
154: exit 1
155: fi
1.1 cgd 156:
1.124 cjs 157: mount_critical_filesystems network
1.99 veego 158:
159: # Network Address Translation...
1.100 lukem 160: if checkyesno ipnat && [ -f /etc/ipnat.conf ]; then
1.99 veego 161: echo 'installing NAT rules ... '
1.100 lukem 162: if ! checkyesno ipfilter || [ ! -f /etc/ipf.conf ]; then
1.99 veego 163: ipf -E -Fa
164: fi
165: ipnat -F -f /etc/ipnat.conf
166: fi
1.79 thorpej 167:
168: # "Critical" file systems are now mounted. Go ahead and swap
169: # to files now, since they will be residing in the critical file
170: # systems (or, at least, better).
171: swapctl -A -t noblk
1.97 mrg 172:
173: # Check for no swap, and warn about it unless that is desired.
1.100 lukem 174: if ! checkyesno no_swap; then
1.97 mrg 175: swapctl -s | grep 'no swap devices configured' > /dev/null && \
176: echo "WARNING: no swap space configured!"
177: fi
1.26 deraadt 178:
1.41 jtc 179: # clean up left-over files
180: rm -f /etc/nologin
181: rm -f /var/spool/lock/LCK.*
182: rm -f /var/spool/uucp/STST/*
1.45 cgd 183: (cd /var/run && { rm -rf -- *; install -c -m 664 -g utmp /dev/null utmp; })
1.108 abs 184:
1.131 darrenr 185: # if this kernel supports machdep.booted_kernel, use that to build the KVM
186: # db so dmesg will run work when we boot /netbsd.new, etc.
1.133 ! darrenr 187: sysctl machdep 2>/dev/null | grep -q booted_kernel
1.131 darrenr 188: if [ $? -eq 0 ] ; then
189: kvm_mkdb `sysctl -n machdep.booted_kernel`
190: fi
1.111 mrg 191: # get the system dmesg output, hopefully containing the boot messages
192: # $dmesg_flags is imported from /etc/rc.conf
193: if checkyesno dmesg; then
194: dmesg $dmesg_flags > /var/run/dmesg.boot
195: fi
1.41 jtc 196:
1.125 tron 197: if checkyesno wscons && [ -f /etc/rc.wscons ]; then
198: echo 'configuring wscons'
199: /bin/sh /etc/rc.wscons $wscons_flags
200: fi
201:
1.84 veego 202: # start the system logger first, so that all messages from daemons
203: # are logged, then start savecore to get a dump on low memory systems
204: # and then start the name server.
1.63 mrg 205:
1.89 cjs 206: if checkyesno syslogd; then
1.63 mrg 207: echo 'starting system logger'
1.119 perry 208: # Transitional symlink for old binaries
209: if [ ! -h /dev/log ] ; then
210: ln -sf /var/run/log /dev/log
211: fi
212: rm -f /var/run/log
1.63 mrg 213: syslogd $syslogd_flags
1.94 lukem 214: fi
215:
216: # Enable ipmon (only useful if ipfilter is running)
217: # NOTE: requires the IPFILTER_LOG kernel option.
218: if checkyesno ipmon; then
219: echo 'starting ipmon'
220: ipmon $ipmon_flags &
1.63 mrg 221: fi
222:
1.84 veego 223: # /var/crash should be a directory or a symbolic link
224: # to the crash directory if core dumps are to be saved.
1.89 cjs 225: if checkyesno savecore; then
1.106 hubertf 226: if [ -d /var/crash/. ]; then
1.89 cjs 227: echo checking for core dump...
228: savecore $savecore_flags /var/crash
229: else
230: logger -s "WARNING: no /var/crash directory; savecore not run."
1.84 veego 231: fi
232: fi
233:
1.89 cjs 234: if checkyesno named; then
235: echo 'starting name server'; named $named_flags
236: fi
237:
238: # set time, if requested
239: if checkyesno ntpdate; then
1.91 mikel 240: if [ -z "$ntpdate_hosts" ]; then
1.101 lukem 241: ntpdate_hosts=`awk '
242: /^server[ \t]*127.127/ {next}
1.115 bad 243: /^(server|peer)/ {print $2}
1.101 lukem 244: ' </etc/ntp.conf`
1.89 cjs 245: fi
246: if [ -n "$ntpdate_hosts" ]; then
247: echo 'Setting date via ntp.'
1.102 lukem 248: ntpdate -b -s $ntpdate_hosts
1.67 mycroft 249: fi
1.63 mrg 250: fi
251:
1.84 veego 252: # now start the rpc servers, for YP server/client.
1.63 mrg 253: echo -n 'starting rpc daemons:'
254:
255: # note that portmap is generally required for all other rpc services.
1.89 cjs 256: if checkyesno portmap; then
1.109 jwise 257: echo -n ' portmap'; portmap $portmap_flags
1.63 mrg 258: fi
259:
1.89 cjs 260: if checkyesno ypserv; then
1.63 mrg 261: echo -n ' ypserv'; ypserv $ypserv_flags
262: fi
263:
1.89 cjs 264: if checkyesno ypbind; then
1.63 mrg 265: echo -n ' ypbind'; ypbind $ypbind_flags
266: fi
267:
1.89 cjs 268: if checkyesno yppasswdd; then
1.63 mrg 269: echo -n ' rpc.yppasswdd'; rpc.yppasswdd $yppasswdd_flags
270: fi
271:
1.89 cjs 272: if checkyesno bootparamd; then
273: if [ -r /etc/bootparams ]; then
274: echo -n ' rpc.bootparamd'; rpc.bootparamd $bootparamd_flags
275: else
276: echo
277: logger -s "WARNING: /etc/bootparams not found. " \
278: "bootparamd not started."
1.67 mycroft 279: fi
1.63 mrg 280: fi
281:
1.84 veego 282: echo '.'
283:
284: # load kernel modules specified in /etc/lkm.conf
1.89 cjs 285: if checkyesno lkm; then
286: if [ -r /etc/rc.lkm ]; then
287: lkmstage=BEFOREMOUNT
288: . /etc/rc.lkm
289: else
290: logger -s "WARNING: /etc/rc.lkm not found; LKMs not loaded."
291: fi
1.84 veego 292: fi
293:
294: mount -a
295:
296: # now start the rpc servers, for NFS server/client.
1.133 ! darrenr 297: if checkyesno nfs_client || checkyesno nfs_server; then
! 298: echo -n 'starting nfs daemons:'
! 299:
! 300: nfs_locking=NO
1.84 veego 301:
1.133 ! darrenr 302: if checkyesno nfs_server; then
! 303: if [ -r /etc/exports ]; then
! 304: rm -f /var/db/mountdtab
! 305: echo -n > /var/db/mountdtab
! 306: echo -n ' mountd'; mountd $mountd_flags
! 307: echo -n ' nfsd'; nfsd $nfsd_flags
! 308: nfs_locking=YES
! 309: else
! 310: echo
! 311: logger -s "WARNING: /etc/exports not readable; " \
! 312: "NFS server not started."
! 313: fi
! 314: fi
1.67 mycroft 315:
1.133 ! darrenr 316: if checkyesno nfs_client; then
! 317: echo -n ' nfsiod'; nfsiod $nfsiod_flags
1.100 lukem 318: nfs_locking=YES
1.69 mycroft 319: fi
1.63 mrg 320:
1.133 ! darrenr 321: if checkyesno nfs_locking; then
! 322: if checkyesno statd; then
! 323: echo -n ' rpc.statd'; rpc.statd $statd_flags
! 324: fi
! 325: if checkyesno lockd; then
! 326: echo -n ' rpc.lockd'; rpc.lockd $lockd_flags
! 327: fi
1.66 scottr 328: fi
1.63 mrg 329:
1.133 ! darrenr 330: if checkyesno amd; then
! 331: if [ -d "$amd_dir" ]; then
! 332: if [ -r "$amd_master" ]; then
! 333: echo -n ' amd'
! 334: amd $amd_flags -p -a $amd_dir \
! 335: `sed s/#.*$// <$amd_master` >/var/run/amd.pid
! 336: else
! 337: echo
! 338: logger -s "WARNING: \$amd_master ($amd_master)not " \
! 339: "readable; amd not started."
! 340: fi
1.89 cjs 341: else
342: echo
1.133 ! darrenr 343: logger -s "WARNING: \$amd_dir ($amd_dir) not a directory; " \
! 344: "amd not started."
1.89 cjs 345: fi
1.67 mycroft 346: fi
1.133 ! darrenr 347: echo '.'
1.63 mrg 348: fi
349:
1.83 drochner 350:
1.63 mrg 351: if [ -f /sbin/ldconfig ]; then
352: echo 'creating runtime link editor directory cache.'
1.88 thorpej 353: ldconfig
1.63 mrg 354: fi
1.83 drochner 355:
356: # load kernel modules specified in /etc/lkm.conf
1.89 cjs 357: if checkyesno lkm && [ -f /etc/rc.lkm ]; then
1.83 drochner 358: lkmstage=AFTERMOUNT
359: . /etc/rc.lkm
1.132 bouyer 360: fi
361:
362: # if $defcorename is set, change it here.
363: if [ -n "$defcorename" ]; then
364: echo -n 'setting default core name template: '
365: sysctl -w kern.defcorename=$defcorename
1.1 cgd 366: fi
367:
1.112 mrg 368: # if $securelevel is set, change it here, else if it is 0, change
369: # it to 1 here, before we start login services.
1.113 mrg 370: if [ -n "$securelevel" ]; then
1.112 mrg 371: echo -n 'setting securelevel: '
372: sysctl -w kern.securelevel=$securelevel
373: else
1.116 frueauf 374: securelevel=`sysctl -n kern.securelevel`
1.112 mrg 375: if [ x"$securelevel" = x0 ]; then
376: echo -n 'setting securelevel: '
377: sysctl -w kern.securelevel=1
378: fi
379: fi
380:
1.89 cjs 381: echo -n 'checking quotas:'; quotacheck -a; echo ' done.'
1.47 deraadt 382: quotaon -a
1.1 cgd 383:
384: # build ps databases
1.2 cgd 385: echo 'building databases...'
1.11 cgd 386: kvm_mkdb /netbsd
1.1 cgd 387: dev_mkdb
388:
389: chmod 666 /dev/tty[pqrs]*
390:
391: # check the password temp/lock file
392: if [ -f /etc/ptmp ]
393: then
394: logger -s -p auth.err \
395: 'password file may be incorrect -- /etc/ptmp exists'
396: fi
397:
1.112 mrg 398: # XXX replace me with a script that works!
1.85 perry 399: virecovery=`echo /var/tmp/vi.recover/recover.*`
1.32 mycroft 400: if [ "$virecovery" != "/var/tmp/vi.recover/recover.*" ]; then
401: echo preserving editor files
402: for i in $virecovery; do
1.129 christos 403: if [ -f $i ]; then
404: sendmail -t < $i
405: fi
1.32 mycroft 406: done
407: fi
1.1 cgd 408:
409: echo clearing /tmp
410:
1.65 mikel 411: # Prune quickly with one rm, then use find to clean up /tmp/[lq]* (this
412: # is not needed with mfs /tmp, but doesn't hurt anything).
1.1 cgd 413: (cd /tmp && rm -rf [a-km-pr-zA-Z]* &&
1.46 deraadt 414: find . ! -name . ! -name lost+found ! -name quota.user \
415: ! -name quota.group -exec rm -rf -- {} \; -type d -prune)
1.1 cgd 416:
1.74 perry 417: # Update kernel info in /etc/motd
418: # Must be done *before* interactive logins are possible to prevent
419: # possible race conditions.
1.89 cjs 420: if checkyesno update_motd; then
1.74 perry 421: echo 'updating motd.'
422: if [ ! -f /etc/motd ]; then
423: install -c -o root -g wheel -m 664 /dev/null /etc/motd
424: fi
1.128 christos 425: T=/etc/_motd
1.74 perry 426: rm -f $T
427: sysctl -n kern.version | sed 1q > $T
428: echo "" >> $T
429: sed '1,/^$/d' < /etc/motd >> $T
430: cmp -s $T /etc/motd || cp $T /etc/motd
431: rm -f $T
432: fi
433:
1.34 cgd 434: if [ -f /var/account/acct ]; then
435: echo 'turning on accounting'; accton /var/account/acct
436: fi
1.1 cgd 437:
438: echo -n standard daemons:
1.89 cjs 439: if checkyesno update; then
1.70 mycroft 440: echo -n ' update'; update $update_flags
441: fi
1.110 jwise 442: if checkyesno cron; then
443: echo -n ' cron'; cron
444: fi
1.1 cgd 445: echo '.'
446:
1.63 mrg 447: # now start all the other daemons
1.1 cgd 448: echo -n starting network daemons:
449:
1.89 cjs 450: if checkyesno gated && checkyesno routed; then
451: echo
452: logger -s "WARNING: gated and routed both requested to be run: " \
453: "running only gated."
454: routed=NO
455: fi
456:
457: if checkyesno gated; then
458: if [ -r /etc/gated.conf ]; then
459: echo -n ' gated'; gated $gated_flags
460: else
461: logger -s "WARNING: no /etc/gated.conf; gated not started."
1.67 mycroft 462: fi
1.89 cjs 463: fi
464:
465: if checkyesno routed; then
1.48 mycroft 466: echo -n ' routed'; routed $routed_flags
1.1 cgd 467: fi
468:
1.89 cjs 469: if checkyesno mrouted; then
1.55 thorpej 470: echo -n ' mrouted'; mrouted $mrouted_flags
1.127 itojun 471: fi
472:
473: if checkyesno route6d; then
474: echo -n ' route6d'; route6d $route6d_flags
475: fi
476:
1.130 itojun 477: if checkyesno rtsold; then
478: if checkyesno ip6forwarding; then
479: logger -s "WARNING: rtsold cannot be used on IPv6 router."
480: else
481: echo -n ' rtsold'; rtsold $rtsold_flags
482: fi
483: fi
484:
1.127 itojun 485: if checkyesno rtadvd; then
1.130 itojun 486: if checkyesno ip6forwarding; then
487: echo -n ' rtadvd'; rtadvd $rtadvd_flags
488: else
489: logger -s "WARNING: rtadvd cannot be used on IPv6 host."
490: fi
1.55 thorpej 491: fi
492:
1.89 cjs 493: if checkyesno timed; then
1.67 mycroft 494: echo -n ' timed'; timed $timed_flags
1.63 mrg 495: fi
496:
1.89 cjs 497: if checkyesno xntpd; then
1.67 mycroft 498: echo -n ' xntpd'; xntpd $xntpd_flags
1.61 mrg 499: fi
500:
1.89 cjs 501: if checkyesno dhcpd; then
502: if [ -r /etc/dhcpd.conf ]; then
503: echo -n ' dhcpd'; dhcpd $dhcpd_flags
504: else
505: echo
506: logger -s "WARNING: /etc/dhcpd.conf not readable; " \
507: "dhcpd not started."
1.67 mycroft 508: fi
1.122 sommerfe 509: elif checkyesno dhcrelay; then
510: echo -n ' dhcrelay'; dhcrelay $dhcrelay_flags
1.29 mycroft 511: fi
512:
1.89 cjs 513: if checkyesno rwhod; then
1.48 mycroft 514: echo -n ' rwhod'; rwhod
1.1 cgd 515: fi
516:
1.89 cjs 517: if checkyesno lpd; then
518: echo -n ' lpd'; lpd $lpd_flags
1.60 tls 519: fi
520:
1.63 mrg 521: # We call sendmail with a full path so that SIGHUP works.
1.89 cjs 522: if checkyesno sendmail; then
523: if [ -r /etc/sendmail.cf ]; then
524: echo -n ' sendmail'; /usr/sbin/sendmail $sendmail_flags
525: else
526: echo
527: logger -s "WARNING: /etc/sendmail.cf not readable; " \
528: "sendmail not started."
1.67 mycroft 529: fi
1.60 tls 530: fi
531:
1.96 jonathan 532: # Start xfs before boot daemons, so its ready before client xterminals.
533: if checkyesno xfs; then
534: echo -n ' xfs'; xfs $xfs_flags &
1.98 perry 535: sleep 2
1.96 jonathan 536: fi
537:
1.89 cjs 538: if checkyesno rarpd; then
539: if [ -r /etc/ethers ]; then
540: echo -n ' rarpd'; rarpd $rarpd_flags
541: else
542: echo
543: logger -s "WARNING: /etc/ethers not readable; " \
544: "rarpd not started."
1.67 mycroft 545: fi
1.60 tls 546: fi
547:
1.89 cjs 548: if checkyesno rbootd; then
549: if [ -r /etc/rbootd.conf ]; then
550: echo -n ' rbootd'; rbootd $rbootd_flags
551: else
552: echo
553: logger -s "WARNING: /etc/rbootd.conf not readable; " \
1.111 mrg 554: "rbootd not started."
1.67 mycroft 555: fi
1.72 cjs 556: fi
557:
1.89 cjs 558: if checkyesno mopd; then
1.72 cjs 559: echo -n ' mopd'; mopd $mopd_flags
1.86 perry 560: fi
561:
1.89 cjs 562: if checkyesno apmd; then
1.86 perry 563: echo -n ' apmd'; apmd $apmd_flags
1.103 mrg 564: fi
565:
566: if checkyesno screenblank; then
567: echo -n ' screenblank'; screenblank $screenblank_flags
1.52 thorpej 568: fi
569:
1.89 cjs 570: if checkyesno inetd; then
571: if [ -r /etc/inetd.conf ]; then
572: echo -n ' inetd'; inetd $inetd_flags
573: else
574: echo
575: logger -s "WARNING: /etc/inetd.conf not readable; " \
576: "inetd not started."
1.67 mycroft 577: fi
1.96 jonathan 578: fi
579:
1.1 cgd 580: echo '.'
1.73 perry 581:
582: # Kerberos runs ONLY on the Kerberos server machine
1.89 cjs 583: if checkyesno kerberos; then
1.73 perry 584: echo -n 'starting kerberos daemons:'
585: echo -n ' kerberos'; kerberos >> /var/log/kerberos.log &
586: echo -n ' kadmind'; kadmind -n >> /var/log/kadmind.log &
587: echo '.'
1.123 drochner 588: fi
589:
590: # xdm after wscons - need a virtual screen for X
591: if checkyesno xdm; then
592: echo 'starting xdm'
593: xdm $xdm_flags
1.73 perry 594: fi
1.1 cgd 595:
1.25 mycroft 596: . /etc/rc.local
1.1 cgd 597:
598: date
599: exit 0
CVSweb <webmaster@jp.NetBSD.org>