]> git.saurik.com Git - apple/launchd.git/blame - launchd/src/rc
launchd-106.13.tar.gz
[apple/launchd.git] / launchd / src / rc
CommitLineData
e91b9f68
A
1#!/bin/sh
2# Copyright 1997-2004 Apple Computer, Inc.
3
4. /etc/rc.common
5
6export -n SafeBoot
7export -n VerboseFlag
8export -n FsckSlash
9export -n NetBoot
10
11if [ -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"
15 halt
16fi
17
18if [ "${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...
22 sleep 10
23 halt
24 fi
25fi
26
27if [ "${FsckSlash}" = "-F" ]; then
28 # Benignly clean up ("preen") any dirty filesystems.
29 # fsck -p will skip disks which were properly unmounted during
30 # a normal shutdown.
31 echo "Checking disk"
32 if [ "${SafeBoot}" = "-x" ]; then
33 fsck -fy || halt
34 else
35 fsck -p || fsck -fy || halt
36 fi
37fi
38
39echo "Mounting local filesystems"
40mount -uw /
41[ -f /etc/fstab ] && mount -vat nonfs
42
43BootCacheControl=/System/Library/Extensions/BootCache.kext/Contents/Resources/BootCacheControl
44if [ ! -f $BootCacheControl ]; then
45 BootCacheControl=/usr/sbin/BootCacheControl
46fi
47if [ "${SafeBoot}" != "-x" -a -x "${BootCacheControl}" ]; then
48 ${BootCacheControl} start
49fi
50
51if [ -f /etc/sysctl-macosxserver.conf ]; then
52 awk '{ if (!index($1, "#") && index($1, "=")) print $1 }' < /etc/sysctl-macosxserver.conf | while read
53 do
54 sysctl -w ${REPLY}
55 done
56fi
57if [ -f /etc/sysctl.conf ]; then
58 awk '{ if (!index($1, "#") && index($1, "=")) print $1 }' < /etc/sysctl.conf | while read
59 do
60 sysctl -w ${REPLY}
61 done
62fi
63
64sysctl -w kern.sysv.shmmax=4194304 kern.sysv.shmmin=1 kern.sysv.shmmni=32 kern.sysv.shmseg=8 kern.sysv.shmall=1024
65
66if [ -f /var/account/acct ]; then
67 accton /var/account/acct
68fi
69
e91b9f68
A
70echo "Resetting files and devices"
71
72RMRF_ITEMS="/mach.sym /var/tmp/folders.*"
73##
74# Attempt to recover the passwd file, if needed. This procedure is
75# primarily historical and makes sense only when the passwd file is edited
76# using the vipw command.
77##
78if [ -s /etc/ptmp ]; then
79 if [ -s /etc/passwd ]; then
80 echo -n "Passwd file conflict with ptmp: "
81 ls -l /etc/passwd /etc/ptmp
82 echo "Moving ptmp to ptmp.save"
83 mv -f /etc/ptmp /etc/ptmp.save
84 else
85 echo "Passwd file recovered from ptmp"
86 mv /etc/ptmp /etc/passwd
87 fi
88elif [ -r /etc/ptmp ]; then
89 echo "Removing passwd lock file"
90 RMRF_ITEMS="$RMRF_ITEMS /etc/ptmp"
91fi
92
93##
94# If the shutdown command was used to shut the system down, the file
95# /etc/nologin may have been created to prevent users from logging in.
96# Remove it so that logins are enabled when the system comes up.
97##
98RMRF_ITEMS="$RMRF_ITEMS /etc/nologin"
99
100# Clean out /private/tmp.
101if [ -d /private/tmp ]; then
102 # blow away any _tmp_ in case it exists as well
103 if [ -e /private/_tmp_ ]; then
104 chflags -R -P 0 /private/_tmp_
105 rm -rf /private/_tmp_
106 fi
107 mv /private/tmp /private/_tmp_
108 chflags -R -P 0 /private/_tmp_
109 RMRF_ITEMS="$RMRF_ITEMS /private/_tmp_"
110fi
111mkdir -p -m 01777 /private/var/tmp /private/tmp
112
113# Move /var/run out of the way
114if [ -d /var/run ]; then
115 # blow away any _run_ in case it exists as well
116 if [ -e /var/_run_ ]; then
117 chflags -R -P 0 /var/_run_
118 rm -rf /var/_run_
119 fi
120 mv /var/run /var/_run_
121fi
122
123# Make new /var/run
124mkdir -m 775 /var/run
125mkdir -m 775 /var/run/StartupItems /var/run/davlocks
126mkdir -m 755 /var/run/proxy
127chown root:daemon /var/run /var/run/StartupItems
128chown www:www /var/run/proxy /var/run/davlocks
129
130# Move sudo back to /var/run, touch the contents of /var/run/sudo/* back to the epoch
131if [ -d /var/_run_/sudo ]; then
132 mv /var/_run_/sudo /var/run/sudo
133 touch -t 198501010000 /var/run/sudo/*
134fi
135
136# Clear utmp (who is logged on).
137touch /var/run/utmp /var/run/utmpx
138
139# purge the _run_ directory if it exists
140if [ -d /var/_run_ ]; then
141 chflags -R -P 0 /var/_run_
142 RMRF_ITEMS="$RMRF_ITEMS /var/_run_"
143fi
144
145# Clear /var/spool/lock
146if [ -d /var/spool/lock ]; then
147 find /var/spool/lock -not -type d -print0 | xargs -0 rm -f
148fi
149
150
151# if "/Desktop Folder" exists and has contents, make sure there is a
152# "/Desktop (Mac OS 9)" symlink to it
153# if "/Desktop Folder" does not exist, exists but has no contents, or exists
154# and has only a single file, ".DS_Store" then there should be no
155# "/Desktop (Mac OS 9)" symlink
156# if there is some other file or directory with the name "/Desktop (Mac OS 9)"
157# then just exit
158needlink=0
159if [ -d "/Desktop Folder" ]; then
160 needlink=$(ls -a1 "/Desktop Folder" | wc -l)
161 if [ "${needlink}" -eq 3 ]; then
162 if [ -f "/Desktop Folder/.DS_Store" ]; then
163 needlink=0
164 fi
165 fi
166fi
167
168if [ "${needlink}" -lt 3 ]; then
169 if [ -h "/Desktop (Mac OS 9)" ]; then
170 rm -f "/Desktop (Mac OS 9)"
171 fi
172else
173 if ! [ -e "/Desktop (Mac OS 9)" ]; then
174 ln -s "/Desktop Folder" "/Desktop (Mac OS 9)"
175 fi
176fi
177
178echo "Starting virtual memory"
179
180swapdir=/private/var/vm
181if [ "${NetBoot}" = "-N" ]; then
182 sh /etc/rc.netboot setup_vm ${swapdir}
183fi
184
185if [ ! -d ${swapdir} ]; then
186 echo "Creating default swap directory"
187 mkdir -p -m 755 ${swapdir}
188 chown root:wheel ${swapdir}
189else
190 RMRF_ITEMS="${RMRF_ITEMS} ${swapdir}/swap*"
191fi
192
193echo Removing $RMRF_ITEMS
194rm -rf $RMRF_ITEMS
195
196if [ ${ENCRYPTSWAP:=-NO-} = "-YES-" ]; then
197 encryptswap="-E"
198else
199 encryptswap=""
200fi
201/sbin/dynamic_pager ${encryptswap} -F ${swapdir}/swapfile
202
203appprofiledir=/private/var/vm/app_profile
204
205if [ ! -d ${appprofiledir} ]; then
206 if [ -f ${appprofiledir} ]; then
207 mv -f ${appprofiledir} "${appprofiledir}_"
208 fi
209 mkdir -p -m 711 ${appprofiledir}
210 chown root:wheel ${appprofiledir}
211fi
212
213# Create mach symbol file
214sysctl -n kern.symfile
215if [ -f /mach.sym ]; then
216 ln -sf /mach.sym /mach
217else
218 ln -sf /mach_kernel /mach
219fi
220
221if [ "${SafeBoot}" = "-x" ]; then
222 echo "Configuring kernel extensions for safe boot"
223 touch /private/tmp/.SafeBoot
224 kextd -x
225else
226 echo "Configuring kernel extensions"
227 kextd
228fi
229
2a27bb34
A
230if [ -f /etc/rc.installer_cleanup ]; then
231 /etc/rc.installer_cleanup multiuser
232fi
233
e91b9f68
A
234if [ "${SafeBoot}" != "-x" -a -x "${BootCacheControl}" ]; then
235 ${BootCacheControl} tag
236fi
237
238# Create local NetInfo database if it doesn't exist
239if [ ! -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
244fi
245
246if [ -f /etc/security/rc.audit ]; then
247 . /etc/security/rc.audit
248fi
249
250if [ -f /Library/Preferences/com.apple.sharing.firewall.plist ]; then
251 /usr/libexec/FirewallTool
252fi
253
254# Load [ideally on demand] daemons
e91b9f68 255if [ "${SafeBoot}" = "-x" ]; then
aa59983a 256 launchctl load /System/Library/LaunchDaemons /etc/mach_init.d
e91b9f68 257else
aa59983a 258 launchctl load /Library/LaunchDaemons /System/Library/LaunchDaemons /etc/mach_init.d
e91b9f68
A
259 SystemStarter ${VerboseFlag}
260fi
261
262/usr/sbin/update
263
264if [ "${NetBoot}" = "-N" ]; then
265 sh /etc/rc.netboot setup_computername
266fi
267
268# Set language from CDIS.custom - assumes this is parse-able by sh
269if [ -f /var/log/CDIS.custom ]; then
270 . /var/log/CDIS.custom
271fi
272
273# Start the Language Chooser. This code should be able to go away as far as I
274# know once loginwindow becomes more dynamic.
275STARTPBS="/System/Library/CoreServices/pbs" # apps stall w/o
276BUDDYCOOKIE="/var/db/.AppleSetupDone"
277LCACOOKIE="/var/db/.RunLanguageChooserToo"
278STARTLCA="/System/Library/CoreServices/Language Chooser.app/Contents/MacOS/Language Chooser"
279
280if [ -x "$STARTLCA" -a -x "$STARTPBS" -a ! -f "$BUDDYCOOKIE" -a -f "$LCACOOKIE" ]; then
281 "$STARTPBS" &
282 pbspid=$!
283 "$STARTLCA"
284 kill $pbspid # XSelect does this independently
285fi
286
287if [ ! -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"
290fi
291
292export LANGUAGE
293
294if [ -f /etc/rc.local ]; then
295 sh /etc/rc.local
296fi
297
298touch /var/run/.systemStarterRunning
299
300if [ "${VerboseFlag}" != "-v" ] ; then
301 /usr/libexec/WaitingForLoginWindow
302fi
303
304exit 0