|
Listing 1
#!/bin/sh
##
# Multi-user startup script.
#
# Copyright 1997-2002 Apple Computer, Inc.
#
# Customize system startup by adding scripts to the startup
# directory, rather than editing this file.
##
stty intr undef
stty kill undef
stty quit undef
stty susp undef
stty start undef
stty stop undef
stty dsusp undef
. /etc/rc.common
stty status '^T'
##
# Handle arguments passed from init.
##
BootType=$1; shift;
if [ -z "${BootType}" ]; then
BootType="multiuser"
fi
VerboseFlag=""
SafeBoot=""
args=$(/usr/bin/getopt vx $*)
set -- ${args};
for option; do
case "${option}" in
-v)
VerboseFlag="-v"
;;
-x)
SafeBoot="-x"
;;
esac;
done;
if [ -d /System/Installation -a -f /etc/rc.cdrom ]; then
/etc/rc.cdrom ${BootType}
# We shouldn't get here; CDIS should reboot the machine when done
echo "CD-ROM boot procedure complete"
halt
exit 0
fi
netboot=$(/usr/sbin/sysctl -n kern.netboot)
# Mount essential local filesystems (according to /etc/fstab).
echo "Mounting local filesystems"
mount -vat hfs
mount -vat ufs
mount -t fdesc -o union stdin /dev
mkdir -p -m 0555 /.vol && chmod 0555 /.vol && mount_volfs /.vol
# 3281054 Cannot start up if /private/var/tmp is missing (system should recreate it)
mkdir -p -m 01777 /private/var/tmp
if [ -f /etc/rc.installer_cleanup ]; then
/etc/rc.installer_cleanup ${BootType}
fi
. /etc/rc.cleanup
BootCacheControl=/System/Library/Extensions/BootCache.kext/Contents/Resources/BootCacheControl
if [ ! -f $BootCacheControl ]; then
BootCacheControl=/usr/sbin/BootCacheControl
fi
if [ "${SafeBoot}" != "-x" -a -x "${BootCacheControl}" ]; then
${BootCacheControl} start
fi
# System tuning
sysctl -w kern.maxvnodes=$(echo $(sysctl -n hw.physmem) '33554432 / 512 * 1024 +p'|dc)
sysctl -w kern.sysv.shmmax=4194304
sysctl -w kern.sysv.shmmin=1
sysctl -w kern.sysv.shmmni=32
sysctl -w kern.sysv.shmseg=8
sysctl -w kern.sysv.shmall=1024
if [ -f /etc/sysctl-macosxserver.conf ]; then
awk '{ if (!index($1, "#") && index($1, "=")) print $1 }' < /etc/sysctl-macosxserver.conf | while read
do
sysctl -w ${REPLY}
done
fi
if [ -f /etc/sysctl.conf ]; then
awk '{ if (!index($1, "#") && index($1, "=")) print $1 }' < /etc/sysctl.conf | while read
do
sysctl -w ${REPLY}
done
fi
# Logs are important. Start syslogd after the boot disk becomes r/w but before
# everything else starts. In the future, we should launch this lazily when it
# is first needed.
ifconfig lo0 127.0.0.1 up
/usr/sbin/syslogd -s -m 0
# Create mach symbol file
rm -f /mach.sym
sysctl -n kern.symfile
if [ -f /mach.sym ]; then
rm -f /mach
ln -s /mach.sym /mach
else
rm -f /mach
ln -s /mach_kernel /mach
fi
if [ "${SafeBoot}" = "-x" ]; then
echo "Configuring kernel extensions for safe boot"
touch /private/tmp/.SafeBoot
kextd -x
else
echo "Configuring kernel extensions"
kextd
fi
# Load [ideally on demand] Mach bootstrap based services
/usr/libexec/register_mach_bootstrap_servers /etc/mach_init.d
# Initialize auditing - must be done after defining the
# bootstrap services - because it depends upon some of them (notifyd).
if [ -f /etc/security/rc.audit ]; then
. /etc/security/rc.audit
fi
# We hope to launch portmap on demand in the next major release of Mac OS X,
# but until then, we need to inline in here for reasons not worth going into in
# this file. Static reasons to run portmap today include:
#
# - if there are NFS exports, or
# - if NFS locking is on (NFSLOCKS=-YES-), or
# - if there are NetInfo domains other than "local", or
# - if the local domain has any non-loopback values for "trusted_networks".
# - if xinetd has a portmap based service
#
# Explicitly setting NETINFOSERVER=-YES- forces portmap to run.
#
# If portmap is not started now, it will be started later if
# NFSLOCKS=-AUTOMATIC- and an NFS locking request is made.
##
if [ "${RPCSERVER:=-AUTOMATIC-}" = "-AUTOMATIC-" ]; then
RPCSERVER=-YES-
nfs_exports_ni=$(nicl -raw /var/db/netinfo/local.nidb -list /exports 2> /dev/null | wc -w)
nfs_exports_etc=$(grep -v '^[[:space:]]*\(#\|$\)' /etc/exports 2> /dev/null | wc -l)
nfs_exports=$(($nfs_exports_ni + $nfs_exports_etc))
ni_not_local=$(/bin/ls -1d /var/db/netinfo/*.nidb | sed 's:/var/db/netinfo/local.nidb::' | wc -w)
ni_local_export=$(nicl -raw /var/db/netinfo/local.nidb -read / trusted_networks 2>&1 | sed 's/trusted_networks://' | sed 's/127[^ ]*//g' | wc -w)
total=$(($nfs_exports + $ni_not_local + $ni_local_export))
[ "${total}" -eq 0 ] && RPCSERVER=-NO-
[ "${NFSLOCKS:=-AUTOMATIC-}" = "-YES-" ] && RPCSERVER=-YES-
[ "${NETINFOSERVER:=-NO-}" = "-YES-" ] && RPCSERVER=-YES-
[ "${NISDOMAIN:=-NO-}" != "-NO-" ] && RPCSERVER=-YES-
grep -ri rpc /etc/xinetd.d >/dev/null 2>&1 && RPCSERVER=-YES-
fi
if [ "${RPCSERVER}" = "-YES-" ]; then
portmap
fi
# We would also like to start "netinfo" on demand too, but we can't for various
# reasons at the moment. Start it here for now:
#
# Create local NetInfo database if it doesn't exist
if [ ! -d /var/db/netinfo/local.nidb ]; then
echo "Creating local NetInfo database"
mkdir -p /var/db/netinfo
/usr/libexec/create_nidb
rm -f /var/db/.AppleSetupDone
fi
# nibindd is required if there are NetInfo domains other than "local", or
# if the local domain has any non-loopback values for "trusted_networks".
if [ "${NETINFOSERVER:=-AUTOMATIC-}" = "-AUTOMATIC-" ]; then
NETINFOSERVER=-YES-
ni_not_local=$(/bin/ls -1d /var/db/netinfo/*.nidb | sed 's:/var/db/netinfo/local.nidb::' | wc -w)
ni_local_export=$(nicl -raw /var/db/netinfo/local.nidb -read / trusted_networks 2>&1 | sed 's/trusted_networks://' | sed 's/127[^ ]*//g' | wc -w)
total=$(($ni_not_local + $ni_local_export))
if [ "${total}" -eq 0 ]; then
NETINFOSERVER=-NO-
fi
fi
# If nibindd is not required, we just start the local NetInfo daemon.
if [ "${NETINFOSERVER}" = "-YES-" ]; then
nibindd
else
cd /var/db/netinfo
netinfod -s local
cd /
fi
if [ ! "${netboot}" = "1" ] ; then
if [ ! -f /System/Library/Extensions.mkext -o \
/System/Library/Extensions.mkext -ot /System/Library/Extensions ]; then
if [ "${SafeBoot}" != "-x" ]; then
echo "Updating kernel extensions cache"
rm -f /System/Library/Extensions.mkext
/usr/sbin/kextcache -elF -a `arch`
fi
fi
fi
update
echo "Starting virtual memory"
swapdir=/private/var/vm
if [ "${netboot}" = "1" ]; then
sh /etc/rc.netboot setup_vm ${swapdir}
fi
# Make sure the swapfile exists
if [ ! -d ${swapdir} ]; then
echo "Creating default swap directory"
mount -uw /
mkdir -p -m 755 ${swapdir}
chown root:wheel ${swapdir}
else
rm -rf ${swapdir}/swap*
fi
dynamic_pager -F ${swapdir}/swapfile
appprofiledir=/private/var/vm/app_profile
if [ ! -d ${appprofiledir} ]; then
if [ -f ${appprofiledir} ]; then
mv -f ${appprofiledir} "${appprofiledir}_"
fi
mkdir -p -m 711 ${appprofiledir}
chown root:wheel ${appprofiledir}
fi
if [ "${SafeBoot}" != "-x" -a -x "${BootCacheControl}" ]; then
${BootCacheControl} tag
fi
# Set language from CDIS.custom - assumes this is parse-able by sh
if [ -f /var/log/CDIS.custom ]; then
. /var/log/CDIS.custom
fi
# Start the Language Chooser. This code should be able to go away as far as I
# know once loginwindow becomes dynamic and SystemStarter exits the GUI
# business.
STARTPBS="/System/Library/CoreServices/pbs" # apps stall w/o
BUDDYCOOKIE="/var/db/.AppleSetupDone"
LCACOOKIE="/var/db/.RunLanguageChooserToo"
STARTLCA="/System/Library/CoreServices/Language Chooser.app/Contents/MacOS/Language Chooser"
if [ -x "$STARTLCA" -a -x "$STARTPBS" -a ! -f "$BUDDYCOOKIE" -a -f "$LCACOOKIE" ]; then
"$STARTPBS" &
pbspid=$!
"$STARTLCA"
kill $pbspid # XSelect does this independently
fi
if [ ! -s "/var/log/CDIS.custom" ]; then
echo "Language Chooser seems to have failed; defaulting to English"
echo "LANGUAGE=English" > "/var/log/CDIS.custom"
fi
export LANGUAGE
##
# Added for Oracle - MMR 12 July 2004
##
ulimit -Hu 2068
ulimit -Su 2068
ulimit -Hn 65536
ulimit -Sn 65538
##
SystemStarter -gr ${VerboseFlag} ${SafeBoot}
exit 0
|