rc revision 1.129
150276Speter# $NetBSD: rc,v 1.129 1999/08/28 03:39:59 christos Exp $ 2184989Srafan# originally from: @(#)rc 8.2 (Berkeley) 3/17/94 350276Speter 450276Speter# System startup script run by init on autoboot 550276Speter# or after single-user. 650276Speter# Output and error are redirected to console by init, 750276Speter# and the console is the controlling terminal. 850276Speter 950276Speterstty status '^T' 1050276Speter 1150276Speter# Set shell to ignore SIGINT (2), but not children; 1250276Speter# shell catches SIGQUIT (3) and returns to single user after fsck. 1350276Spetertrap : 2 1450276Spetertrap : 3 # shouldn't be needed 1550276Speter 1650276Speterexport HOME=/ 1750276Speterexport PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin 1850276Speter 1950276Speter# Configure ccd devices. 2050276Speterif [ -f /etc/ccd.conf ]; then 2150276Speter ccdconfig -C 2250276Speterfi 2350276Speter 2450276Speter# Configure raid devices. 2550276Speterfor dev in 0 1 2 3; do 2650276Speter if [ -f /etc/raid$dev.conf ]; then 2750276Speter raidctl -c /etc/raid$dev.conf raid$dev 2850276Speter fi 2950276Speterdone 3050276Speter 3150276Speter# Add all block-type swap devices; these might be necessary 32166124Srafan# during disk checks. 3350276Speterswapctl -A -t blk 3450276Speter 3550276Speterif [ -e /fastboot ]; then 3650276Speter echo "Fast boot: skipping disk checks." 3750276Speterelif [ "$1" = autoboot ]; then 3850276Speter echo "Automatic boot in progress: starting file system checks." 3950276Speter fsck -p 4050276Speter case $? in 41184989Srafan 0) 4250276Speter ;; 4350276Speter 2) 4450276Speter exit 1 45184989Srafan ;; 46174993Srafan 4) 4776726Speter echo "Rebooting..." 48184989Srafan reboot 4950276Speter echo "Reboot failed; help!" 50174993Srafan exit 1 51166124Srafan ;; 52166124Srafan 8) 53166124Srafan echo "Automatic file system check failed; help!" 54166124Srafan exit 1 55166124Srafan ;; 5650276Speter 12) 57174993Srafan echo "Boot interrupted." 58166124Srafan exit 1 5997049Speter ;; 6097049Speter 130) 6197049Speter # interrupt before catcher installed 6297049Speter exit 1 6397049Speter ;; 64166124Srafan *) 6597049Speter echo "Unknown error; help!" 66166124Srafan exit 1 67166124Srafan ;; 6897049Speter esac 6997049Speterfi 7097049Speter 7197049Spetertrap "echo 'Boot interrupted.'; exit 1" 3 7297049Speter 73166124Srafanumount -a >/dev/null 2>&1 7497049Spetermount / 75166124Srafanrm -f /fastboot # XXX (root now writeable) 76166124Srafan 7797049Speterif [ -f /etc/rc.subr ]; then 7897049Speter . /etc/rc.subr 7997049Speterelse 8097049Speter echo "Can't read /etc/rc.subr; aborting." 8197049Speter exit 1; 82166124Srafanfi 8397049Speter 84166124Srafanif [ -f /etc/rc.conf ]; then 85166124Srafan . /etc/rc.conf 8697049Speterfi 8797049Speter 8897049Speterif [ "$rc_configured" != YES ]; then 8997049Speter echo "/etc/rc.conf is not configured. Multiuser boot aborted." 9097049Speter exit 1 91166124Srafanfi 9297049Speter 93166124Srafan# set flags on ttys. (do early, in case they use tty for SLIP in netstart) 94166124Srafanecho 'setting tty flags' 95166124Srafanttyflags -a 96166124Srafan 97166124Srafan# load kernel modules specified in /etc/lkm.conf if the /usr filesystem 98166124Srafan# is already present with "/" or can be mounted now 99166124Srafanif checkyesno lkm && [ -f /etc/rc.lkm ]; then 100166124Srafan mount /usr >/dev/null 2>&1 101166124Srafan if [ -x /usr/bin/ld ]; then 102166124Srafan lkmstage=BEFORENET 10397049Speter . /etc/rc.lkm 10497049Speter fi 10597049Speterfi 10697049Speter 10797049Spetermount_critical_filesystems local 108166124Srafan 10950276Speter# set hostname, turn on network 11050276Speterecho 'starting network' 111174993Srafansh /etc/netstart 112174993Srafanif [ $? -ne 0 ]; then 113174993Srafan exit 1 114174993Srafanfi 11550276Speter 11650276Spetermount_critical_filesystems network 117184989Srafan 118184989Srafan# Network Address Translation... 119184989Srafanif checkyesno ipnat && [ -f /etc/ipnat.conf ]; then 120184989Srafan echo 'installing NAT rules ... ' 121184989Srafan if ! checkyesno ipfilter || [ ! -f /etc/ipf.conf ]; then 122184989Srafan ipf -E -Fa 12350276Speter fi 124184989Srafan ipnat -F -f /etc/ipnat.conf 12550276Speterfi 126 127# "Critical" file systems are now mounted. Go ahead and swap 128# to files now, since they will be residing in the critical file 129# systems (or, at least, better). 130swapctl -A -t noblk 131 132# Check for no swap, and warn about it unless that is desired. 133if ! checkyesno no_swap; then 134 swapctl -s | grep 'no swap devices configured' > /dev/null && \ 135 echo "WARNING: no swap space configured!" 136fi 137 138# clean up left-over files 139rm -f /etc/nologin 140rm -f /var/spool/lock/LCK.* 141rm -f /var/spool/uucp/STST/* 142(cd /var/run && { rm -rf -- *; install -c -m 664 -g utmp /dev/null utmp; }) 143 144# get the system dmesg output, hopefully containing the boot messages 145# $dmesg_flags is imported from /etc/rc.conf 146if checkyesno dmesg; then 147 dmesg $dmesg_flags > /var/run/dmesg.boot 148fi 149 150if checkyesno wscons && [ -f /etc/rc.wscons ]; then 151 echo 'configuring wscons' 152 /bin/sh /etc/rc.wscons $wscons_flags 153fi 154 155# start the system logger first, so that all messages from daemons 156# are logged, then start savecore to get a dump on low memory systems 157# and then start the name server. 158 159if checkyesno syslogd; then 160 echo 'starting system logger' 161 # Transitional symlink for old binaries 162 if [ ! -h /dev/log ] ; then 163 ln -sf /var/run/log /dev/log 164 fi 165 rm -f /var/run/log 166 syslogd $syslogd_flags 167fi 168 169# Enable ipmon (only useful if ipfilter is running) 170# NOTE: requires the IPFILTER_LOG kernel option. 171if checkyesno ipmon; then 172 echo 'starting ipmon' 173 ipmon $ipmon_flags & 174fi 175 176# /var/crash should be a directory or a symbolic link 177# to the crash directory if core dumps are to be saved. 178if checkyesno savecore; then 179 if [ -d /var/crash/. ]; then 180 echo checking for core dump... 181 savecore $savecore_flags /var/crash 182 else 183 logger -s "WARNING: no /var/crash directory; savecore not run." 184 fi 185fi 186 187if checkyesno named; then 188 echo 'starting name server'; named $named_flags 189fi 190 191# set time, if requested 192if checkyesno ntpdate; then 193 if [ -z "$ntpdate_hosts" ]; then 194 ntpdate_hosts=`awk ' 195 /^server[ \t]*127.127/ {next} 196 /^(server|peer)/ {print $2} 197 ' </etc/ntp.conf` 198 fi 199 if [ -n "$ntpdate_hosts" ]; then 200 echo 'Setting date via ntp.' 201 ntpdate -b -s $ntpdate_hosts 202 fi 203fi 204 205# now start the rpc servers, for YP server/client. 206echo -n 'starting rpc daemons:' 207 208# note that portmap is generally required for all other rpc services. 209if checkyesno portmap; then 210 echo -n ' portmap'; portmap $portmap_flags 211fi 212 213if checkyesno ypserv; then 214 echo -n ' ypserv'; ypserv $ypserv_flags 215fi 216 217if checkyesno ypbind; then 218 echo -n ' ypbind'; ypbind $ypbind_flags 219fi 220 221if checkyesno yppasswdd; then 222 echo -n ' rpc.yppasswdd'; rpc.yppasswdd $yppasswdd_flags 223fi 224 225if checkyesno bootparamd; then 226 if [ -r /etc/bootparams ]; then 227 echo -n ' rpc.bootparamd'; rpc.bootparamd $bootparamd_flags 228 else 229 echo 230 logger -s "WARNING: /etc/bootparams not found. " \ 231 "bootparamd not started." 232 fi 233fi 234 235echo '.' 236 237# load kernel modules specified in /etc/lkm.conf 238if checkyesno lkm; then 239 if [ -r /etc/rc.lkm ]; then 240 lkmstage=BEFOREMOUNT 241 . /etc/rc.lkm 242 else 243 logger -s "WARNING: /etc/rc.lkm not found; LKMs not loaded." 244 fi 245fi 246 247mount -a 248 249# now start the rpc servers, for NFS server/client. 250echo -n 'starting nfs daemons:' 251 252nfs_locking=NO 253 254if checkyesno nfs_server; then 255 if [ -r /etc/exports ]; then 256 rm -f /var/db/mountdtab 257 echo -n > /var/db/mountdtab 258 echo -n ' mountd'; mountd $mountd_flags 259 echo -n ' nfsd'; nfsd $nfsd_flags 260 nfs_locking=YES 261 else 262 echo 263 logger -s "WARNING: /etc/exports not readable; " \ 264 "NFS server not started." 265 fi 266fi 267 268if checkyesno nfs_client; then 269 echo -n ' nfsiod'; nfsiod $nfsiod_flags 270 nfs_locking=YES 271fi 272 273if checkyesno nfs_locking; then 274 if checkyesno statd; then 275 echo -n ' rpc.statd'; rpc.statd $statd_flags 276 fi 277 if checkyesno lockd; then 278 echo -n ' rpc.lockd'; rpc.lockd $lockd_flags 279 fi 280fi 281 282if checkyesno amd; then 283 if [ -d "$amd_dir" ]; then 284 if [ -r "$amd_master" ]; then 285 echo -n ' amd' 286 amd $amd_flags -p -a $amd_dir \ 287 `sed s/#.*$// <$amd_master` >/var/run/amd.pid 288 else 289 echo 290 logger -s "WARNING: \$amd_master ($amd_master)not " \ 291 "readable; amd not started." 292 fi 293 else 294 echo 295 logger -s "WARNING: \$amd_dir ($amd_dir) not a directory; " \ 296 "amd not started." 297 fi 298fi 299 300echo '.' 301 302if [ -f /sbin/ldconfig ]; then 303 echo 'creating runtime link editor directory cache.' 304 ldconfig 305fi 306 307# load kernel modules specified in /etc/lkm.conf 308if checkyesno lkm && [ -f /etc/rc.lkm ]; then 309 lkmstage=AFTERMOUNT 310 . /etc/rc.lkm 311fi 312 313# if $securelevel is set, change it here, else if it is 0, change 314# it to 1 here, before we start login services. 315if [ -n "$securelevel" ]; then 316 echo -n 'setting securelevel: ' 317 sysctl -w kern.securelevel=$securelevel 318else 319 securelevel=`sysctl -n kern.securelevel` 320 if [ x"$securelevel" = x0 ]; then 321 echo -n 'setting securelevel: ' 322 sysctl -w kern.securelevel=1 323 fi 324fi 325 326echo -n 'checking quotas:'; quotacheck -a; echo ' done.' 327quotaon -a 328 329# build ps databases 330echo 'building databases...' 331kvm_mkdb /netbsd 332dev_mkdb 333 334chmod 666 /dev/tty[pqrs]* 335 336# check the password temp/lock file 337if [ -f /etc/ptmp ] 338then 339 logger -s -p auth.err \ 340 'password file may be incorrect -- /etc/ptmp exists' 341fi 342 343# XXX replace me with a script that works! 344virecovery=`echo /var/tmp/vi.recover/recover.*` 345if [ "$virecovery" != "/var/tmp/vi.recover/recover.*" ]; then 346 echo preserving editor files 347 for i in $virecovery; do 348 if [ -f $i ]; then 349 sendmail -t < $i 350 fi 351 done 352fi 353 354echo clearing /tmp 355 356# Prune quickly with one rm, then use find to clean up /tmp/[lq]* (this 357# is not needed with mfs /tmp, but doesn't hurt anything). 358(cd /tmp && rm -rf [a-km-pr-zA-Z]* && 359 find . ! -name . ! -name lost+found ! -name quota.user \ 360 ! -name quota.group -exec rm -rf -- {} \; -type d -prune) 361 362# Update kernel info in /etc/motd 363# Must be done *before* interactive logins are possible to prevent 364# possible race conditions. 365if checkyesno update_motd; then 366 echo 'updating motd.' 367 if [ ! -f /etc/motd ]; then 368 install -c -o root -g wheel -m 664 /dev/null /etc/motd 369 fi 370 T=/etc/_motd 371 rm -f $T 372 sysctl -n kern.version | sed 1q > $T 373 echo "" >> $T 374 sed '1,/^$/d' < /etc/motd >> $T 375 cmp -s $T /etc/motd || cp $T /etc/motd 376 rm -f $T 377fi 378 379if [ -f /var/account/acct ]; then 380 echo 'turning on accounting'; accton /var/account/acct 381fi 382 383echo -n standard daemons: 384if checkyesno update; then 385 echo -n ' update'; update $update_flags 386fi 387if checkyesno cron; then 388 echo -n ' cron'; cron 389fi 390echo '.' 391 392# now start all the other daemons 393echo -n starting network daemons: 394 395if checkyesno gated && checkyesno routed; then 396 echo 397 logger -s "WARNING: gated and routed both requested to be run: " \ 398 "running only gated." 399 routed=NO 400fi 401 402if checkyesno gated; then 403 if [ -r /etc/gated.conf ]; then 404 echo -n ' gated'; gated $gated_flags 405 else 406 logger -s "WARNING: no /etc/gated.conf; gated not started." 407 fi 408fi 409 410if checkyesno routed; then 411 echo -n ' routed'; routed $routed_flags 412fi 413 414if checkyesno mrouted; then 415 echo -n ' mrouted'; mrouted $mrouted_flags 416fi 417 418if checkyesno route6d; then 419 echo -n ' route6d'; route6d $route6d_flags 420fi 421 422if checkyesno rtadvd; then 423 echo -n ' rtadvd'; rtadvd $rtadvd_flags 424fi 425 426if checkyesno timed; then 427 echo -n ' timed'; timed $timed_flags 428fi 429 430if checkyesno xntpd; then 431 echo -n ' xntpd'; xntpd $xntpd_flags 432fi 433 434if checkyesno dhcpd; then 435 if [ -r /etc/dhcpd.conf ]; then 436 echo -n ' dhcpd'; dhcpd $dhcpd_flags 437 else 438 echo 439 logger -s "WARNING: /etc/dhcpd.conf not readable; " \ 440 "dhcpd not started." 441 fi 442elif checkyesno dhcrelay; then 443 echo -n ' dhcrelay'; dhcrelay $dhcrelay_flags 444fi 445 446if checkyesno rwhod; then 447 echo -n ' rwhod'; rwhod 448fi 449 450if checkyesno lpd; then 451 echo -n ' lpd'; lpd $lpd_flags 452fi 453 454# We call sendmail with a full path so that SIGHUP works. 455if checkyesno sendmail; then 456 if [ -r /etc/sendmail.cf ]; then 457 echo -n ' sendmail'; /usr/sbin/sendmail $sendmail_flags 458 else 459 echo 460 logger -s "WARNING: /etc/sendmail.cf not readable; " \ 461 "sendmail not started." 462 fi 463fi 464 465# Start xfs before boot daemons, so its ready before client xterminals. 466if checkyesno xfs; then 467 echo -n ' xfs'; xfs $xfs_flags & 468 sleep 2 469fi 470 471if checkyesno rarpd; then 472 if [ -r /etc/ethers ]; then 473 echo -n ' rarpd'; rarpd $rarpd_flags 474 else 475 echo 476 logger -s "WARNING: /etc/ethers not readable; " \ 477 "rarpd not started." 478 fi 479fi 480 481if checkyesno rbootd; then 482 if [ -r /etc/rbootd.conf ]; then 483 echo -n ' rbootd'; rbootd $rbootd_flags 484 else 485 echo 486 logger -s "WARNING: /etc/rbootd.conf not readable; " \ 487 "rbootd not started." 488 fi 489fi 490 491if checkyesno mopd; then 492 echo -n ' mopd'; mopd $mopd_flags 493fi 494 495if checkyesno apmd; then 496 echo -n ' apmd'; apmd $apmd_flags 497fi 498 499if checkyesno screenblank; then 500 echo -n ' screenblank'; screenblank $screenblank_flags 501fi 502 503if checkyesno inetd; then 504 if [ -r /etc/inetd.conf ]; then 505 echo -n ' inetd'; inetd $inetd_flags 506 else 507 echo 508 logger -s "WARNING: /etc/inetd.conf not readable; " \ 509 "inetd not started." 510 fi 511fi 512 513echo '.' 514 515# Kerberos runs ONLY on the Kerberos server machine 516if checkyesno kerberos; then 517 echo -n 'starting kerberos daemons:' 518 echo -n ' kerberos'; kerberos >> /var/log/kerberos.log & 519 echo -n ' kadmind'; kadmind -n >> /var/log/kadmind.log & 520 echo '.' 521fi 522 523# xdm after wscons - need a virtual screen for X 524if checkyesno xdm; then 525 echo 'starting xdm' 526 xdm $xdm_flags 527fi 528 529. /etc/rc.local 530 531date 532exit 0 533