2 # Copyright 1997-2004 Apple Computer, Inc.
11 if [ -d /System
/Installation
-a -f /etc
/rc.cdrom
]; then
12 /etc
/rc.cdrom multiuser
13 # We shouldn't get here; CDIS should reboot the machine when done
14 echo "CD-ROM boot procedure complete"
18 if [ "${NetBoot}" = "-N" ] ; then
19 echo "Initializing NetBoot"
20 if ! sh
/etc
/rc.netboot start
; then
21 echo NetBoot initialization failed
, shut down
in 10 seconds...
27 if [ "${FsckSlash}" = "-F" ]; then
28 # Benignly clean up ("preen") any dirty filesystems.
29 # fsck -p will skip disks which were properly unmounted during
32 if [ "${SafeBoot}" = "-x" ]; then
35 fsck
-p || fsck
-fy || halt
39 echo "Mounting local filesystems"
41 [ -f /etc
/fstab
] && mount
-vat nonfs
43 BootCacheControl
=/System
/Library
/Extensions
/BootCache.kext
/Contents
/Resources
/BootCacheControl
44 if [ ! -f $BootCacheControl ]; then
45 BootCacheControl
=/usr
/sbin
/BootCacheControl
47 if [ "${SafeBoot}" != "-x" -a -x "${BootCacheControl}" ]; then
48 ${BootCacheControl} start
51 if [ -f /etc
/sysctl
-macosxserver.conf
]; then
52 awk '{ if (!index($1, "#") && index($1, "=")) print $1 }' < /etc
/sysctl
-macosxserver.conf
| while read
57 if [ -f /etc
/sysctl.conf
]; then
58 awk '{ if (!index($1, "#") && index($1, "=")) print $1 }' < /etc
/sysctl.conf
| while read
64 sysctl
-w kern.sysv.shmmax
=4194304 kern.sysv.shmmin
=1 kern.sysv.shmmni
=32 kern.sysv.shmseg
=8 kern.sysv.shmall
=1024
66 if [ -f /var
/account
/acct
]; then
67 accton
/var
/account
/acct
70 if [ -f /etc
/rc.installer_cleanup
]; then
71 /etc
/rc.installer_cleanup multiuser
74 echo "Resetting files and devices"
76 RMRF_ITEMS
="/mach.sym /var/tmp/folders.*"
78 # Attempt to recover the passwd file, if needed. This procedure is
79 # primarily historical and makes sense only when the passwd file is edited
80 # using the vipw command.
82 if [ -s /etc
/ptmp
]; then
83 if [ -s /etc
/passwd
]; then
84 echo -n "Passwd file conflict with ptmp: "
85 ls -l /etc
/passwd
/etc
/ptmp
86 echo "Moving ptmp to ptmp.save"
87 mv -f /etc
/ptmp
/etc
/ptmp.save
89 echo "Passwd file recovered from ptmp"
90 mv /etc
/ptmp
/etc
/passwd
92 elif [ -r /etc
/ptmp
]; then
93 echo "Removing passwd lock file"
94 RMRF_ITEMS
="$RMRF_ITEMS /etc/ptmp"
98 # If the shutdown command was used to shut the system down, the file
99 # /etc/nologin may have been created to prevent users from logging in.
100 # Remove it so that logins are enabled when the system comes up.
102 RMRF_ITEMS
="$RMRF_ITEMS /etc/nologin"
104 # Clean out /private/tmp.
105 if [ -d /private
/tmp
]; then
106 # blow away any _tmp_ in case it exists as well
107 if [ -e /private
/_tmp_
]; then
108 chflags
-R -P 0 /private
/_tmp_
109 rm -rf /private
/_tmp_
111 mv /private
/tmp
/private
/_tmp_
112 chflags
-R -P 0 /private
/_tmp_
113 RMRF_ITEMS
="$RMRF_ITEMS /private/_tmp_"
115 mkdir -p -m 01777 /private
/var
/tmp
/private
/tmp
117 # Move /var/run out of the way
118 if [ -d /var
/run
]; then
119 # blow away any _run_ in case it exists as well
120 if [ -e /var
/_run_
]; then
121 chflags
-R -P 0 /var
/_run_
124 mv /var
/run
/var
/_run_
128 mkdir -m 775 /var
/run
129 mkdir -m 775 /var
/run
/StartupItems
/var
/run
/davlocks
130 mkdir -m 755 /var
/run
/proxy
131 chown root
:daemon
/var
/run
/var
/run
/StartupItems
132 chown www
:www
/var
/run
/proxy
/var
/run
/davlocks
134 # Move sudo back to /var/run, touch the contents of /var/run/sudo/* back to the epoch
135 if [ -d /var
/_run_
/sudo
]; then
136 mv /var
/_run_
/sudo
/var
/run
/sudo
137 touch -t 198501010000 /var
/run
/sudo
/*
140 # Clear utmp (who is logged on).
141 touch /var
/run
/utmp
/var
/run
/utmpx
143 # purge the _run_ directory if it exists
144 if [ -d /var
/_run_
]; then
145 chflags
-R -P 0 /var
/_run_
146 RMRF_ITEMS
="$RMRF_ITEMS /var/_run_"
149 # Clear /var/spool/lock
150 if [ -d /var
/spool
/lock
]; then
151 find /var
/spool
/lock
-not -type d
-print0 | xargs -0 rm -f
155 # if "/Desktop Folder" exists and has contents, make sure there is a
156 # "/Desktop (Mac OS 9)" symlink to it
157 # if "/Desktop Folder" does not exist, exists but has no contents, or exists
158 # and has only a single file, ".DS_Store" then there should be no
159 # "/Desktop (Mac OS 9)" symlink
160 # if there is some other file or directory with the name "/Desktop (Mac OS 9)"
163 if [ -d "/Desktop Folder" ]; then
164 needlink
=$(ls -a1 "/Desktop Folder" | wc -l)
165 if [ "${needlink}" -eq 3 ]; then
166 if [ -f "/Desktop Folder/.DS_Store" ]; then
172 if [ "${needlink}" -lt 3 ]; then
173 if [ -h "/Desktop (Mac OS 9)" ]; then
174 rm -f "/Desktop (Mac OS 9)"
177 if ! [ -e "/Desktop (Mac OS 9)" ]; then
178 ln -s "/Desktop Folder" "/Desktop (Mac OS 9)"
182 echo "Starting virtual memory"
184 swapdir
=/private
/var
/vm
185 if [ "${NetBoot}" = "-N" ]; then
186 sh
/etc
/rc.netboot setup_vm
${swapdir}
189 if [ ! -d ${swapdir} ]; then
190 echo "Creating default swap directory"
191 mkdir -p -m 755 ${swapdir}
192 chown root
:wheel
${swapdir}
194 RMRF_ITEMS
="${RMRF_ITEMS} ${swapdir}/swap*"
197 echo Removing
$RMRF_ITEMS
200 if [ ${ENCRYPTSWAP:=-NO-} = "-YES-" ]; then
205 /sbin
/dynamic_pager
${encryptswap} -F ${swapdir}/swapfile
207 appprofiledir
=/private
/var
/vm
/app_profile
209 if [ ! -d ${appprofiledir} ]; then
210 if [ -f ${appprofiledir} ]; then
211 mv -f ${appprofiledir} "${appprofiledir}_"
213 mkdir -p -m 711 ${appprofiledir}
214 chown root
:wheel
${appprofiledir}
217 # Create mach symbol file
218 sysctl
-n kern.symfile
219 if [ -f /mach.sym
]; then
220 ln -sf /mach.sym
/mach
222 ln -sf /mach_kernel
/mach
225 if [ "${SafeBoot}" = "-x" ]; then
226 echo "Configuring kernel extensions for safe boot"
227 touch /private
/tmp
/.SafeBoot
230 echo "Configuring kernel extensions"
234 if [ "${SafeBoot}" != "-x" -a -x "${BootCacheControl}" ]; then
235 ${BootCacheControl} tag
238 # Create local NetInfo database if it doesn't exist
239 if [ ! -d /var
/db
/netinfo
/local.nidb
]; then
240 echo "Creating local NetInfo database"
241 mkdir -p /var
/db
/netinfo
242 /usr
/libexec
/create_nidb
243 rm -f /var
/db
/.AppleSetupDone
246 if [ -f /etc
/security
/rc.audit
]; then
247 .
/etc
/security
/rc.audit
250 if [ -f /Library
/Preferences
/com.apple.sharing.firewall.plist
]; then
251 /usr
/libexec
/FirewallTool
254 # Load [ideally on demand] daemons
255 if [ "${SafeBoot}" = "-x" ]; then
256 launchctl load
/System
/Library
/LaunchDaemons
/etc
/mach_init.d
258 launchctl load
/Library
/LaunchDaemons
/System
/Library
/LaunchDaemons
/etc
/mach_init.d
259 SystemStarter
${VerboseFlag}
264 if [ "${NetBoot}" = "-N" ]; then
265 sh
/etc
/rc.netboot setup_computername
268 # Set language from CDIS.custom - assumes this is parse-able by sh
269 if [ -f /var
/log
/CDIS.custom
]; then
270 .
/var
/log
/CDIS.custom
273 # Start the Language Chooser. This code should be able to go away as far as I
274 # know once loginwindow becomes more dynamic.
275 STARTPBS
="/System/Library/CoreServices/pbs" # apps stall w/o
276 BUDDYCOOKIE
="/var/db/.AppleSetupDone"
277 LCACOOKIE
="/var/db/.RunLanguageChooserToo"
278 STARTLCA
="/System/Library/CoreServices/Language Chooser.app/Contents/MacOS/Language Chooser"
280 if [ -x "$STARTLCA" -a -x "$STARTPBS" -a ! -f "$BUDDYCOOKIE" -a -f "$LCACOOKIE" ]; then
284 kill $pbspid # XSelect does this independently
287 if [ ! -s "/var/log/CDIS.custom" ]; then
288 echo "Language Chooser seems to have failed; defaulting to English"
289 echo "LANGUAGE=English" > "/var/log/CDIS.custom"
294 if [ -f /etc
/rc.
local ]; then
298 touch /var
/run
/.systemStarterRunning
300 if [ "${VerboseFlag}" != "-v" ] ; then
301 /usr
/libexec
/WaitingForLoginWindow