Project

General

Profile

Download (9.89 KB) Statistics
| Branch: | Tag: | Revision:
1 5b237745 Scott Ullrich
#!/usr/local/bin/php -f
2
<?php
3 1b8df11b Bill Marquette
/* $Id$ */
4 5b237745 Scott Ullrich
/*
5
	rc.bootup
6 e5cd29a0 Scott Ullrich
	part of pfSense by Scott Ullrich
7
	originally based on m0n0wall (http://m0n0.ch/wall)
8 70045f5f Scott Ullrich
	Copyright (C) 2004-2009 Scott Ullrich <sullrich@pfsense.org>.
9 5b237745 Scott Ullrich
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
10 745188c8 Scott Ullrich
	Copyright (C) 2009 Erik Kristensen
11 5b237745 Scott Ullrich
	All rights reserved.
12 e5cd29a0 Scott Ullrich
13 5b237745 Scott Ullrich
	Redistribution and use in source and binary forms, with or without
14
	modification, are permitted provided that the following conditions are met:
15 e5cd29a0 Scott Ullrich
16 5b237745 Scott Ullrich
	1. Redistributions of source code must retain the above copyright notice,
17
	   this list of conditions and the following disclaimer.
18 e5cd29a0 Scott Ullrich
19 5b237745 Scott Ullrich
	2. Redistributions in binary form must reproduce the above copyright
20
	   notice, this list of conditions and the following disclaimer in the
21
	   documentation and/or other materials provided with the distribution.
22 e5cd29a0 Scott Ullrich
23 5b237745 Scott Ullrich
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
24
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
25
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
27
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
	POSSIBILITY OF SUCH DAMAGE.
33
*/
34
35 6cc9e241 Scott Ullrich
function rescue_detect_keypress() {
36
	// How long do you want the script to wait before moving on (in seconds)
37 1e4e8458 Scott Ullrich
	$timeout=9;
38 41d07e42 Scott Ullrich
	echo "\n";
39 6c616b93 Scott Ullrich
    echo "[ Press R to enter recovery mode or ]\n";
40
	echo "[  press I to launch the installer  ]\n\n";
41 1e4e8458 Scott Ullrich
	echo "(R)ecovery mode can assist by rescuing config.xml\n";
42 e5a06994 Scott Ullrich
	echo "from a broken hard disk installation, etc.\n\n";
43 1e4e8458 Scott Ullrich
	echo "Alternatively the (I)nstaller may be invoked now if you do \n";
44 5b051819 Scott Ullrich
	echo "not wish to boot into the liveCD environment at this time.\n\n";
45 1e4e8458 Scott Ullrich
	echo "Timeout before auto boot continues (seconds): {$timeout}";
46 6cc9e241 Scott Ullrich
	$key = null;
47 1e4e8458 Scott Ullrich
	exec("/bin/stty erase " . chr(8));
48 68235416 Scott Ullrich
	while(!in_array($key, array("r","R", "i", "I", "~", "!"))) {
49 1e4e8458 Scott Ullrich
	        echo chr(8) . "{$timeout}";
50 e5a06994 Scott Ullrich
	        `/bin/stty -icanon min 0 time 25`;
51 6cc9e241 Scott Ullrich
	        $key = trim(`KEY=\`dd count=1 2>/dev/null\`; echo \$KEY`);
52 2eeb1781 Scott Ullrich
	        `/bin/stty icanon`;
53 6cc9e241 Scott Ullrich
	        // Decrement our timeout value
54
	        $timeout--;
55
	        // If we have reached 0 exit and continue on
56 70045f5f Scott Ullrich
	        if ($timeout == 0) 
57
				break;
58 6cc9e241 Scott Ullrich
	}
59 540bd313 Scott Ullrich
	// If R or I was pressed do our logic here
60 70045f5f Scott Ullrich
	if (in_array($key, array("r", "R"))) {
61 68235416 Scott Ullrich
	  putenv("TERM=cons25");
62
	  echo "\n\nRecovery mode selected...\n";
63 f98d3d65 Scott Ullrich
	  passthru("/usr/bin/env TERM=cons25 /bin/tcsh -c /scripts/lua_installer_rescue");
64 d5116ed5 Scott Ullrich
	} elseif (in_array($key, array("i", "I"))) {
65 68235416 Scott Ullrich
	  putenv("TERM=cons25");  
66
	  echo "\n\nInstaller mode selected...\n";
67 f98d3d65 Scott Ullrich
	  passthru("/usr/bin/env TERM=cons25 /bin/tcsh -c /scripts/lua_installer");
68 c1da5030 Scott Ullrich
	  if(file_exists("/tmp/install_complete")) {
69 f98d3d65 Scott Ullrich
		passthru("/etc/rc.reboot");
70 c1da5030 Scott Ullrich
		exit;
71
	  }
72
	} elseif (in_array($key, array("!", "~"))) {
73 68235416 Scott Ullrich
 		putenv("TERM=cons25");
74
		echo "\n\nRecovery shell selected...\n";
75 6c616b93 Scott Ullrich
		echo "\n";
76 c1da5030 Scott Ullrich
		touch("/tmp/donotbootup");
77
		exit;
78 01ef30e9 Scott Ullrich
	} else {
79
		echo "\n\n";
80 745188c8 Scott Ullrich
	}
81 6cc9e241 Scott Ullrich
}
82
83
echo " done.\n";
84
85
echo "Initializing...";
86
echo ".";
87
require_once("/etc/inc/globals.inc");
88 483e6de8 Scott Ullrich
echo ".";
89 00a4146e jim-p
require_once("/etc/inc/led.inc");
90
led_normalize();
91 483e6de8 Scott Ullrich
echo ".";
92 00a4146e jim-p
if (led_count() >= 3) {
93
	led_kitt();
94
}
95 483e6de8 Scott Ullrich
96 6cc9e241 Scott Ullrich
/* let the other functions know we're booting */
97
$pkg_interface = 'console';
98 410cdac4 Scott Ullrich
$g['booting'] = true;
99 6cc9e241 Scott Ullrich
touch("{$g['varrun_path']}/booting");
100
if($g['platform'] == "cdrom") {
101
	$motd = trim(file_get_contents("/etc/motd"));
102
	if (strlen($motd) > 2) 
103
		echo "\n{$motd}\n\n";
104
}
105
106
/* parse the configuration and include all functions used below */
107
require_once("/etc/inc/config.inc");
108
echo ".";
109
require_once("/etc/inc/functions.inc");
110 62d93213 Scott Ullrich
echo ".";
111 5f2d078e Scott Ullrich
require("/etc/inc/filter.inc");
112
echo ".";
113
require("/etc/inc/shaper.inc");
114
echo ".";
115 483e6de8 Scott Ullrich
require_once("/etc/inc/ipsec.inc");
116
echo ".";
117
require_once("/etc/inc/vpn.inc");
118
echo ".";
119 5f2d078e Scott Ullrich
require_once("/etc/inc/openvpn.inc");
120 62d93213 Scott Ullrich
echo ".";
121 483e6de8 Scott Ullrich
require_once("/etc/inc/captiveportal.inc");
122
echo ".";
123
require_once("/etc/inc/rrd.inc");
124
echo ".";
125 62d93213 Scott Ullrich
126 6cc9e241 Scott Ullrich
/* get system memory amount */
127
$memory = get_memory();
128
$avail = $memory[0];
129
echo " done.\n";
130
131
conf_mount_rw();
132
133
/* remove previous firmware upgrade if present */
134
if (file_exists("/root/firmware.tgz")) 
135
	unlink("/root/firmware.tgz");
136
137
/* start devd (dhclient now uses it */
138
echo "Starting device manager (devd)...";
139
mute_kernel_msgs();
140
start_devd();
141
set_device_perms();
142
unmute_kernel_msgs();
143
echo "done.\n";
144
145
// Display rescue configuration option
146
if($g['platform'] == "cdrom") 
147
		rescue_detect_keypress();
148
149 d5116ed5 Scott Ullrich
echo "Loading configuration...";
150
parse_config_bootup();
151
echo "done.\n";
152
153 6cc9e241 Scott Ullrich
$lan_if = $config['interfaces']['lan']['if'];
154
$wan_if = get_real_interface();
155
156
/*
157
 *  Determine if we need to throw a interface exception
158
 *  and ask the user to reassign interfaces.  This will
159
 *  avoid a reboot and thats a good thing.
160
 */
161
unmute_kernel_msgs();
162
while(is_interface_mismatch() == true) {
163
	echo "\nNetwork interface mismatch -- Running interface assignment option.\n";
164
	set_networking_interfaces_ports();
165
}
166
167
/* convert config and clean backups */
168
echo "Updating configuration...";
169
convert_config();
170
echo "done.\n";
171
172
echo "Cleaning backup cache...";
173
cleanup_backupcache(true);
174
echo "done.\n";
175
176
/* read in /etc/sysctl.conf and set values if needed */
177
echo "Setting up extended sysctls...";
178
system_setup_sysctl();
179
echo "done.\n";
180
181 09f18f59 jim-p
/* enable glxsb if wanted */
182
load_glxsb();
183
184 6cc9e241 Scott Ullrich
/* run any early shell commands specified in config.xml */
185
system_do_shell_commands(1);
186 ef0090a3 Scott Ullrich
187 6cc9e241 Scott Ullrich
/* save dmesg output to file */
188
system_dmesg_save();
189 ef0090a3 Scott Ullrich
190 6cc9e241 Scott Ullrich
/* set up our timezone */
191
system_timezone_configure();
192
193
/* set up our hostname */
194
system_hostname_configure();
195
196
/* make hosts file */
197
system_hosts_generate();
198
199
/* configure loopback interface */
200
interfaces_loopback_configure();
201
202
/* start syslogd */
203
system_syslogd_start();
204
205
/* set up interfaces */
206
if(!$debugging)
207 70b89814 Scott Ullrich
	mute_kernel_msgs();
208 6cc9e241 Scott Ullrich
interfaces_configure();
209
if(!$debugging)
210 70b89814 Scott Ullrich
	unmute_kernel_msgs();
211 86ddbb71 Scott Ullrich
212 6cc9e241 Scott Ullrich
/* generate resolv.conf */
213
system_resolvconf_generate();
214 aa01f2f2 Scott Ullrich
215 2fd9d050 Scott Ullrich
/* setup altq + pf */
216
filter_configure_sync();
217
218 6cc9e241 Scott Ullrich
/* start pflog */
219
echo "Starting PFLOG...";
220
filter_pflog_start();
221
echo "done.\n";
222 d0e94aaf Scott Ullrich
223 6cc9e241 Scott Ullrich
/* start load balancer daemon */
224
relayd_configure();
225 e5cd29a0 Scott Ullrich
226 5e7d127a Scott Ullrich
	/* reconfigure our gateway monitor */
227 6cc9e241 Scott Ullrich
echo "Setting up gateway monitors...";
228 5e7d127a Scott Ullrich
	setup_gateways_monitor();
229 6cc9e241 Scott Ullrich
echo "done.\n";
230 d0e94aaf Scott Ullrich
231 6cc9e241 Scott Ullrich
/* start OpenVPN server & clients */
232
echo "Syncing OpenVPN settings...";
233
openvpn_resync_all();
234
echo "done.\n";
235 e5cd29a0 Scott Ullrich
236 6cc9e241 Scott Ullrich
if($avail > 0 and $avail < 65) {
237
	echo "System has less than 65 megabytes of ram {$avail}.  Delaying webConfigurator startup.\n";
238
	/* start webConfigurator up on final pass */
239
	touch("/tmp/restart_webgui");
240
} else {
241
	/* start web server */
242
	system_webgui_start();
243
}
244 ef9366bd Scott Ullrich
245 6cc9e241 Scott Ullrich
/* configure cron service */
246
echo "Configuring CRON...";
247
configure_cron();
248
echo "done.\n";
249 68cd47b3 Scott Ullrich
250 6cc9e241 Scott Ullrich
/* set up static routes */
251
system_routing_configure();
252 d0e94aaf Scott Ullrich
253 6cc9e241 Scott Ullrich
/* enable routing */
254
system_routing_enable();
255 e5cd29a0 Scott Ullrich
256 5cd26039 Ermal Lu?i
echo "Starting Secure Shell Services...";
257
mwexec_bg("/etc/sshd");
258
echo "done.\n";
259
260 6cc9e241 Scott Ullrich
/* configure console menu */
261
system_console_configure();
262 a005424e Scott Ullrich
263 6cc9e241 Scott Ullrich
/* start the NTP client */
264
echo "Starting OpenNTP time client...";
265
system_ntp_configure();
266
echo "done.\n";
267 5ffb18e0 Scott Ullrich
268 6cc9e241 Scott Ullrich
/* Launch on bootup and keep trying to sync.  Exit once time/date has been sync'd. */
269
mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh");
270 5b237745 Scott Ullrich
271 6cc9e241 Scott Ullrich
/* start dyndns service */
272
services_dyndns_configure();
273 3d941d72 Scott Ullrich
274 6cc9e241 Scott Ullrich
/* static IP address? -> attempt DNS update */
275
if (is_ipaddr($config['interfaces']['wan']['ipaddr']))
276
	services_dnsupdate_process();
277 e5cd29a0 Scott Ullrich
278 6cc9e241 Scott Ullrich
/* start dnsmasq service */
279
services_dnsmasq_configure();
280 e5cd29a0 Scott Ullrich
281 6cc9e241 Scott Ullrich
/* start DHCP relay */
282
services_dhcrelay_configure();
283 562fca6d Scott Ullrich
284 6cc9e241 Scott Ullrich
/* setup pppoe and pptp */
285
vpn_setup();
286 c6e604d8 Scott Ullrich
287 6cc9e241 Scott Ullrich
/* start the captive portal */
288
captiveportal_configure();
289 f4959a69 Scott Ullrich
290 336e3c1c Charlie
/* start Voucher support */
291
require_once("voucher.inc");
292
voucher_configure();
293
294 6cc9e241 Scott Ullrich
/* run any shell commands specified in config.xml */
295
system_do_shell_commands();
296 9f966bc9 Scott Ullrich
297 6cc9e241 Scott Ullrich
/* setup polling */
298
setup_polling();
299 f4959a69 Scott Ullrich
300 6cc9e241 Scott Ullrich
/* setup interface microcode which improves tcp/ip speed */
301
echo "Setting up microcode and tx/rx offloading...";
302
setup_microcode();
303
echo "done.\n";
304 d0e94aaf Scott Ullrich
305 6cc9e241 Scott Ullrich
/* start IPsec tunnels */
306
vpn_ipsec_configure();
307 a199b93e Scott Ullrich
308 6cc9e241 Scott Ullrich
/* start SNMP service */
309
services_snmpd_configure();
310 11cbd478 Scott Ullrich
311 6cc9e241 Scott Ullrich
/* power down hard drive if needed/set */
312
system_set_harddisk_standby();
313 011bff69 Bill Marquette
314 6cc9e241 Scott Ullrich
/* lock down console if necessary */
315
if(isset($config['system']['disableconsolemenu']))
316
	touch("/var/etc/console_lockdown");
317 d0e94aaf Scott Ullrich
318 6cc9e241 Scott Ullrich
/* Run a filter configure now that most all services have started */
319
filter_configure_sync();
320 6d80ad3a Scott Ullrich
321 6cc9e241 Scott Ullrich
/* load graphing functions */
322
enable_rrd_graphing();
323
324
/* start DHCP service */
325
services_dhcpd_configure();
326
327
/* startup OLSR if needed */
328
setup_wireless_olsr();
329
330
/* startup routed if needed */
331
include_once("/usr/local/pkg/routed/routed.inc");
332
setup_routed();
333
334
/* enable watchdog if supported */
335
enable_watchdog();
336
337
/* if <system><afterbootupshellcmd> exists, execute the command */
338
if($config['system']['afterbootupshellcmd'] <> "") {
339
	echo "Running afterbootupshellcmd {$config['system']['afterbootupshellcmd']}\n";
340
	mwexec($config['system']['afterbootupshellcmd']);
341
}
342
343
if($avail < 126) {
344
	require_once("/etc/inc/notices.inc");
345
	file_notice("{$g['product_name']}MemoryRequirements", "{$g['product_name']} requires atleast 128 megabytes of RAM.  Expect unusual performance.  This platform is not supported.", "Memory", "", 1);
346
	mwexec("sysctl net.inet.tcp.recvspace=4096");
347
	mwexec("sysctl net.inet.tcp.sendspace=4096");
348
}
349
350
/* if we are operating at 1000 then increase timeouts.
351
   this was never accounted for after moving to 1000 hz */
352
$kern_hz = `sysctl kern.clockrate | awk '{ print $5 }' | cut -d"," -f1`;
353
$kern_hz = trim($kern_hz, "\r\n");
354
if($kern_hz == "1000") 
355
	mwexec("sysctl net.inet.tcp.rexmit_min=30");
356 c108ec01 Scott Ullrich
357 34c7f02e Scott Ullrich
/* start the igmpproxy daemon */
358 6cc9e241 Scott Ullrich
services_igmpproxy_configure();
359 41997fbb Ermal Luci
360 6cc9e241 Scott Ullrich
/* start the upnp daemon if it is enabled */
361
upnp_start();
362 6f20377b Scott Ullrich
363 6cc9e241 Scott Ullrich
/* If powerd is enabled, lets launch it */
364
activate_powerd();
365 8e9fa41d Scott Ullrich
366 6cc9e241 Scott Ullrich
mwexec_bg("/usr/sbin/update_dns_cache.sh");
367 31381202 Scott Ullrich
368 6cc9e241 Scott Ullrich
/* done */
369
unlink("{$g['varrun_path']}/booting");
370 27556fa9 Scott Ullrich
unset($g['booting']);
371 5c60c947 Scott Ullrich
372 00a4146e jim-p
led_normalize();
373 410cdac4 Scott Ullrich
374
?>