aboutsummaryrefslogtreecommitdiffstats
path: root/data/system/boot/Bootscript
blob: 04a73bf6e62f748d6afc629183f5980bee024e7e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
## The system's main boot script.

##
## Some functions used by the main script
##

# launch <executable path> [ <thread to wait for> [ <program args> ] ]

launch() {
	toLaunch="$1"
	shift
	toWaitFor="$1"
	(( $# )) && shift
	if [ -f "/boot/$toLaunch" ]
	then
		"/boot/$toLaunch" $* &
		[ "$toWaitFor" != "" ] && waitfor "$toWaitFor"
		return 1
	else
		echo There is no "$toLaunch"
	fi
	return 0
}

# launchscript <script path>

launchscript() {
	if [ -f "/boot/$1" ]
	then
		. "/boot/$1"
	fi
}

# runprog <executable path>

runprog() {
	if [ -f "/boot/$1" ]
	then
		"/boot/$1"
		return 1
	else
		echo There is no "$1"
	fi
	return 0
}

##
## Main script starts here
##

# Set up stdin/out/err to nirvana

exec </dev/null
exec >/dev/null 2>&1

# Standard locations of boot files
SCRIPTS=system/boot
SERVERS=system/servers

# clean the shared memory dir
shmDir=/var/shared_memory
rm -rf $shmDir
mkdir -p $shmDir
chmod 777 $shmDir

# Set up the environment

export SAFEMODE=`/bin/safemode`

launchscript $SCRIPTS/SetupEnvironment

# If the boot volume is a CD we use another script
isReadOnly=`/bin/isvolume -readonly-partition /boot`
if [ "$isReadOnly" = "yes" ]; then
	# block the CD tray (avoid accidental ejection)
	# This option stays 'on' even if we continue booting to the desktop.
	/bin/eject -b /boot
else
	# Sets timezone etc.
	runprog system/bin/clockconfig
fi

# Create /tmp dir, and make sure it's empty

TMPDIR=/boot/common/cache/tmp
if [ ! -d $TMPDIR ]; then
	mkdir -f $TMPDIR
	chmod a+rwx $TMPDIR
else
	rm -rf $TMPDIR/*
fi


# Launch servers

# We must wait for the app_server and registrar to be ready
launch $SERVERS/registrar _roster_thread_	# launch registrar

launch $SERVERS/debug_server				# launch debug_server

# Init Network
if [ "$SAFEMODE" != "yes" ]; then
	launch $SERVERS/net_server				# launch net_server
fi

launch $SERVERS/app_server picasso		# launch app_server

if [ "$SAFEMODE" != "yes" ]; then
	launch $SERVERS/syslog_daemon
	waitfor _input_server_event_loop_		# wait for input devices
fi

# Now ask the user if he wants to run the Installer or continue to the Desktop.
if [ "$isReadOnly" = "yes" ]; then
	# Create Installer link (using the write overlay)
	ln -sf /boot/system/apps/Installer /boot/home/Desktop/Installer

	/bin/ReadOnlyBootPrompt
	if [ $? -eq 0 ]; then
		launchscript $SCRIPTS/Bootscript.cd
		exit 0 # and return
	fi
fi


if [ -e /etc/users ]; then
	# TODO: system/Login needs to be fixed to launch the mount_server!
	launch system/Login
	# nothing more
else
	cd /boot/home

	launch $SERVERS/mount_server
	waitfor -m application/x-vnd.Haiku-mount_server
	# delay the boot script until all previous volumes have been mounted
	hey -s mount_server DO InitialScan

	launch system/Tracker
	launch system/Deskbar
fi

if [ "$SAFEMODE" != "yes" ]; then
	launch $SERVERS/media_server
	launch $SERVERS/midi_server
fi

# Launch Print Server
if [ "$SAFEMODE" != "yes" ]; then
	launch $SERVERS/print_server
fi

# Launch Mail Daemon (if enabled on startup)
if [ "$SAFEMODE" != "yes" ]; then
	launch $SERVERS/mail_daemon "" -E
fi

# Launch CDDB Daemon
if [ "$SAFEMODE" != "yes" ]; then
	launch $SERVERS/cddb_daemon ""
fi

# Launch Notification Server
if [ "$SAFEMODE" != "yes" ]; then
	launch $SERVERS/notification_server ""
fi

# Launch Power Daemon
if [ "$SAFEMODE" != "yes" ]; then
	launch $SERVERS/power_daemon ""
fi

# Check for daylight saving time
launch system/bin/dstcheck

# Synchronize network time
launch system/preferences/Time "" --update

if [ "$SAFEMODE" != "yes" ]; then
	# Start user boot script
	if [ -f $HOME/config/boot/UserBootscript ]; then
		. $HOME/config/boot/UserBootscript
	fi
fi

# Check for fresh install and run post install scripts.
postInstallDir=/boot/common/boot/post_install
freshInstallIndicator=/boot/common/settings/fresh_install
if [ -e $freshInstallIndicator ]; then
	# wait a moment for things to calm down a bit
	sleep 3

	# execute scripts
	for f in $postInstallDir/*.sh; do
		if [ -f $f ]; then
			echo "Running post install script $f ..." > /dev/dprintf
			$f
		fi
	done

	sync
	rm $freshInstallIndicator
fi