1998-10-09 17:11:14 +00:00
|
|
|
#!/bin/sh
|
1999-08-27 23:37:10 +00:00
|
|
|
# $FreeBSD$
|
1993-11-07 01:19:06 +00:00
|
|
|
# From: @(#)rc 5.27 (Berkeley) 6/5/91
|
1993-06-20 13:41:45 +00:00
|
|
|
|
|
|
|
# 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.
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# 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.
|
1995-05-11 21:11:17 +00:00
|
|
|
|
1993-06-20 13:41:45 +00:00
|
|
|
stty status '^T'
|
|
|
|
|
|
|
|
# Set shell to ignore SIGINT (2), but not children;
|
|
|
|
# shell catches SIGQUIT (3) and returns to single user after fsck.
|
1999-09-13 15:44:20 +00:00
|
|
|
#
|
1993-06-20 13:41:45 +00:00
|
|
|
trap : 2
|
|
|
|
trap : 3 # shouldn't be needed
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
HOME=/
|
1996-12-19 18:06:35 +00:00
|
|
|
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
|
1999-09-13 15:44:20 +00:00
|
|
|
export HOME PATH
|
1993-06-20 13:41:45 +00:00
|
|
|
|
1999-01-25 04:40:53 +00:00
|
|
|
# BOOTP diskless boot. We have to run the rc file early in order to
|
1999-02-09 17:17:18 +00:00
|
|
|
# retarget various config files.
|
1999-01-25 04:40:53 +00:00
|
|
|
#
|
1999-09-13 15:44:20 +00:00
|
|
|
if [ -r /etc/rc.diskless1 ]; then
|
1999-01-29 06:18:12 +00:00
|
|
|
dlv=`/sbin/sysctl -n vfs.nfs.diskless_valid 2> /dev/null`
|
|
|
|
if [ ${dlv:=0} != 0 ]; then
|
1999-02-09 17:17:18 +00:00
|
|
|
. /etc/rc.diskless1
|
1999-01-25 04:40:53 +00:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
1999-01-26 05:14:36 +00:00
|
|
|
# If there is a global system configuration file, suck it in.
|
|
|
|
#
|
1999-09-13 15:44:20 +00:00
|
|
|
if [ -r /etc/defaults/rc.conf ]; then
|
1999-02-10 18:08:16 +00:00
|
|
|
. /etc/defaults/rc.conf
|
2000-04-27 08:43:49 +00:00
|
|
|
source_rc_confs
|
1999-09-13 15:44:20 +00:00
|
|
|
elif [ -r /etc/rc.conf ]; then
|
1999-01-26 05:14:36 +00:00
|
|
|
. /etc/rc.conf
|
|
|
|
fi
|
|
|
|
|
1996-05-03 05:37:04 +00:00
|
|
|
# Configure ccd devices.
|
1999-09-13 15:44:20 +00:00
|
|
|
#
|
|
|
|
if [ -r /etc/ccd.conf ]; then
|
1996-05-03 05:37:04 +00:00
|
|
|
ccdconfig -C
|
|
|
|
fi
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
case ${start_vinum} in
|
|
|
|
[Yy][Ee][Ss])
|
1999-04-02 07:15:44 +00:00
|
|
|
vinum start
|
1999-09-13 15:44:20 +00:00
|
|
|
;;
|
|
|
|
esac
|
1999-01-17 03:32:07 +00:00
|
|
|
|
1999-02-09 17:17:18 +00:00
|
|
|
swapon -a
|
1994-10-25 08:23:02 +00:00
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
case $1 in
|
|
|
|
autoboot)
|
2000-05-11 06:31:59 +00:00
|
|
|
echo Automatic boot in progress...
|
1993-06-20 13:41:45 +00:00
|
|
|
fsck -p
|
|
|
|
case $? in
|
|
|
|
0)
|
|
|
|
;;
|
|
|
|
2)
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
4)
|
|
|
|
reboot
|
|
|
|
echo "reboot failed... help!"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
8)
|
|
|
|
echo "Automatic file system check failed... help!"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
12)
|
|
|
|
echo "Reboot interrupted"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
130)
|
|
|
|
# interrupt before catcher installed
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "Unknown error in reboot"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
1999-09-13 15:44:20 +00:00
|
|
|
;;
|
|
|
|
*)
|
1994-08-21 04:28:44 +00:00
|
|
|
echo Skipping disk checks ...
|
1999-09-13 15:44:20 +00:00
|
|
|
;;
|
|
|
|
esac
|
1993-06-20 13:41:45 +00:00
|
|
|
|
1999-04-01 13:30:29 +00:00
|
|
|
set -T
|
1993-06-20 13:41:45 +00:00
|
|
|
trap "echo 'Reboot interrupted'; exit 1" 3
|
|
|
|
|
1999-01-25 18:07:25 +00:00
|
|
|
# root normally must be read/write, but if this is a BOOTP NFS
|
|
|
|
# diskless boot it does not have to be.
|
|
|
|
#
|
1999-09-13 15:44:20 +00:00
|
|
|
case ${root_rw_mount} in
|
|
|
|
[Nn][Oo] | '')
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
if ! mount -u -o rw / ; then
|
|
|
|
echo "Mounting root filesystem rw failed, startup aborted"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
1999-01-25 18:07:25 +00:00
|
|
|
|
1999-02-09 17:17:18 +00:00
|
|
|
umount -a >/dev/null 2>&1
|
1999-01-25 18:07:25 +00:00
|
|
|
|
2000-01-15 14:28:14 +00:00
|
|
|
# Mount everything except nfs filesystems.
|
|
|
|
mount -a -t nonfs
|
1999-09-13 15:44:20 +00:00
|
|
|
|
|
|
|
case $? in
|
|
|
|
0)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "Mounting /etc/fstab filesystems failed, startup aborted"
|
1999-02-09 17:17:18 +00:00
|
|
|
exit 1
|
1999-09-13 15:44:20 +00:00
|
|
|
;;
|
|
|
|
esac
|
1993-06-20 13:41:45 +00:00
|
|
|
|
1999-01-25 18:07:25 +00:00
|
|
|
# Run custom disk mounting function here
|
|
|
|
#
|
1999-09-13 15:44:20 +00:00
|
|
|
if [ -n "${diskless_mount}" -a -r "${diskless_mount}" ]; then
|
1999-08-25 16:01:45 +00:00
|
|
|
sh ${diskless_mount}
|
1999-01-25 18:07:25 +00:00
|
|
|
fi
|
|
|
|
|
2000-07-17 12:28:58 +00:00
|
|
|
# Recover some entropy so the rebooting /dev/random can reseed
|
|
|
|
#
|
|
|
|
case ${entropy_file} in
|
|
|
|
[Nn][Oo] | '')
|
|
|
|
;;
|
|
|
|
*)
|
2000-07-17 13:39:48 +00:00
|
|
|
if [ -f ${entropy_file} -a -r ${entropy_file} ]; then
|
|
|
|
echo "Reading entropy file"
|
2000-07-17 12:28:58 +00:00
|
|
|
cat ${entropy_file} > /dev/random
|
|
|
|
rm -f ${entropy_file}
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
1994-11-02 09:43:38 +00:00
|
|
|
adjkerntz -i
|
1993-12-17 04:20:30 +00:00
|
|
|
|
1998-08-10 19:53:50 +00:00
|
|
|
clean_var() {
|
1998-09-16 22:42:56 +00:00
|
|
|
if [ ! -f /var/run/clean_var ]; then
|
|
|
|
rm -rf /var/run/*
|
2000-06-08 08:57:35 +00:00
|
|
|
find /var/spool/lock ! -type d -delete
|
1998-09-16 22:42:56 +00:00
|
|
|
rm -rf /var/spool/uucp/.Temp/*
|
|
|
|
# Keep a copy of the boot messages around
|
|
|
|
dmesg >/var/run/dmesg.boot
|
|
|
|
# And an initial utmp file
|
1999-09-13 15:44:20 +00:00
|
|
|
(cd /var/run && cp /dev/null utmp && chmod 644 utmp;)
|
1998-09-16 22:42:56 +00:00
|
|
|
>/var/run/clean_var
|
|
|
|
fi
|
1998-08-10 19:53:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if [ -d /var/run -a -d /var/spool/lock -a -d /var/spool/uucp/.Temp ]; then
|
1998-09-16 22:42:56 +00:00
|
|
|
# network_pass1() *may* end up writing stuff to /var - we don't want to
|
|
|
|
# remove it immediately afterwards - *nor* to we want to fail to clean
|
|
|
|
# an nfs-mounted /var.
|
|
|
|
clean_var
|
1998-08-10 19:53:50 +00:00
|
|
|
fi
|
1997-01-02 16:28:33 +00:00
|
|
|
|
1996-08-21 23:15:37 +00:00
|
|
|
# Add additional swapfile, if configured.
|
1999-09-13 15:44:20 +00:00
|
|
|
#
|
|
|
|
case ${swapfile} in
|
|
|
|
[Nn][Oo] | '')
|
|
|
|
;;
|
|
|
|
*)
|
2000-02-03 06:06:36 +00:00
|
|
|
if [ -w "${swapfile}" -a -c /dev/vn0b ]; then
|
1999-09-13 15:44:20 +00:00
|
|
|
echo "Adding ${swapfile} as additional swap."
|
|
|
|
vnconfig /dev/vn0b ${swapfile} && swapon /dev/vn0b
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
1996-08-21 23:15:37 +00:00
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Set sysctl variables as early as we can
|
|
|
|
#
|
|
|
|
if [ -r /etc/rc.sysctl ]; then
|
1999-03-28 20:36:03 +00:00
|
|
|
. /etc/rc.sysctl
|
|
|
|
fi
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Configure serial devices
|
|
|
|
#
|
|
|
|
if [ -r /etc/rc.serial ]; then
|
1995-03-24 00:01:21 +00:00
|
|
|
. /etc/rc.serial
|
1994-06-04 00:44:00 +00:00
|
|
|
fi
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Start up PC-card configuration
|
|
|
|
#
|
|
|
|
if [ -r /etc/rc.pccard ]; then
|
1996-03-14 18:24:07 +00:00
|
|
|
. /etc/rc.pccard
|
1996-03-12 15:39:26 +00:00
|
|
|
fi
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Start up the initial network configuration.
|
|
|
|
#
|
|
|
|
if [ -r /etc/rc.network ]; then
|
1997-04-27 03:59:19 +00:00
|
|
|
. /etc/rc.network # We only need to do this once.
|
|
|
|
network_pass1
|
1995-03-29 03:42:21 +00:00
|
|
|
fi
|
|
|
|
|
2000-02-23 18:05:58 +00:00
|
|
|
case ${ipv6_enable} in
|
|
|
|
[Yy][Ee][Ss])
|
|
|
|
if [ -r /etc/rc.network6 ]; then
|
|
|
|
. /etc/rc.network6 # We only need to do this once also.
|
|
|
|
network6_pass1
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2000-03-25 16:17:53 +00:00
|
|
|
# Mount NFS filesystems if present in /etc/fstab
|
2000-05-29 12:31:26 +00:00
|
|
|
case "`mount -d -a -t nfs`" in
|
|
|
|
*mount_nfs*)
|
2000-03-25 16:17:53 +00:00
|
|
|
echo -n "Mounting NFS file systems"
|
|
|
|
mount -a -t nfs
|
|
|
|
echo .
|
2000-05-29 12:31:26 +00:00
|
|
|
;;
|
|
|
|
esac
|
This is the rc work as provided by pts, I will me makeing some additional
changes to it based upon other outstanding bug reports and commits made
after his work.
Comments:
(a) sysconfig is still used to do all configuration. I was not going to
change that out from under you.... a user never need edit netstart
or rc* unless they're being very weird.
(b) rc.maint has been folded back into rc. It is just unworkable as
a separate chunk because of ordering bogosities
(c) netstart does what it says... it starts up enough of the network to
get up, it doesn't start every bloody daemon that might talk to a
socket... netstart ifconfig's the devices and sets up routing if
configured to do so.
(d) nfs disks are mounted immediately after netstart completes
(e) syslog is started as early as possible (right after nfs) so that error
messages can get logged to remote syslog servers properly
(f) named is started (there is an argument that says that named should be
started before syslogd because if you are the dns server for your domain,
you'd like named to resolve remote hosts in syslog.conf, but this is
a minority case and the trivial workarround is to put the syslog host
in /etc/hosts or use an /etc/resolv.conf -- why? because you want syslog
to catch named errors, which is a MUCH more important and likely occurance)
(g) NOW all of the rest of the network daemons such as the time stuff, RPC,
NIS, NFS, Kerberos and inetd are started
(h) the rest of the generic stuff is done (cron/printer/sendmail)
(i) shared libraries are set
(j) /etc/rc.i386 is run (this does FreeBSD/386 specific stuff like ibcs2,
xtend, and all of the syscons stuff
(this is actually started as /etc/rc.`uname -m`
(k) the syscons stuff has gotten a serious cleaning to make it consistent
with rc conventions
(l) rc.local has had the comments about syscons removed (they are not relevant
to this file now) and the full name of the kernel has been restored to
/etc/motd
Submitted by: pts
1995-03-30 06:26:19 +00:00
|
|
|
|
|
|
|
# Whack the pty perms back into shape.
|
1999-09-13 15:44:20 +00:00
|
|
|
#
|
1999-08-02 05:42:44 +00:00
|
|
|
chflags 0 /dev/tty[pqrsPQRS]*
|
1996-12-23 00:32:15 +00:00
|
|
|
chmod 666 /dev/tty[pqrsPQRS]*
|
1999-03-14 20:26:39 +00:00
|
|
|
chown root:wheel /dev/tty[pqrsPQRS]*
|
This is the rc work as provided by pts, I will me makeing some additional
changes to it based upon other outstanding bug reports and commits made
after his work.
Comments:
(a) sysconfig is still used to do all configuration. I was not going to
change that out from under you.... a user never need edit netstart
or rc* unless they're being very weird.
(b) rc.maint has been folded back into rc. It is just unworkable as
a separate chunk because of ordering bogosities
(c) netstart does what it says... it starts up enough of the network to
get up, it doesn't start every bloody daemon that might talk to a
socket... netstart ifconfig's the devices and sets up routing if
configured to do so.
(d) nfs disks are mounted immediately after netstart completes
(e) syslog is started as early as possible (right after nfs) so that error
messages can get logged to remote syslog servers properly
(f) named is started (there is an argument that says that named should be
started before syslogd because if you are the dns server for your domain,
you'd like named to resolve remote hosts in syslog.conf, but this is
a minority case and the trivial workarround is to put the syslog host
in /etc/hosts or use an /etc/resolv.conf -- why? because you want syslog
to catch named errors, which is a MUCH more important and likely occurance)
(g) NOW all of the rest of the network daemons such as the time stuff, RPC,
NIS, NFS, Kerberos and inetd are started
(h) the rest of the generic stuff is done (cron/printer/sendmail)
(i) shared libraries are set
(j) /etc/rc.i386 is run (this does FreeBSD/386 specific stuff like ibcs2,
xtend, and all of the syscons stuff
(this is actually started as /etc/rc.`uname -m`
(k) the syscons stuff has gotten a serious cleaning to make it consistent
with rc conventions
(l) rc.local has had the comments about syscons removed (they are not relevant
to this file now) and the full name of the kernel has been restored to
/etc/motd
Submitted by: pts
1995-03-30 06:26:19 +00:00
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Clean up left-over files
|
|
|
|
#
|
1998-08-10 19:53:50 +00:00
|
|
|
clean_var # If it hasn't already been done
|
|
|
|
rm /var/run/clean_var
|
This is the rc work as provided by pts, I will me makeing some additional
changes to it based upon other outstanding bug reports and commits made
after his work.
Comments:
(a) sysconfig is still used to do all configuration. I was not going to
change that out from under you.... a user never need edit netstart
or rc* unless they're being very weird.
(b) rc.maint has been folded back into rc. It is just unworkable as
a separate chunk because of ordering bogosities
(c) netstart does what it says... it starts up enough of the network to
get up, it doesn't start every bloody daemon that might talk to a
socket... netstart ifconfig's the devices and sets up routing if
configured to do so.
(d) nfs disks are mounted immediately after netstart completes
(e) syslog is started as early as possible (right after nfs) so that error
messages can get logged to remote syslog servers properly
(f) named is started (there is an argument that says that named should be
started before syslogd because if you are the dns server for your domain,
you'd like named to resolve remote hosts in syslog.conf, but this is
a minority case and the trivial workarround is to put the syslog host
in /etc/hosts or use an /etc/resolv.conf -- why? because you want syslog
to catch named errors, which is a MUCH more important and likely occurance)
(g) NOW all of the rest of the network daemons such as the time stuff, RPC,
NIS, NFS, Kerberos and inetd are started
(h) the rest of the generic stuff is done (cron/printer/sendmail)
(i) shared libraries are set
(j) /etc/rc.i386 is run (this does FreeBSD/386 specific stuff like ibcs2,
xtend, and all of the syscons stuff
(this is actually started as /etc/rc.`uname -m`
(k) the syscons stuff has gotten a serious cleaning to make it consistent
with rc conventions
(l) rc.local has had the comments about syscons removed (they are not relevant
to this file now) and the full name of the kernel has been restored to
/etc/motd
Submitted by: pts
1995-03-30 06:26:19 +00:00
|
|
|
|
1997-11-16 12:52:17 +00:00
|
|
|
# Clearing /tmp at boot-time seems to have a long tradition. It doesn't
|
|
|
|
# help in any way for long-living systems, and it might accidentally
|
|
|
|
# clobber files you would rather like to have preserved after a crash
|
|
|
|
# (if not using mfs /tmp anyway).
|
|
|
|
#
|
|
|
|
# See also the example of another cleanup policy in /etc/periodic/daily.
|
|
|
|
#
|
1999-09-13 15:44:20 +00:00
|
|
|
case ${clear_tmp_enable} in
|
|
|
|
[Yy][Ee][Ss])
|
1997-11-16 12:52:17 +00:00
|
|
|
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]* &&
|
1999-09-13 15:44:20 +00:00
|
|
|
find -d . ! -name . ! -name lost+found ! -name quota.user \
|
|
|
|
! -name quota.group -exec rm -rf -- {} \;)
|
|
|
|
;;
|
|
|
|
esac
|
1997-11-16 12:52:17 +00:00
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Remove X lock files, since they will prevent you from restarting X11
|
1998-09-07 17:18:36 +00:00
|
|
|
# after a system crash.
|
1999-09-13 15:44:20 +00:00
|
|
|
#
|
1998-09-07 17:18:36 +00:00
|
|
|
rm -f /tmp/.X*-lock /tmp/.X11-unix/*
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Snapshot any kernel -c changes back to disk here <someday>.
|
|
|
|
# This has changed with ELF and /kernel.config.
|
1994-01-08 17:49:47 +00:00
|
|
|
|
1997-05-01 05:57:29 +00:00
|
|
|
echo -n 'additional daemons:'
|
1999-09-13 15:44:20 +00:00
|
|
|
|
|
|
|
# Start system logging and name service. Named needs to start before syslogd
|
|
|
|
# if you don't have a /etc/resolv.conf.
|
This is the rc work as provided by pts, I will me makeing some additional
changes to it based upon other outstanding bug reports and commits made
after his work.
Comments:
(a) sysconfig is still used to do all configuration. I was not going to
change that out from under you.... a user never need edit netstart
or rc* unless they're being very weird.
(b) rc.maint has been folded back into rc. It is just unworkable as
a separate chunk because of ordering bogosities
(c) netstart does what it says... it starts up enough of the network to
get up, it doesn't start every bloody daemon that might talk to a
socket... netstart ifconfig's the devices and sets up routing if
configured to do so.
(d) nfs disks are mounted immediately after netstart completes
(e) syslog is started as early as possible (right after nfs) so that error
messages can get logged to remote syslog servers properly
(f) named is started (there is an argument that says that named should be
started before syslogd because if you are the dns server for your domain,
you'd like named to resolve remote hosts in syslog.conf, but this is
a minority case and the trivial workarround is to put the syslog host
in /etc/hosts or use an /etc/resolv.conf -- why? because you want syslog
to catch named errors, which is a MUCH more important and likely occurance)
(g) NOW all of the rest of the network daemons such as the time stuff, RPC,
NIS, NFS, Kerberos and inetd are started
(h) the rest of the generic stuff is done (cron/printer/sendmail)
(i) shared libraries are set
(j) /etc/rc.i386 is run (this does FreeBSD/386 specific stuff like ibcs2,
xtend, and all of the syscons stuff
(this is actually started as /etc/rc.`uname -m`
(k) the syscons stuff has gotten a serious cleaning to make it consistent
with rc conventions
(l) rc.local has had the comments about syscons removed (they are not relevant
to this file now) and the full name of the kernel has been restored to
/etc/motd
Submitted by: pts
1995-03-30 06:26:19 +00:00
|
|
|
#
|
1999-09-13 15:44:20 +00:00
|
|
|
case ${syslogd_enable} in
|
|
|
|
[Yy][Ee][Ss])
|
1997-04-01 01:00:35 +00:00
|
|
|
# Transitional symlink (for the next couple of years :) until all
|
1999-09-13 15:44:20 +00:00
|
|
|
# binaries have had a chance to move towards /var/run/log.
|
|
|
|
if [ ! -h /dev/log ]; then
|
1997-04-01 01:00:35 +00:00
|
|
|
# might complain for r/o root f/s
|
|
|
|
ln -sf /var/run/log /dev/log
|
|
|
|
fi
|
|
|
|
|
|
|
|
rm -f /var/run/log
|
1999-09-13 15:44:20 +00:00
|
|
|
echo -n ' syslogd'; syslogd ${syslogd_flags}
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
1997-05-01 05:57:29 +00:00
|
|
|
echo '.'
|
1995-03-21 15:20:48 +00:00
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Enable dumpdev so that savecore can see it.
|
1998-01-08 17:08:22 +00:00
|
|
|
# /var/crash should be a directory or a symbolic link
|
|
|
|
# to the crash directory if core dumps are to be saved.
|
1999-09-13 15:44:20 +00:00
|
|
|
#
|
|
|
|
case ${dumpdev} in
|
|
|
|
[Nn][Oo] | '')
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
if [ -e "${dumpdev}" -a -d /var/crash ]; then
|
|
|
|
dumpon ${dumpdev}
|
|
|
|
echo -n checking for core dump...
|
|
|
|
savecore /var/crash
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
1998-01-08 17:08:22 +00:00
|
|
|
|
1999-08-25 16:01:45 +00:00
|
|
|
if [ -n "${network_pass1_done}" ]; then
|
1998-09-16 22:42:56 +00:00
|
|
|
network_pass2
|
This is the rc work as provided by pts, I will me makeing some additional
changes to it based upon other outstanding bug reports and commits made
after his work.
Comments:
(a) sysconfig is still used to do all configuration. I was not going to
change that out from under you.... a user never need edit netstart
or rc* unless they're being very weird.
(b) rc.maint has been folded back into rc. It is just unworkable as
a separate chunk because of ordering bogosities
(c) netstart does what it says... it starts up enough of the network to
get up, it doesn't start every bloody daemon that might talk to a
socket... netstart ifconfig's the devices and sets up routing if
configured to do so.
(d) nfs disks are mounted immediately after netstart completes
(e) syslog is started as early as possible (right after nfs) so that error
messages can get logged to remote syslog servers properly
(f) named is started (there is an argument that says that named should be
started before syslogd because if you are the dns server for your domain,
you'd like named to resolve remote hosts in syslog.conf, but this is
a minority case and the trivial workarround is to put the syslog host
in /etc/hosts or use an /etc/resolv.conf -- why? because you want syslog
to catch named errors, which is a MUCH more important and likely occurance)
(g) NOW all of the rest of the network daemons such as the time stuff, RPC,
NIS, NFS, Kerberos and inetd are started
(h) the rest of the generic stuff is done (cron/printer/sendmail)
(i) shared libraries are set
(j) /etc/rc.i386 is run (this does FreeBSD/386 specific stuff like ibcs2,
xtend, and all of the syscons stuff
(this is actually started as /etc/rc.`uname -m`
(k) the syscons stuff has gotten a serious cleaning to make it consistent
with rc conventions
(l) rc.local has had the comments about syscons removed (they are not relevant
to this file now) and the full name of the kernel has been restored to
/etc/motd
Submitted by: pts
1995-03-30 06:26:19 +00:00
|
|
|
fi
|
1995-03-22 03:29:55 +00:00
|
|
|
|
1999-03-17 04:00:04 +00:00
|
|
|
# Enable/Check the quotas (must be after ypbind if using NIS)
|
1999-09-13 15:44:20 +00:00
|
|
|
#
|
|
|
|
case ${enable_quotas} in
|
|
|
|
[Yy][Ee][Ss])
|
|
|
|
case ${check_quotas} in
|
|
|
|
[Yy][Ee][Ss])
|
|
|
|
echo -n 'checking quotas:'
|
|
|
|
quotacheck -a
|
|
|
|
echo ' done.'
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
echo -n 'enabling quotas:'
|
|
|
|
quotaon -a
|
|
|
|
echo ' done.'
|
|
|
|
;;
|
|
|
|
esac
|
1995-03-22 03:29:55 +00:00
|
|
|
|
1999-08-25 16:01:45 +00:00
|
|
|
if [ -n "${network_pass2_done}" ]; then
|
1998-09-16 22:42:56 +00:00
|
|
|
network_pass3
|
1996-10-08 20:00:44 +00:00
|
|
|
fi
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Build ps databases
|
|
|
|
#
|
This is the rc work as provided by pts, I will me makeing some additional
changes to it based upon other outstanding bug reports and commits made
after his work.
Comments:
(a) sysconfig is still used to do all configuration. I was not going to
change that out from under you.... a user never need edit netstart
or rc* unless they're being very weird.
(b) rc.maint has been folded back into rc. It is just unworkable as
a separate chunk because of ordering bogosities
(c) netstart does what it says... it starts up enough of the network to
get up, it doesn't start every bloody daemon that might talk to a
socket... netstart ifconfig's the devices and sets up routing if
configured to do so.
(d) nfs disks are mounted immediately after netstart completes
(e) syslog is started as early as possible (right after nfs) so that error
messages can get logged to remote syslog servers properly
(f) named is started (there is an argument that says that named should be
started before syslogd because if you are the dns server for your domain,
you'd like named to resolve remote hosts in syslog.conf, but this is
a minority case and the trivial workarround is to put the syslog host
in /etc/hosts or use an /etc/resolv.conf -- why? because you want syslog
to catch named errors, which is a MUCH more important and likely occurance)
(g) NOW all of the rest of the network daemons such as the time stuff, RPC,
NIS, NFS, Kerberos and inetd are started
(h) the rest of the generic stuff is done (cron/printer/sendmail)
(i) shared libraries are set
(j) /etc/rc.i386 is run (this does FreeBSD/386 specific stuff like ibcs2,
xtend, and all of the syscons stuff
(this is actually started as /etc/rc.`uname -m`
(k) the syscons stuff has gotten a serious cleaning to make it consistent
with rc conventions
(l) rc.local has had the comments about syscons removed (they are not relevant
to this file now) and the full name of the kernel has been restored to
/etc/motd
Submitted by: pts
1995-03-30 06:26:19 +00:00
|
|
|
dev_mkdb
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Check the password temp/lock file
|
|
|
|
#
|
|
|
|
if [ -e /etc/ptmp ]; then
|
This is the rc work as provided by pts, I will me makeing some additional
changes to it based upon other outstanding bug reports and commits made
after his work.
Comments:
(a) sysconfig is still used to do all configuration. I was not going to
change that out from under you.... a user never need edit netstart
or rc* unless they're being very weird.
(b) rc.maint has been folded back into rc. It is just unworkable as
a separate chunk because of ordering bogosities
(c) netstart does what it says... it starts up enough of the network to
get up, it doesn't start every bloody daemon that might talk to a
socket... netstart ifconfig's the devices and sets up routing if
configured to do so.
(d) nfs disks are mounted immediately after netstart completes
(e) syslog is started as early as possible (right after nfs) so that error
messages can get logged to remote syslog servers properly
(f) named is started (there is an argument that says that named should be
started before syslogd because if you are the dns server for your domain,
you'd like named to resolve remote hosts in syslog.conf, but this is
a minority case and the trivial workarround is to put the syslog host
in /etc/hosts or use an /etc/resolv.conf -- why? because you want syslog
to catch named errors, which is a MUCH more important and likely occurance)
(g) NOW all of the rest of the network daemons such as the time stuff, RPC,
NIS, NFS, Kerberos and inetd are started
(h) the rest of the generic stuff is done (cron/printer/sendmail)
(i) shared libraries are set
(j) /etc/rc.i386 is run (this does FreeBSD/386 specific stuff like ibcs2,
xtend, and all of the syscons stuff
(this is actually started as /etc/rc.`uname -m`
(k) the syscons stuff has gotten a serious cleaning to make it consistent
with rc conventions
(l) rc.local has had the comments about syscons removed (they are not relevant
to this file now) and the full name of the kernel has been restored to
/etc/motd
Submitted by: pts
1995-03-30 06:26:19 +00:00
|
|
|
logger -s -p auth.err \
|
|
|
|
"password file may be incorrect -- /etc/ptmp exists"
|
|
|
|
fi
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
case ${accounting_enable} in
|
|
|
|
[Yy][Ee][Ss])
|
|
|
|
if [ -d /var/account ]; then
|
|
|
|
echo 'turning on accounting'
|
|
|
|
if [ ! -e /var/account/acct ]; then
|
|
|
|
touch /var/account/acct
|
|
|
|
fi
|
|
|
|
accton /var/account/acct
|
1995-11-01 00:22:45 +00:00
|
|
|
fi
|
1999-09-13 15:44:20 +00:00
|
|
|
;;
|
|
|
|
esac
|
This is the rc work as provided by pts, I will me makeing some additional
changes to it based upon other outstanding bug reports and commits made
after his work.
Comments:
(a) sysconfig is still used to do all configuration. I was not going to
change that out from under you.... a user never need edit netstart
or rc* unless they're being very weird.
(b) rc.maint has been folded back into rc. It is just unworkable as
a separate chunk because of ordering bogosities
(c) netstart does what it says... it starts up enough of the network to
get up, it doesn't start every bloody daemon that might talk to a
socket... netstart ifconfig's the devices and sets up routing if
configured to do so.
(d) nfs disks are mounted immediately after netstart completes
(e) syslog is started as early as possible (right after nfs) so that error
messages can get logged to remote syslog servers properly
(f) named is started (there is an argument that says that named should be
started before syslogd because if you are the dns server for your domain,
you'd like named to resolve remote hosts in syslog.conf, but this is
a minority case and the trivial workarround is to put the syslog host
in /etc/hosts or use an /etc/resolv.conf -- why? because you want syslog
to catch named errors, which is a MUCH more important and likely occurance)
(g) NOW all of the rest of the network daemons such as the time stuff, RPC,
NIS, NFS, Kerberos and inetd are started
(h) the rest of the generic stuff is done (cron/printer/sendmail)
(i) shared libraries are set
(j) /etc/rc.i386 is run (this does FreeBSD/386 specific stuff like ibcs2,
xtend, and all of the syscons stuff
(this is actually started as /etc/rc.`uname -m`
(k) the syscons stuff has gotten a serious cleaning to make it consistent
with rc conventions
(l) rc.local has had the comments about syscons removed (they are not relevant
to this file now) and the full name of the kernel has been restored to
/etc/motd
Submitted by: pts
1995-03-30 06:26:19 +00:00
|
|
|
|
1997-07-13 13:22:15 +00:00
|
|
|
# Make shared lib searching a little faster. Leave /usr/lib first if you
|
|
|
|
# add your own entries or you may come to grief.
|
1999-09-13 15:44:20 +00:00
|
|
|
#
|
1998-08-24 07:11:48 +00:00
|
|
|
if [ -x /sbin/ldconfig ]; then
|
1999-09-13 15:44:20 +00:00
|
|
|
case `/usr/bin/objformat` in
|
|
|
|
elf)
|
1998-09-16 05:42:38 +00:00
|
|
|
_LDC=/usr/lib
|
1999-08-25 16:01:45 +00:00
|
|
|
for i in ${ldconfig_paths}; do
|
1999-09-13 15:44:20 +00:00
|
|
|
if [ -d "${i}" ]; then
|
1999-08-25 16:01:45 +00:00
|
|
|
_LDC="${_LDC} ${i}"
|
1998-09-16 05:42:38 +00:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
echo 'setting ELF ldconfig path:' ${_LDC}
|
|
|
|
ldconfig -elf ${_LDC}
|
1999-09-13 15:44:20 +00:00
|
|
|
;;
|
|
|
|
esac
|
1998-09-16 05:42:38 +00:00
|
|
|
|
1998-12-10 08:06:59 +00:00
|
|
|
# Legacy aout support for i386 only
|
1999-09-13 15:44:20 +00:00
|
|
|
case `sysctl -n hw.machine` in
|
|
|
|
i386)
|
1999-02-13 05:30:49 +00:00
|
|
|
# Default the a.out ldconfig path.
|
1998-12-10 08:06:59 +00:00
|
|
|
: ${ldconfig_paths_aout=${ldconfig_paths}}
|
|
|
|
_LDC=/usr/lib/aout
|
1999-08-25 16:01:45 +00:00
|
|
|
for i in ${ldconfig_paths_aout}; do
|
1999-09-13 15:44:20 +00:00
|
|
|
if [ -d "${i}" ]; then
|
1999-08-25 16:01:45 +00:00
|
|
|
_LDC="${_LDC} ${i}"
|
1998-12-10 08:06:59 +00:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
echo 'setting a.out ldconfig path:' ${_LDC}
|
|
|
|
ldconfig -aout ${_LDC}
|
1999-09-13 15:44:20 +00:00
|
|
|
;;
|
|
|
|
esac
|
1998-08-24 07:11:48 +00:00
|
|
|
fi
|
1995-03-22 03:29:55 +00:00
|
|
|
|
1996-07-18 19:09:06 +00:00
|
|
|
# Now start up miscellaneous daemons that don't belong anywhere else
|
|
|
|
#
|
1997-05-01 05:57:29 +00:00
|
|
|
echo -n starting standard daemons:
|
1999-09-13 15:44:20 +00:00
|
|
|
case ${inetd_enable} in
|
|
|
|
[Nn][Oo])
|
|
|
|
;;
|
|
|
|
*)
|
1997-06-18 16:01:19 +00:00
|
|
|
echo -n ' inetd'; inetd ${inetd_flags}
|
1999-09-13 15:44:20 +00:00
|
|
|
;;
|
|
|
|
esac
|
1997-06-18 16:01:19 +00:00
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
case ${cron_enable} in
|
|
|
|
[Nn][Oo])
|
|
|
|
;;
|
|
|
|
*)
|
1997-06-18 16:01:19 +00:00
|
|
|
echo -n ' cron'; cron
|
1999-09-13 15:44:20 +00:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case ${lpd_enable} in
|
|
|
|
[Yy][Ee][Ss])
|
|
|
|
echo -n ' printer'; ${lpd_program:-/usr/sbin/lpd} ${lpd_flags}
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case ${sendmail_enable} in
|
|
|
|
[Yy][Ee][Ss])
|
1999-12-19 22:05:32 +00:00
|
|
|
if [ -r /etc/mail/sendmail.cf ]; then
|
1999-09-13 15:44:20 +00:00
|
|
|
echo -n ' sendmail'; /usr/sbin/sendmail ${sendmail_flags}
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
1996-07-13 17:27:39 +00:00
|
|
|
|
2000-02-28 19:54:06 +00:00
|
|
|
case ${sshd_enable} in
|
|
|
|
[Yy][Ee][Ss])
|
|
|
|
if [ -x ${sshd_program:-/usr/sbin/sshd} ]; then
|
|
|
|
echo -n ' sshd';
|
|
|
|
${sshd_program:-/usr/sbin/sshd} ${sshd_flags}
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
case ${usbd_enable} in
|
|
|
|
[Yy][Ee][Ss])
|
1999-01-10 22:06:22 +00:00
|
|
|
echo -n ' usbd'; /usr/sbin/usbd ${usbd_flags}
|
1999-09-13 15:44:20 +00:00
|
|
|
;;
|
|
|
|
esac
|
1999-01-10 22:06:22 +00:00
|
|
|
|
1996-07-13 17:27:39 +00:00
|
|
|
echo '.'
|
|
|
|
|
1996-06-24 19:00:28 +00:00
|
|
|
# Recover vi editor files.
|
1999-08-30 03:34:46 +00:00
|
|
|
find /var/tmp/vi.recover ! -type f -a ! -type d -delete
|
1996-11-01 09:45:51 +00:00
|
|
|
vibackup=`echo /var/tmp/vi.recover/vi.*`
|
1999-08-25 16:01:45 +00:00
|
|
|
if [ "${vibackup}" != '/var/tmp/vi.recover/vi.*' ]; then
|
1996-06-24 19:00:28 +00:00
|
|
|
echo 'Recovering vi editor sessions'
|
2000-01-06 14:27:37 +00:00
|
|
|
for i in /var/tmp/vi.recover/vi.*; do
|
1996-11-01 09:45:51 +00:00
|
|
|
# Only test files that are readable.
|
1999-09-13 15:44:20 +00:00
|
|
|
if [ ! -r "${i}" ]; then
|
1996-11-01 09:45:51 +00:00
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Unmodified nvi editor backup files either have the
|
|
|
|
# execute bit set or are zero length. Delete them.
|
1999-09-13 15:44:20 +00:00
|
|
|
if [ -x "${i}" -o ! -s "${i}" ]; then
|
2000-01-05 08:17:18 +00:00
|
|
|
rm -f "${i}"
|
1996-11-01 09:45:51 +00:00
|
|
|
fi
|
1996-06-24 19:00:28 +00:00
|
|
|
done
|
1996-11-01 09:45:51 +00:00
|
|
|
|
|
|
|
# It is possible to get incomplete recovery files, if the editor
|
|
|
|
# crashes at the right time.
|
|
|
|
virecovery=`echo /var/tmp/vi.recover/recover.*`
|
1999-08-25 16:01:45 +00:00
|
|
|
if [ "${virecovery}" != "/var/tmp/vi.recover/recover.*" ]; then
|
2000-01-06 14:27:37 +00:00
|
|
|
for i in /var/tmp/vi.recover/recover.*; do
|
1996-11-01 09:45:51 +00:00
|
|
|
# Only test files that are readable.
|
1999-09-13 15:44:20 +00:00
|
|
|
if [ ! -r "${i}" ]; then
|
1996-11-01 09:45:51 +00:00
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Delete any recovery files that are zero length,
|
|
|
|
# corrupted, or that have no corresponding backup file.
|
|
|
|
# Else send mail to the user.
|
2000-01-05 09:19:27 +00:00
|
|
|
recfile=`awk '/^X-vi-recover-path:/{print $2}' < "${i}"`
|
1999-09-13 15:44:20 +00:00
|
|
|
if [ -n "${recfile}" -a -s "${recfile}" ]; then
|
2000-01-05 08:17:18 +00:00
|
|
|
sendmail -t < "${i}"
|
1996-11-01 09:45:51 +00:00
|
|
|
else
|
2000-01-05 08:17:18 +00:00
|
|
|
rm -f "${i}"
|
1996-11-01 09:45:51 +00:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
1996-06-24 19:00:28 +00:00
|
|
|
fi
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Make a bounds file for msgs(1) if there isn't one already
|
|
|
|
# "Delete important files with symlink" security hole?
|
|
|
|
#
|
|
|
|
if [ -d /var/msgs -a ! -f /var/msgs/bounds ]; then
|
1998-07-28 01:15:12 +00:00
|
|
|
echo 0 > /var/msgs/bounds
|
|
|
|
fi
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
case ${update_motd} in
|
|
|
|
[Nn][Oo] | '')
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
if T=`mktemp /tmp/_motd.XXXXXX`; then
|
1999-08-25 16:01:45 +00:00
|
|
|
uname -v | sed -e 's,^\([^#]*\) #\(.* [1-2][0-9][0-9][0-9]\).*/\([^\]*\) $,\1 (\3) #\2,' > ${T}
|
|
|
|
awk '{if (NR == 1) {if ($1 == "FreeBSD") {next} else {print "\n"$0}} else {print}}' < /etc/motd >> ${T}
|
|
|
|
cmp -s ${T} /etc/motd || {
|
|
|
|
cp ${T} /etc/motd
|
1999-08-06 06:16:06 +00:00
|
|
|
chmod 644 /etc/motd
|
|
|
|
}
|
1999-08-25 16:01:45 +00:00
|
|
|
rm -f ${T}
|
1999-08-06 06:16:06 +00:00
|
|
|
fi
|
1999-09-13 15:44:20 +00:00
|
|
|
;;
|
|
|
|
esac
|
1998-12-12 23:04:21 +00:00
|
|
|
|
1999-09-24 06:49:00 +00:00
|
|
|
# Configure implementation specific stuff
|
|
|
|
#
|
|
|
|
arch=`uname -m`
|
|
|
|
if [ -r /etc/rc.${arch} ]; then
|
|
|
|
. /etc/rc.${arch}
|
|
|
|
fi
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Run rc.devfs if readable to customize devfs
|
|
|
|
#
|
|
|
|
if [ -r /etc/rc.devfs ]; then
|
|
|
|
sh /etc/rc.devfs
|
|
|
|
fi
|
1998-09-14 09:14:46 +00:00
|
|
|
|
1998-12-12 23:04:21 +00:00
|
|
|
# Do traditional (but rather obsolete) rc.local file if it exists. If you
|
1999-02-13 05:30:49 +00:00
|
|
|
# use this file and want to make it programmatic, source /etc/defaults/rc.conf
|
|
|
|
# in /etc/rc.local and add your custom variables to /etc/rc.conf, as
|
|
|
|
# shown below. Please do not put local extensions into /etc/rc itself.
|
1998-12-12 23:04:21 +00:00
|
|
|
# Use /etc/rc.local
|
|
|
|
#
|
1999-09-13 15:44:20 +00:00
|
|
|
# ---- rc.local ----
|
|
|
|
# if [ -r /etc/defaults/rc.conf ]; then
|
|
|
|
# . /etc/defaults/rc.conf
|
2000-04-27 08:43:49 +00:00
|
|
|
# source_rc_confs
|
|
|
|
# elif [ -r /etc/rc.conf ]; then
|
|
|
|
# . /etc/rc.conf
|
1999-09-13 15:44:20 +00:00
|
|
|
# fi
|
|
|
|
#
|
|
|
|
# ... additional startup conditionals ...
|
|
|
|
# ---- rc.local ----
|
|
|
|
#
|
|
|
|
if [ -r /etc/rc.local ]; then
|
1999-01-25 18:07:25 +00:00
|
|
|
echo -n 'starting local daemons:'
|
1999-09-13 15:44:20 +00:00
|
|
|
sh /etc/rc.local
|
1999-01-25 18:07:25 +00:00
|
|
|
echo '.'
|
1998-12-12 23:04:21 +00:00
|
|
|
fi
|
1995-09-18 07:38:18 +00:00
|
|
|
|
1999-09-24 06:49:00 +00:00
|
|
|
# For each valid dir in $local_startup, search for init scripts matching *.sh
|
|
|
|
#
|
|
|
|
case ${local_startup} in
|
|
|
|
[Nn][Oo] | '')
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo -n 'Local package initialization:'
|
|
|
|
for dir in ${local_startup}; do
|
|
|
|
if [ -d "${dir}" ]; then
|
|
|
|
for script in ${dir}/*.sh; do
|
|
|
|
if [ -x "${script}" ]; then
|
|
|
|
(set -T
|
|
|
|
trap 'exit 1' 2
|
|
|
|
${script} start)
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
echo .
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
1999-11-17 22:38:02 +00:00
|
|
|
if [ -n "${network_pass3_done}" ]; then
|
|
|
|
network_pass4
|
|
|
|
fi
|
|
|
|
|
1998-06-22 06:34:12 +00:00
|
|
|
# Raise kernel security level. This should be done only after `fsck' has
|
|
|
|
# repaired local file systems if you want the securelevel to be greater than 1.
|
1999-09-13 15:44:20 +00:00
|
|
|
#
|
|
|
|
case ${kern_securelevel_enable} in
|
|
|
|
[Yy][Ee][Ss])
|
|
|
|
if [ "${kern_securelevel}" -ge 0 ]; then
|
|
|
|
echo 'Raising kernel security level'
|
|
|
|
sysctl -w kern.securelevel=${kern_securelevel}
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
1998-06-22 06:34:12 +00:00
|
|
|
|
1993-06-20 13:41:45 +00:00
|
|
|
date
|
|
|
|
exit 0
|