|
/etc/rc文件导读
前言:
openbsd启动时执行/etc/rc文件, 检查挂载文件系统, 启动系统上如httpd, ftpd, named等服务, 因此我们有空时读读这个shell脚本文件对启动系统时出现的各类信息会有一个明确的了解.
基础知识:
shell编程的知识:
首先, 我们来说说if条件结构
在sh编程中:
- if command; then
- some commands;
- fi
复制代码
第一个command语句用来测试值, 如果为真, 则执行下面的some commands; 如果为假, 跳过if语句块.
test命令常与if条件语句一起使用, test命令有字符串判断, 逻辑判断, 整数判断,文件判断等, 我们在这里只说说下面/etc/rc文件中用的test测试:
-f /var/somefile 测试后面跟着的参数是否是一个文件,
-d /var/dir 测试后面跟着的参数是否是一个目录,
!-f /var/somefile 对-f /var/somefile的结果取反。
-s /var/file 测试-s后面跟着的文件是否为一个非空文件
下面几个命令用于整数判断: -eq 等于, -ne 不等于, -gt 大于, -ge 大于等于, -lt小于, -le小于等于.
我们回来说说实例:
if [ $1x = shutdownx ]; then
判断第一个参数是否等于shutdown。
if [ “X${pf}” != X”NO” ]; then
这个用来测试从/etc/rc.conf里传递来来的pf参数是否等于NO, 如果不等于NO, 则执行if语句块中的命令。
在这里,为何在test的比较两边都加上一个X或x呢? 这是为了保证即使左边参数为空, 操作符两边仍然有占位符。 比如当你在/etc/rc.conf里删除了pf这一行, 如果在这里不放一个X在前面, 测试两边都变成为空, 这时test命令就会失败。因此我们在看脚本时自已在脑海中去掉这个X就可以了。
If [ X${nfs_server} = X”YES” –a –s /etc/exports –a \
`sed –e ‘/^#/d’ < /etc/exports | wc –l ` -ne 0 ]; then
这里重点是-a这个参数, 这是一个逻辑判断,判断前面的X${nfs_server} = X”YES”是否为真, 不为真是马上退出判断, 返回假; 然后再判断–s /etc/exports是否为真,同上一样, 不为真时马上退出判断; 最后再判断`sed –e ‘/^#/d’ < /etc/exports | wc –l ` -ne 0 是否为真, 只有这三个表达式都为真是这个中括号的结果才为真, 有一个为假都是假。具体命令分析就不说明了!
其它两个控制结构是:
- case variable in
- value1)
- command
- ;;
- value2)
- command
- ;;
- *)
- command
- ;;
- esac
- for variable in var_list
- do
- commands
- done
复制代码
我就不详细说明了, 具体更多的情况请有兴趣的朋友们参看sh编程。
另一个要提一提的是: >/dev/null 2 >&1 这个语句的意思是将标准输出stdout和标准错误stderr重定向到/dev/null.
下面来简单看看/etc/rc文件:
- # $OpenBSD: rc,v 1.241 2004/03/22 15:02:35 cedric Exp $
- # 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.
- # Subroutines (have to come first).
- # Strip comments (and leading/trailing whitespace if IFS is set)
- # from a file and spew to stdout
- 定义一个shel函数:
- stripcom() {
- local _file="$1"
- local _line
- {
- while read _line ; do
- _line=${_line%%#*} # strip comments
- test -z "$_line" && continue
- echo $_line
- done
- } < $_file
- }
- # End subroutines
- stty status '^T'
- # Set shell to ignore SIGINT (2), but not children;
- # shell catches SIGQUIT (3) and returns to single user after fsck.
- 忽略信号2, 3
- trap : 2
- trap : 3 # shouldn't be needed
- 设置根目录, 和命令的查找路径:
- HOME=/; export HOME
- PATH=/sbin:/bin:/usr/sbin:/usr/bin
- export PATH
- 查看命令是否等于shutdown 如果是, 执行下面的语句块:
- if [ $1x = shutdownx ]; then
- dd if=/dev/urandom of=/var/db/host.random bs=1024 count=64 >/dev/null 2>&1
- chmod 600 /var/db/host.random >/dev/null 2>&1
- if [ $? -eq 0 -a -f /etc/rc.shutdown ]; then
- echo /etc/rc.shutdown in progress...
- . /etc/rc.shutdown
- echo /etc/rc.shutdown complete.
- if [ "X${powerdown}" = X"YES" ]; then
- exit 2
- fi
- # bring carp interfaces down gracefully
- for hn in /etc/hostname.carp[0-9]*; do
- # Strip off /etc/hostname. prefix
- if=${hn#/etc/hostname.}
- test "$if" = "carp[0-9]*" && continue
- ifconfig $if down
- done
- else
- echo single user: not running /etc/rc.shutdown
- fi
- exit 0
- fi
- 读取/etc/ccd.conf, 设置ccfconf
- # Configure ccd devices.
- if [ -f /etc/ccd.conf ]; then
- ccdconfig -C
- fi
- 设置raid
- # Configure raid devices.
- for dev in 0 1 2 3; do
- if [ -f /etc/raid$dev.conf ]; then
- raidctl -c /etc/raid$dev.conf raid$dev
- fi
- done
- # Check parity on raid devices.
- raidctl -P all
- swapctl -A -t blk
- 是否为快速启动, 如果是,跳过磁盘检测, 如果是自动启动,
- 则使用fscp进行磁盘检测, 如果在检测中出现什么错误,
- 会打印出case中的设置的错误信息:
- if [ -e /fastboot ]; then
- echo "Fast boot: skipping disk checks."
- elif [ $1x = autobootx ]; then
- echo "Automatic boot in progress: starting file system checks."
- fsck -p
- case $? in
- 0)
- ;;
- 2)
- exit 1
- ;;
- 4)
- echo "Rebooting..."
- reboot
- echo "Reboot failed; help!"
- exit 1
- ;;
- 8)
- echo "Automatic file system check failed; help!"
- exit 1
- ;;
- 12)
- echo "Boot interrupted."
- exit 1
- ;;
- 130)
- # interrupt before catcher installed
- exit 1
- ;;
- *)
- echo "Unknown error; help!"
- exit 1
- ;;
- esac
- fi
- trap "echo 'Boot interrupted.'; exit 1" 3
- mount根文件系统
- umount -a >/dev/null 2>&1
- mount -a -t nonfs
- mount -uw / # root on nfs requires this, others aren't hurt
- rm -f /fastboot # XXX (root now writeable)
- 读取/etc/rc.conf配置文件
- # pick up option configuration
- . /etc/rc.conf
- # set flags on ttys. (do early, in case they use tty for SLIP in netstart)
- echo 'setting tty flags'
- ttyflags -a
- 查看/etc/rc.conf中是否将pf设置为启动, 如果是, 执行if中的语句块:
- if [ "X${pf}" != X"NO" ]; then
- RULES="block all"
- RULES="$RULES\npass on lo0"
- RULES="$RULES\npass in proto tcp from any to any port 22 keep state"
- RULES="$RULES\npass out proto { tcp, udp } from any to any port 53 keep state"
- RULES="$RULES\npass out inet proto icmp all icmp-type echoreq keep state"
- RULES="$RULES\npass proto { pfsync, carp }"
- case `sysctl vfs.mounts.nfs 2>/dev/null` in
- *[1-9]*)
- # don't kill NFS
- RULES="scrub in all no-df\n$RULES"
- RULES="$RULES\npass in proto udp from any port { 111, 2049 } to any"
- RULES="$RULES\npass out proto udp from any to any port { 111, 2049 }"
- ;;
- esac
- echo $RULES | pfctl -f - -e
- fi
- 如果有/etc/sysctl.conf文件, 则读取文件, 进行设置:
- if [ -f /etc/sysctl.conf ]; then
- (
- # delete comments and blank lines
- set -- `stripcom /etc/sysctl.conf`
- while [ $# -ge 1 ] ; do
- sysctl $1
- shift
- done
- )
- fi
- 读取/etc/netstat文件
- # set hostname, turn on network
- echo 'starting network'
- . /etc/netstart
- 如果设置pf为启动, 现在检测pf_rules文件是否存在,
- 如存在, 载入规则文件:
- if [ "X${pf}" != X"NO" ]; then
- if [ -f ${pf_rules} ]; then
- pfctl -f ${pf_rules}
- fi
- fi
- mount /usr分区, /var分区:
- mount /usr >/dev/null 2>&1
- mount /var >/dev/null 2>&1
- 设置系统随机random:
- # if there's no /var/db/host.random, make one through /dev/urandom
- if [ ! -f /var/db/host.random ]; then
- dd if=/dev/urandom of=/var/db/host.random bs=1024 count=64 \
- >/dev/null 2>&1
- chmod 600 /var/db/host.random >/dev/null 2>&1
- else
- dd if=/var/db/host.random of=/dev/urandom bs=1024 count=64 \
- > /dev/null 2>&1
- dd if=/var/db/host.random of=/dev/arandom bs=1024 count=64 \
- > /dev/null 2>&1
- fi
- # reset seed file, so that if a shutdown-less reboot occurs,
- # the next seed is not a repeat
- dd if=/dev/urandom of=/var/db/host.random bs=1024 count=64 \
- > /dev/null 2>&1
- # clean up left-over files
- rm -f /etc/nologin
- rm -f /var/spool/lock/LCK.*
- rm -f /var/spool/uucp/STST/*
- (cd /var/run && { test -r dhclient.pid && dhclient_pid=`cat
- dhclient.pid`; rm -rf -- *; install -c -m 664 -g utmp /dev/null utmp; test -n "$dhclient_pid" && echo "$dhclient_pid" > dhclient.pid; })
- (cd /var/authpf && rm -rf -- *)
- 将启动信息写入/var/run/dmesg.boot:
- # save a copy of the boot messages
- dmesg >/var/run/dmesg.boot
- echo 'starting system logger'
- rm -f /dev/log
- 测试是否启动named 服务器, 是则删除/var/named/dev/log下的日志文件,
- 使用syslogd_flags来进行日志记录:
- if [ "X${named_flags}" != X"NO" ]; then
- rm -f /var/named/dev/log
- syslogd_flags="${syslogd_flags} -a /var/named/dev/log"
- fi
- if [ -d /var/empty ]; then
- rm -f /var/empty/dev/log
- mkdir -p -m 0555 /var/empty/dev
- syslogd_flags="${syslogd_flags} -a /var/empty/dev/log"
- fi
- syslogd ${syslogd_flags}
- pf的日志记录:
- if [ X"${pf}" != X"NO" -a X"${pflogd_flags}" != X"NO" ]; then
- ifconfig pflog0 up
- pflogd ${pflogd_flags}
- fi
- 如果启动了named,则启动if语句块中的内容:
- # $named_flags is imported from /etc/rc.conf;
- # if $named_flags != NO, named is run.
- if [ "X${named_flags}" != X"NO" ]; then
- if ! cmp -s /etc/rndc.key /var/named/etc/rndc.key ; then
- echo -n "rndc-confgen: generating new shared secret... "
- if /usr/sbin/rndc-confgen -a -t /var/named >/dev/null 2>&1; then
- chmod 0640 /var/named/etc/rndc.key >/dev/null 2>&1
- echo done.
- else
- echo failed.
- fi
- fi
- echo 'starting named'; named $named_flags
- fi
- # $isakmpd_flags is imported from /etc/rc.conf;
- # If $isakmpd_flags == NO or /etc/isakmpd/isakmpd.policy doesn't exist, then
- # isakmpd isn't run.
- if [ "X${isakmpd_flags}" != X"NO" -a -e /etc/isakmpd/isakmpd.policy ]; then
- echo 'starting isakmpd'; isakmpd ${isakmpd_flags}
- fi
- echo -n 'starting rpc daemons:'
- 这个是为RPC服务启动的:
- # $portmap is imported from /etc/rc.conf;
- # if $portmap == YES, the portmapper is started.
- if [ X"${portmap}" = X"YES" ]; then
- echo -n ' portmap'; portmap
- fi
- if [ -d /var/yp/binding -a X`domainname` != X ]; then
- if [ -d /var/yp/`domainname` ]; then
- # yp server capabilities needed...
- echo -n ' ypserv'; ypserv ${ypserv_flags}
- #echo -n ' ypxfrd'; ypxfrd
- fi
- echo -n ' ypbind'; ypbind
- if [ X"${yppasswdd_flags}" != X"NO" -a -d /var/yp/`domainname` ]; then
- # if we are the master server, run rpc.yppasswdd
- _host1=`ypwhich -m passwd 2> /dev/null`
- _host2=`hostname`
- if [ `grep '^lookup' /etc/resolv.conf | grep yp | wc -c` -ne 0 ]; then
- _host1=`ypmatch $_host1 hosts | cut -d' ' -f2`
- _host2=`ypmatch $_host2 hosts | cut -d' ' -f2 | head -1`
- else
- _host1=`nslookup $_host1 | grep '^Name: ' | \
- sed -e 's/^Name: //'`
- _host2=`nslookup $_host2 | grep '^Name: ' | \
- sed -e 's/^Name: //'`
- fi
- if [ "$_host2" = "$_host1" ]; then
- echo -n ' rpc.yppasswdd'
- rpc.yppasswdd ${yppasswdd_flags}
- fi
- fi
- fi
- NFS服务器启动脚本处:
- # $nfs_server is imported from /etc/rc.conf;
- # if $nfs_server == YES, the machine is setup for being an nfs server
- if [ X${nfs_server} = X"YES" -a -s /etc/exports -a \
- `sed -e '/^#/d' < /etc/exports | wc -l` -ne 0 ]; then
- rm -f /var/db/mountdtab
- echo -n > /var/db/mountdtab
- echo -n ' mountd'; mountd
- echo -n ' nfsd'; nfsd ${nfsd_flags}
- if [ X${lockd} = X"YES" ]; then
- echo -n ' rpc.lockd'; rpc.lockd
- fi
- fi
- amd启动脚本:
- if [ X${amd} = X"YES" -a -e ${amd_master} ]; then
- echo -n ' amd'
- (cd /etc/amd; amd -l syslog -x error,noinfo,nostats -p \
- -a ${amd_dir} `cat ${amd_master}` > /var/run/amd.pid )
- fi
- rdate启动脚本:
- # run rdate before timed
- if [ X"${rdate_flags}" != X"NO" ]; then
- echo -n ' rdate'; rdate -s ${rdate_flags}
- fi
- timed时间服务器启动脚本:
- # $timed_flags is imported from /etc/rc.conf;
- # if $timed_flags == NO, timed isn't run.
- if [ "X${timed_flags}" != X"NO" ]; then
- echo -n ' timed'; timed $timed_flags
- fi
- echo '.'
- mount -a -t nfs
- swapctl -A -t noblk
- # /var/crash should be a directory or a symbolic link
- # to the crash directory if core dumps are to be saved.
- if [ -d /var/crash ]; then
- savecore ${savecore_flags} /var/crash
- fi
- if [ "X${afs}" = X"YES" -a -c /dev/xfs0 ]; then
- echo -n 'mounting afs:'
- mkdir -p -m 0755 /afs
- mount -t xfs /dev/xfs0 /afs
- /usr/libexec/afsd ${afsd_flags}
- echo ' done.'
- fi
- 磁盘限额的启动脚本:
- if [ "X${check_quotas}" = X"YES" ]; then
- echo -n 'checking quotas:'
- quotacheck -a
- echo ' done.'
- quotaon -a
- fi
- # build ps databases
- echo -n 'building ps databases:'
- echo -n " kvm"
- kvm_mkdb
- echo -n " dev"
- dev_mkdb
- echo "."
- chmod 666 /dev/tty[pqrstuvwxyzPQRST]*
- chown root:wheel /dev/tty[pqrstuvwxyzPQRST]*
- # check the password temp/lock file
- if [ -f /etc/ptmp ]; then
- logger -s -p auth.err \
- 'password file may be incorrect -- /etc/ptmp exists'
- fi
- echo clearing /tmp
- # prune quickly with one rm, then use find to clean up /tmp/[lq]*
- # (not needed with mfs /tmp, but doesn't hurt there...)
- (cd /tmp && rm -rf [a-km-pr-zA-Z]* &&
- find . ! -name . ! -name lost+found ! -name quota.user \
- ! -name quota.group -execdir rm -rf -- {} \; -type d -prune)
- 如果系统上安装了XFREE, 存在/usr/X11R6/lib文件, 则执行下面的脚本:
- # create Unix sockets directories for X if needed and make sure they have
- # correct permissions
- if [ -d /usr/X11R6/lib ]; then
- for d in /tmp/.X11-unix /tmp/.ICE-unix ; do
- if [ -d $d ]; then
- if [ `ls -ld $d | cut -d' ' -f4` != root ]; then
- chown root $d
- fi
- if [ `ls -ld $d | cut -d' ' -f1` != drwxrwxrwt ]; then
- chmod 1777 $d
- fi
- elif [ -e $d ]; then
- echo "Error: $d exists and isn't a directory."
- else
- mkdir -m 1777 $d
- fi
- done
- fi
- 设置系统安装级别:
- [ -f /etc/rc.securelevel ] && . /etc/rc.securelevel
- if [ X${securelevel} != X"" ]; then
- echo -n 'setting kernel security level: '
- sysctl kern.securelevel=${securelevel}
- fi
- 每次登陆系统时的信息, 同freebsd的motd一样,
- 只不过在freebsd可以在rc.conf中关闭它,
- 而在openbsd则需要修改此处才能关闭它:
- # patch /etc/motd
- if [ ! -f /etc/motd ]; then
- install -c -o root -g wheel -m 664 /dev/null /etc/motd
- fi
- T=`mktemp /tmp/_motd.XXXXXXXXXX`
- if [ $? -eq 0 ]; then
- sysctl -n kern.version | sed 1q > $T
- echo "" >> $T
- sed '1,/^$/d' < /etc/motd >> $T
- cmp -s $T /etc/motd || cp $T /etc/motd
- rm -f $T
- fi
- if [ -f /var/account/acct ]; then
- echo 'turning on accounting'; accton /var/account/acct
- fi
- if [ -f /sbin/ldconfig ]; then
- echo 'creating runtime link editor directory cache.'
- if [ -d /usr/local/lib ]; then
- shlib_dirs="/usr/local/lib $shlib_dirs"
- fi
- if [ -d /usr/X11R6/lib ]; then
- shlib_dirs="/usr/X11R6/lib $shlib_dirs"
- fi
- ldconfig $shlib_dirs
- fi
- 如果/usr/libexec/vi.recover是可执行文件则执行if语句块中的内容:
- if [ -x /usr/libexec/vi.recover ]; then
- echo 'preserving editor files'; /usr/libexec/vi.recover
- fi
- 创建ssh的主机密匙, 通常在系统第一次启动时创建,
- 当然如果你删除了/etc/ssh/下的文件, 它也会再重新创建一个新的:
- if [ ! -f /etc/ssh/ssh_host_dsa_key ]; then
- echo -n "ssh-keygen: generating new DSA host key... "
- if /usr/bin/ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''; then
- echo done.
- else
- echo failed.
- fi
- fi
- if [ ! -f /etc/ssh/ssh_host_rsa_key ]; then
- echo -n "ssh-keygen: generating new RSA host key... "
- if /usr/bin/ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''; then
- echo done.
- else
- echo failed.
- fi
- fi
- if [ ! -f /etc/ssh/ssh_host_key ]; then
- echo -n "ssh-keygen: generating new RSA1 host key... "
- if /usr/bin/ssh-keygen -q -t rsa1 -f /etc/ssh/ssh_host_key -N ''; then
- echo done.
- else
- echo failed.
- fi
- fi
- echo -n starting network daemons:
- routed启动脚本:
- # $routed_flags are imported from /etc/rc.conf.
- # If $routed_flags == NO, routed isn't run.
- if [ "X${routed_flags}" != X"NO" ]; then
- echo -n ' routed'; routed $routed_flags
- fi
- # $mrouted_flags is imported from /etc/rc.conf;
- # If $mrouted_flags == NO, then mrouted isn't run.
- if [ "X${mrouted_flags}" != X"NO" ]; then
- echo -n ' mrouted'; mrouted $mrouted_flags
- fi
- bgpd启动脚本:
- if [ "X${bgpd_flags}" != X"NO" ]; then
- echo -n ' bgpd'; /usr/sbin/bgpd $bgpd_flags
- fi
- dhcpd服务器启动脚本:
- # $dhcpd_flags is imported from /etc/rc.conf
- # If $dhcpd_flags == NO or /etc/dhcpd.conf doesn't exist, then dhcpd isn't run.
- if [ "X${dhcpd_flags}" != X"NO" -a -f /etc/dhcpd.conf ]; then
- touch /var/db/dhcpd.leases
- if [ -f /etc/dhcpd.interfaces ]; then
- dhcpd_ifs=`stripcom /etc/dhcpd.interfaces`
- fi
- echo -n ' dhcpd'; /usr/sbin/dhcpd ${dhcpd_flags} ${dhcpd_ifs}
- fi
- ifconfig设置网络:
- if ifconfig lo0 inet6 >/dev/null 2>&1; then
- fw=`sysctl -n net.inet6.ip6.forwarding`
- if [ "X${fw}" == X"0" ]; then
- # $rtsold_flags is imported from /etc/rc.conf;
- # If $rtsold_flags == NO, then rtsold isn't run.
- if [ "X${rtsold_flags}" != X"NO" ]; then
- echo -n ' rtsold'
- /usr/sbin/rtsold ${rtsold_flags}
- fi
- else
- # $route6d_flags is imported from /etc/rc.conf;
- # If $route6d_flags == NO, then route6d isn't run.
- if [ "X${route6d_flags}" != X"NO" ]; then
- echo -n ' route6d'
- /usr/sbin/route6d ${route6d_flags}
- fi
- # $rtadvd_flags is imported from /etc/rc.conf;
- # If $rtadvd_flags == NO, then rtadvd isn't run.
- if [ "X${rtadvd_flags}" != X"NO" ]; then
- echo -n ' rtadvd'
- /usr/sbin/rtadvd ${rtadvd_flags}
- fi
- fi
- fi
- rwhod服务器启动脚本:
- # $rwhod is imported from /etc/rc.conf;
- # if $rwhod == YES, rwhod is run.
- if [ X${rwhod} = X"YES" ]; then
- echo -n ' rwhod'; rwhod
- fi
- 打印服务器启动脚本:
- if [ "X${lpd_flags}" != X"NO" ]; then
- echo -n ' printer'; lpd ${lpd_flags}
- fi
- 邮件服务器sendmail启动脚本:
- # $sendmail_flags is imported from /etc/rc.conf;
- # If $sendmail_flags == NO or /etc/mailer.conf doesn't exist, then
- # sendmail isn't run. We call sendmail with a full path so that
- # SIGHUP works. Note that /usr/sbin/sendmail may actually call a
- # mailer other than sendmail, depending on /etc/mailer.conf.
- if [ "X${sendmail_flags}" != X"NO" -a -s /etc/mailer.conf ]; then
- echo -n ' sendmail'; ( /usr/sbin/sendmail ${sendmail_flags} >/dev/null 2>&1 & )
- fi
- web服务器启动脚本:
- if [ "X${httpd_flags}" != X"NO" ]; then
- # Clean up left-over httpd locks
- rm -f /var/www/logs/{ssl_mutex,httpd.lock,accept.lock}.*
- echo -n ' httpd'; /usr/sbin/httpd ${httpd_flags}
- fi
- FTP服务器启动脚本:
- if [ "X${ftpd_flags}" != X"NO" ]; then
- echo -n ' ftpd'; /usr/libexec/ftpd ${ftpd_flags}
- fi
- if [ "X${identd_flags}" != X"NO" ]; then
- echo -n ' identd'; /usr/libexec/identd ${identd_flags}
- fi
- INETD服务器启动脚本:
- if [ X${inetd} = X"YES" -a -e /etc/inetd.conf ]; then
- echo -n ' inetd'; inetd
- fi
- SSH服务器启动脚本:
- if [ X"${sshd_flags}" != X"NO" ]; then
- echo -n ' sshd'; /usr/sbin/sshd ${sshd_flags};
- fi
- if [ "X${spamd_flags}" != X"NO" ]; then
- if [ "X${spamd_grey}" != X"NO" ]; then
- spamd_flags="${spamd_flags} -g"
- fi
- echo -n ' spamd'; /usr/libexec/spamd ${spamd_flags}
- /usr/libexec/spamd-setup
- if [ "X${spamd_grey}" != X"NO" ]; then
- echo -n ' spamlogd'
- /usr/libexec/spamlogd
- fi
- fi
- # $rarpd_flags is imported from /etc/rc.conf;
- # If $rarpd_flags == NO or /etc/ethers doesn't exist, then
- # rarpd isn't run.
- if [ "X${rarpd_flags}" != X"NO" -a -s /etc/ethers ]; then
- echo -n ' rarpd'; rarpd ${rarpd_flags}
- fi
- # $bootparamd_flags is imported from /etc/rc.conf;
- # If $bootparamd_flags == NO or /etc/bootparams doesn't exist, then
- # bootparamd isn't run.
- if [ "X${bootparamd_flags}" != X"NO" -a -s /etc/bootparams ]; then
- echo -n ' rpc.bootparamd'; rpc.bootparamd ${bootparamd_flags}
- fi
- # $rbootd_flags is imported from /etc/rc.conf;
- # If $rbootd_flags == NO or /etc/rbootd.conf doesn't exist, then
- # rbootd isn't run.
- if [ "X${rbootd_flags}" != X"NO" -a -s /etc/rbootd.conf ]; then
- echo -n ' rbootd'; rbootd ${rbootd_flags}
- fi
- # $mopd_flags is imported from /etc/rc.conf;
- # If $mopd_flags == NO or /tftpboot/mop doesn't exist, then
- # mopd isn't run.
- if [ "X${mopd_flags}" != X"NO" -a -d /tftpboot/mop ]; then
- echo -n ' mopd'; mopd ${mopd_flags}
- fi
- echo '.'
- if [ -x /sbin/wsconsctl -a -f /etc/wsconsctl.conf ]; then
- (
- # delete comments and blank lines
- save_IFS="$IFS"
- IFS="
- "
- set -- `stripcom /etc/wsconsctl.conf`
- IFS="$save_IFS"
- while [ $# -ge 1 ] ; do
- eval /sbin/wsconsctl -w $1
- shift
- done
- )
- fi
- 键盘设置:
- if [ -f /sbin/kbd -a -f /etc/kbdtype ]; then
- kbd `cat /etc/kbdtype`
- fi
- kerberosV设置:
- # KerberosV master KDC
- if [ X${krb5_master_kdc} = X"YES" ]; then
- echo 'KerberosV master KDC'
- /usr/libexec/kdc &
- /usr/libexec/kadmind &
- /usr/libexec/kpasswdd &
- fi
- # KerberosV slave KDC
- if [ X${krb5_slave_kdc} = X"YES" ]; then
- echo 'KerberosV slave KDC'
- /usr/libexec/kdc &
- # Remember to enable hpropd in inetd.conf
- fi
- [ -f /etc/rc.local ] && . /etc/rc.local
- echo -n standard daemons:
- apmd启动脚本:
- # $apmd_flags is imported from /etc/rc.conf;
- # don't run daemon if $apmd_flags == NO or /usr/sbin/apmd doesn't exist
- if [ "X${apmd_flags}" != X"NO" -a -x /usr/sbin/apmd ]; then
- echo -n ' apmd'; /usr/sbin/apmd ${apmd_flags}
- fi
- if [ X"${sensorsd_flags}" != X"NO" ]; then
- echo -n ' sensorsd'; /usr/sbin/sensorsd ${sensorsd_flags}
- fi
- echo -n ' cron'; cron
- echo '.'
- date
- mouse控制:
- if [ "X${wsmoused_flags}" != X"NO" -a -x /usr/sbin/wsmoused ]; then
- echo 'starting wsmoused...'; /usr/sbin/wsmoused ${wsmoused_flags}
- fi
- 如果装了x, 则这个xdm要设置为启动, X才能用:
- # Alternatively, on some architectures, xdm may be started in /etc/ttys.
- if [ "X${xdm_flags}" != X"NO" ]; then
- echo 'starting xdm...'; /usr/X11R6/bin/xdm ${xdm_flags}
- fi
- exit 0
复制代码
好了, 马马虎虎的说一些, 今天上午体检了一下,
然后下午就乱写了这一篇, 跟大伙一起读读/etc/rc文件,
了解了解系统启动时的各类信息和系统设置。
各位对这些有不明白的地方可指出来, 我将它加进文章去!
欢迎参加openbsd项目, 欢迎访问项目主页:http://openbsd.linuxsir.cn |
|