Project

General

Profile

Download (12.6 KB) Statistics
| Branch: | Tag: | Revision:
1 5b237745 Scott Ullrich
#!/usr/local/bin/php -f
2
<?php
3 abb87c26 Ermal
ini_set('apc.enabled', '0');
4
5 1b8df11b Bill Marquette
/* $Id$ */
6 5b237745 Scott Ullrich
/*
7
	rc.bootup
8 e5cd29a0 Scott Ullrich
	part of pfSense by Scott Ullrich
9
	originally based on m0n0wall (http://m0n0.ch/wall)
10 70045f5f Scott Ullrich
	Copyright (C) 2004-2009 Scott Ullrich <sullrich@pfsense.org>.
11 5b237745 Scott Ullrich
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
12 745188c8 Scott Ullrich
	Copyright (C) 2009 Erik Kristensen
13 5b237745 Scott Ullrich
	All rights reserved.
14 e5cd29a0 Scott Ullrich
15 5b237745 Scott Ullrich
	Redistribution and use in source and binary forms, with or without
16
	modification, are permitted provided that the following conditions are met:
17 e5cd29a0 Scott Ullrich
18 5b237745 Scott Ullrich
	1. Redistributions of source code must retain the above copyright notice,
19
	   this list of conditions and the following disclaimer.
20 e5cd29a0 Scott Ullrich
21 5b237745 Scott Ullrich
	2. Redistributions in binary form must reproduce the above copyright
22
	   notice, this list of conditions and the following disclaimer in the
23
	   documentation and/or other materials provided with the distribution.
24 e5cd29a0 Scott Ullrich
25 5b237745 Scott Ullrich
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
26
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
27
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
29
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34
	POSSIBILITY OF SUCH DAMAGE.
35
*/
36
37 6cc9e241 Scott Ullrich
function rescue_detect_keypress() {
38
	// How long do you want the script to wait before moving on (in seconds)
39 1e4e8458 Scott Ullrich
	$timeout=9;
40 41d07e42 Scott Ullrich
	echo "\n";
41 6c616b93 Scott Ullrich
    echo "[ Press R to enter recovery mode or ]\n";
42
	echo "[  press I to launch the installer  ]\n\n";
43 1e4e8458 Scott Ullrich
	echo "(R)ecovery mode can assist by rescuing config.xml\n";
44 e5a06994 Scott Ullrich
	echo "from a broken hard disk installation, etc.\n\n";
45 055abc57 Scott Ullrich
	echo "(I)nstaller may be invoked now if you do \n";
46 efce1588 Scott Ullrich
	echo "not wish to boot into the liveCD environment at this time.\n\n";
47 22af75a3 Scott Ullrich
	echo "(C) continues the LiveCD bootup without further pause.\n\n";
48 1e4e8458 Scott Ullrich
	echo "Timeout before auto boot continues (seconds): {$timeout}";
49 6cc9e241 Scott Ullrich
	$key = null;
50 1e4e8458 Scott Ullrich
	exec("/bin/stty erase " . chr(8));
51 055abc57 Scott Ullrich
	while(!in_array($key, array("c", "C", "r","R", "i", "I", "~", "!"))) {
52 1e4e8458 Scott Ullrich
	        echo chr(8) . "{$timeout}";
53 e5a06994 Scott Ullrich
	        `/bin/stty -icanon min 0 time 25`;
54 6cc9e241 Scott Ullrich
	        $key = trim(`KEY=\`dd count=1 2>/dev/null\`; echo \$KEY`);
55 2eeb1781 Scott Ullrich
	        `/bin/stty icanon`;
56 6cc9e241 Scott Ullrich
	        // Decrement our timeout value
57
	        $timeout--;
58
	        // If we have reached 0 exit and continue on
59 70045f5f Scott Ullrich
	        if ($timeout == 0) 
60
				break;
61 6cc9e241 Scott Ullrich
	}
62 540bd313 Scott Ullrich
	// If R or I was pressed do our logic here
63 70045f5f Scott Ullrich
	if (in_array($key, array("r", "R"))) {
64 d4b1e549 Renato Botelho
	  putenv("TERM=cons25");
65 68235416 Scott Ullrich
	  echo "\n\nRecovery mode selected...\n";
66 d4b1e549 Renato Botelho
	  passthru("/usr/bin/env TERM=cons25 /bin/tcsh -c /scripts/lua_installer_rescue");
67 d5116ed5 Scott Ullrich
	} elseif (in_array($key, array("i", "I"))) {
68 d4b1e549 Renato Botelho
	  putenv("TERM=cons25");
69 68235416 Scott Ullrich
	  echo "\n\nInstaller mode selected...\n";
70 d4b1e549 Renato Botelho
	  passthru("/usr/bin/env TERM=cons25 /bin/tcsh -c /scripts/lua_installer");
71 c1da5030 Scott Ullrich
	  if(file_exists("/tmp/install_complete")) {
72 f98d3d65 Scott Ullrich
		passthru("/etc/rc.reboot");
73 c1da5030 Scott Ullrich
		exit;
74
	  }
75
	} elseif (in_array($key, array("!", "~"))) {
76 d4b1e549 Renato Botelho
		putenv("TERM=cons25");
77 68235416 Scott Ullrich
		echo "\n\nRecovery shell selected...\n";
78 6c616b93 Scott Ullrich
		echo "\n";
79 c1da5030 Scott Ullrich
		touch("/tmp/donotbootup");
80
		exit;
81 01ef30e9 Scott Ullrich
	} else {
82
		echo "\n\n";
83 745188c8 Scott Ullrich
	}
84 6cc9e241 Scott Ullrich
}
85
86
echo " done.\n";
87
88
echo "Initializing...";
89
echo ".";
90
require_once("/etc/inc/globals.inc");
91 483e6de8 Scott Ullrich
echo ".";
92 00a4146e jim-p
require_once("/etc/inc/led.inc");
93
led_normalize();
94 483e6de8 Scott Ullrich
echo ".";
95 00a4146e jim-p
if (led_count() >= 3) {
96
	led_kitt();
97
}
98 483e6de8 Scott Ullrich
99 6cc9e241 Scott Ullrich
/* let the other functions know we're booting */
100
$pkg_interface = 'console';
101 410cdac4 Scott Ullrich
$g['booting'] = true;
102 6cc9e241 Scott Ullrich
103
/* parse the configuration and include all functions used below */
104
require_once("/etc/inc/config.inc");
105
echo ".";
106 032c40c7 Scott Ullrich
require_once("/etc/inc/config.console.inc");
107
echo ".";
108 3066a36f Ermal Lu?i
require_once("/etc/inc/auth.inc");
109
echo ".";
110 6cc9e241 Scott Ullrich
require_once("/etc/inc/functions.inc");
111 62d93213 Scott Ullrich
echo ".";
112 1b1c179d jim-p
require_once("/etc/inc/filter.inc");
113 5f2d078e Scott Ullrich
echo ".";
114 1b1c179d jim-p
require_once("/etc/inc/shaper.inc");
115 5f2d078e Scott Ullrich
echo ".";
116 483e6de8 Scott Ullrich
require_once("/etc/inc/ipsec.inc");
117
echo ".";
118
require_once("/etc/inc/vpn.inc");
119
echo ".";
120 5f2d078e Scott Ullrich
require_once("/etc/inc/openvpn.inc");
121 62d93213 Scott Ullrich
echo ".";
122 483e6de8 Scott Ullrich
require_once("/etc/inc/captiveportal.inc");
123
echo ".";
124
require_once("/etc/inc/rrd.inc");
125
echo ".";
126 3ffa8318 Renato Botelho
require_once("/etc/inc/pfsense-utils.inc");
127
echo ".";
128 62d93213 Scott Ullrich
129 6cc9e241 Scott Ullrich
/* get system memory amount */
130
$memory = get_memory();
131 5517f604 Phil Davis
$physmem = $memory[0];
132
$realmem = $memory[1];
133 6cc9e241 Scott Ullrich
echo " done.\n";
134
135 63e18082 jim-p
conf_mount_rw();
136 6cc9e241 Scott Ullrich
137 7f039071 jim-p
/* save dmesg output to file */
138
system_dmesg_save();
139
140 7188fc6d Scott Ullrich
/* check whether config reset is desired (via hardware button on WRAP/ALIX) */
141
system_check_reset_button();
142
143 6cc9e241 Scott Ullrich
/* remove previous firmware upgrade if present */
144
if (file_exists("/root/firmware.tgz")) 
145
	unlink("/root/firmware.tgz");
146
147 de00c381 Phil Davis
/* start devd (dhclient now uses it) */
148 6cc9e241 Scott Ullrich
echo "Starting device manager (devd)...";
149
mute_kernel_msgs();
150
start_devd();
151
set_device_perms();
152
unmute_kernel_msgs();
153
echo "done.\n";
154
155
// Display rescue configuration option
156
if($g['platform'] == "cdrom") 
157
		rescue_detect_keypress();
158
159 d5116ed5 Scott Ullrich
echo "Loading configuration...";
160
parse_config_bootup();
161
echo "done.\n";
162
163 7734aea6 Andrew Thompson
if($g['platform'] == "jail") {
164
	/* We must determine what network settings have been configured for us */
165
	$wanif = "lo0";	/* defaults, if the jail admin hasn't set us up */
166
	$ipaddr = "127.0.0.1";
167
	$iflist = get_interface_list();
168
	foreach ($iflist as $iface => $ifa) {
169
		if (isset($ifa['ipaddr'])) {
170
			$wanif = $iface;
171
			$ipaddr = $ifa['ipaddr'];
172
			break;
173
		}
174
	}
175
	$config['interfaces'] = array();
176
	$config['interfaces']['lan'] = array();
177
	$config['interfaces']['lan']['enable'] = false;
178
	$config['interfaces']['wan'] = array();
179
	/* XXX, todo */
180
	$config['interfaces']['wan']['if'] = $wanif;
181
	$config['interfaces']['wan']['ipaddr'] = $ipaddr;
182
	$config['interfaces']['wan']['subnet'] = "32";	/* XXX right? */
183
	$config['interfaces']['wan']['enable'] = true;
184
	if($config['dhcpd']['lan']) 
185
		unset($config['dhcpd']['lan']['enable']);
186
	unlink_if_exists('/conf/trigger_initial_wizard');
187
	write_config();
188
} else {
189
	/*
190
	 *  Determine if we need to throw a interface exception
191
	 *  and ask the user to reassign interfaces.  This will
192
	 *  avoid a reboot and thats a good thing.
193
	 */
194
	while(is_interface_mismatch() == true) {
195
		led_assigninterfaces();
196 7852ce9b Erik Fonnesbeck
		if (isset($config['revision'])) {
197
			if (file_exists("{$g['tmp_path']}/missing_interfaces"))
198
				echo "Warning: Configuration references interfaces that do not exist: " . file_get_contents("{$g['tmp_path']}/missing_interfaces") . "\n";
199
			echo "\nNetwork interface mismatch -- Running interface assignment option.\n";
200
		} else
201
			echo "\nDefault interfaces not found -- Running interface assignment option.\n";
202 7734aea6 Andrew Thompson
		$ifaces = get_interface_list();
203
		if (is_array($ifaces)) {
204
			foreach($ifaces as $iface => $ifdata)
205
				interfaces_bring_up($iface);
206
		}
207
		set_networking_interfaces_ports();
208
		led_kitt();
209 7f8d463f Ermal
	}
210 6cc9e241 Scott Ullrich
}
211
212
/* convert config and clean backups */
213
echo "Updating configuration...";
214
convert_config();
215
echo "done.\n";
216
217
echo "Cleaning backup cache...";
218
cleanup_backupcache(true);
219
echo "done.\n";
220
221
/* read in /etc/sysctl.conf and set values if needed */
222
echo "Setting up extended sysctls...";
223
system_setup_sysctl();
224
echo "done.\n";
225
226 7530177c jim-p
/* enable optional crypto modules */
227
load_crypto();
228 09f18f59 jim-p
229 f60156f6 jim-p
/* enable optional thermal sensor modules */
230
load_thermal_hardware();
231
232 6cc9e241 Scott Ullrich
/* run any early shell commands specified in config.xml */
233
system_do_shell_commands(1);
234 ef0090a3 Scott Ullrich
235 6cc9e241 Scott Ullrich
/* set up our timezone */
236
system_timezone_configure();
237
238
/* set up our hostname */
239
system_hostname_configure();
240
241
/* make hosts file */
242
system_hosts_generate();
243
244
/* configure loopback interface */
245
interfaces_loopback_configure();
246
247 2b6f7508 smos
/* start syslogd */
248
system_syslogd_start();
249
250 b29d9c8e Ermal
echo "Starting Secure Shell Services...";
251 08b64f79 Ermal
send_event("service reload sshd");
252 b29d9c8e Ermal
echo "done.\n";
253
254 9a4c3eed Ermal
/* setup polling */
255
echo "Setting up polling defaults...";
256
setup_polling();
257
echo "done.\n";
258
259
/* setup interface microcode which improves tcp/ip speed */
260 7d6128e0 Ermal
echo "Setting up interfaces microcode...";
261 9a4c3eed Ermal
setup_microcode();
262
echo "done.\n";
263
264 6cc9e241 Scott Ullrich
/* set up interfaces */
265
if(!$debugging)
266 70b89814 Scott Ullrich
	mute_kernel_msgs();
267 6cc9e241 Scott Ullrich
interfaces_configure();
268
if(!$debugging)
269 70b89814 Scott Ullrich
	unmute_kernel_msgs();
270 86ddbb71 Scott Ullrich
271 4994b350 smos
/* re-make hosts file after configuring interfaces */
272
system_hosts_generate();
273
274 d09d53ac Ermal
/* start OpenVPN server & clients */
275
echo "Syncing OpenVPN settings...";
276
openvpn_resync_all();
277
echo "done.\n";
278
279 6cc9e241 Scott Ullrich
/* generate resolv.conf */
280
system_resolvconf_generate();
281 aa01f2f2 Scott Ullrich
282 2fd9d050 Scott Ullrich
/* setup altq + pf */
283
filter_configure_sync();
284
285 6cc9e241 Scott Ullrich
/* start pflog */
286
echo "Starting PFLOG...";
287
filter_pflog_start();
288
echo "done.\n";
289 d0e94aaf Scott Ullrich
290 17fdcb8d Ermal Lu?i
/* reconfigure our gateway monitor */
291 6cc9e241 Scott Ullrich
echo "Setting up gateway monitors...";
292 17fdcb8d Ermal Lu?i
setup_gateways_monitor();
293
echo "done.\n";
294
295
echo "Synchronizing user settings...";
296 24e61cce Ermal
local_sync_accounts();
297 6cc9e241 Scott Ullrich
echo "done.\n";
298 d0e94aaf Scott Ullrich
299 5517f604 Phil Davis
if($realmem > 0 and $realmem < 65) {
300
	echo "System has less than 65 megabytes of ram {$realmem}.  Delaying webConfigurator startup.\n";
301 6cc9e241 Scott Ullrich
	/* start webConfigurator up on final pass */
302 f3239b2d Chris Buechler
	mwexec("/usr/local/sbin/pfSctl -c 'service restart webgui'");
303 6cc9e241 Scott Ullrich
} else {
304
	/* start web server */
305
	system_webgui_start();
306
}
307 ef9366bd Scott Ullrich
308 6cc9e241 Scott Ullrich
/* configure cron service */
309
echo "Configuring CRON...";
310
configure_cron();
311
echo "done.\n";
312 68cd47b3 Scott Ullrich
313 6cc9e241 Scott Ullrich
/* set up static routes */
314
system_routing_configure();
315 d0e94aaf Scott Ullrich
316 6cc9e241 Scott Ullrich
/* enable routing */
317
system_routing_enable();
318 e5cd29a0 Scott Ullrich
319 26ee0570 jim-p
/* start dnsmasq service */
320
services_dnsmasq_configure();
321
322 923e49b1 Warren Baker
/* start unbound service */
323
services_unbound_configure();
324
325 0b8e9d38 jim-p
/* Do an initial time sync */
326
echo "Starting NTP time client...";
327
/* At bootup this will just write the config, ntpd will launch from ntpdate_sync_once.sh */
328
system_ntp_configure(false);
329 b61e8960 jim-p
mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh", true);
330 de00c381 Phil Davis
echo "done.\n";
331 0b8e9d38 jim-p
332 d1265444 Ermal
/* start load balancer daemon */
333
relayd_configure();
334
335 6cc9e241 Scott Ullrich
/* configure console menu */
336
system_console_configure();
337 a005424e Scott Ullrich
338 24d619f5 Ermal
/* start DHCP service */
339
services_dhcpd_configure();
340
341 92150bd8 Ermal
/* start dhcpleases dhpcp hosts leases program */
342
system_dhcpleases_configure();
343
344 6cc9e241 Scott Ullrich
/* start DHCP relay */
345
services_dhcrelay_configure();
346 562fca6d Scott Ullrich
347 06433d75 Phil Davis
/* start DHCP6 relay */
348
services_dhcrelay6_configure();
349
350 422bc2a7 Ermal
/* dyndns service updates */
351
send_event("service reload dyndnsall");
352
353 8c41a3e4 Ermal
/* Run a filter configure now that most all services have started */
354
filter_configure_sync();
355
356 6cc9e241 Scott Ullrich
/* setup pppoe and pptp */
357
vpn_setup();
358 c6e604d8 Scott Ullrich
359 6cc9e241 Scott Ullrich
/* start the captive portal */
360
captiveportal_configure();
361 f4959a69 Scott Ullrich
362 336e3c1c Charlie
/* start Voucher support */
363
voucher_configure();
364
365 6cc9e241 Scott Ullrich
/* run any shell commands specified in config.xml */
366
system_do_shell_commands();
367 9f966bc9 Scott Ullrich
368 6cc9e241 Scott Ullrich
/* start IPsec tunnels */
369 e5b89d37 Ermal
$ipsec_dynamic_hosts = vpn_ipsec_configure();
370 a199b93e Scott Ullrich
371 6cc9e241 Scott Ullrich
/* start SNMP service */
372
services_snmpd_configure();
373 11cbd478 Scott Ullrich
374 6cc9e241 Scott Ullrich
/* power down hard drive if needed/set */
375
system_set_harddisk_standby();
376 011bff69 Bill Marquette
377 6cc9e241 Scott Ullrich
/* lock down console if necessary */
378 edb4b657 Renato Botelho
reload_ttys();
379 d0e94aaf Scott Ullrich
380 6cc9e241 Scott Ullrich
/* load graphing functions */
381
enable_rrd_graphing();
382
383
/* enable watchdog if supported */
384
enable_watchdog();
385
386
/* if <system><afterbootupshellcmd> exists, execute the command */
387
if($config['system']['afterbootupshellcmd'] <> "") {
388
	echo "Running afterbootupshellcmd {$config['system']['afterbootupshellcmd']}\n";
389
	mwexec($config['system']['afterbootupshellcmd']);
390
}
391
392 5517f604 Phil Davis
if($physmem < $g['minimum_ram_warning']) {
393 6cc9e241 Scott Ullrich
	require_once("/etc/inc/notices.inc");
394 9f274393 Chris Buechler
	file_notice("{$g['product_name']}MemoryRequirements", "{$g['product_name']} requires at least {$g['minimum_ram_warning_text']} of RAM.  Expect unusual performance.  This platform is not supported.", "Memory", "", 1);
395 971de1f9 Renato Botelho
	set_sysctl(array(
396
		"net.inet.tcp.recvspace" => "4096",
397
		"net.inet.tcp.sendspace" => "4096"
398
	));
399 6cc9e241 Scott Ullrich
}
400
401
/* if we are operating at 1000 then increase timeouts.
402
   this was never accounted for after moving to 1000 hz */
403 971de1f9 Renato Botelho
$kern_hz = get_single_sysctl('kern.clockrate');
404
$kern_hz = substr($kern_hz, strpos($kern_hz, "hz = ") + 5);
405
$kern_hz = substr($kern_hz, 0, strpos($kern_hz, ","));
406 6cc9e241 Scott Ullrich
if($kern_hz == "1000") 
407 971de1f9 Renato Botelho
	set_single_sysctl("net.inet.tcp.rexmit_min" , "30");
408 c108ec01 Scott Ullrich
409 34c7f02e Scott Ullrich
/* start the igmpproxy daemon */
410 6cc9e241 Scott Ullrich
services_igmpproxy_configure();
411 41997fbb Ermal Luci
412 6cc9e241 Scott Ullrich
/* start the upnp daemon if it is enabled */
413
upnp_start();
414 6f20377b Scott Ullrich
415 6cc9e241 Scott Ullrich
/* If powerd is enabled, lets launch it */
416
activate_powerd();
417 8e9fa41d Scott Ullrich
418 77a341a4 Renato Botelho
/* Set preferred protocol */
419
prefer_ipv4_or_ipv6();
420
421 bf072179 jim-p
/* Remove the old shutdown binary if we kept it. */
422
if (file_exists("/sbin/shutdown.old"))
423 c5901d28 Ermal
	@unlink("/sbin/shutdown.old");
424 bf072179 jim-p
425 9b193619 Scott Ullrich
/* Resync / Reinstall packages if need be */
426
if(file_exists('/conf/needs_package_sync')) {
427
	if($config['installedpackages'] <> '' && is_array($config['installedpackages']['package'])) {
428 7aa9ab00 Scott Ullrich
		require_once("pkg-utils.inc");
429 9b193619 Scott Ullrich
		if($g['platform'] == "pfSense" || $g['platform'] == "nanobsd") {
430 261c7de8 jim-p
			mark_subsystem_dirty('packagelock');
431 9b193619 Scott Ullrich
			pkg_reinstall_all();
432 261c7de8 jim-p
			clear_subsystem_dirty('packagelock');
433 9b193619 Scott Ullrich
		}
434
	}
435 393cd3fc Ermal
	@unlink('/conf/needs_package_sync');
436 9b193619 Scott Ullrich
}
437
438 eac52376 jim-p
/* Give syslogd a kick after everything else has been initialized, otherwise it can occasionally
439
   fail to route syslog messages properly on both IPv4 and IPv6 */
440
system_syslogd_start();
441 25ed9cf8 jim-p
442 6cc9e241 Scott Ullrich
/* done */
443 27556fa9 Scott Ullrich
unset($g['booting']);
444 5c60c947 Scott Ullrich
445 e5b89d37 Ermal
/* If there are ipsec dynamic hosts try again to reload the tunnels as rc.newipsecdns does */
446
if ($ipsec_dynamic_hosts) {
447
	vpn_ipsec_configure();
448 bee7cd82 Ermal
	filter_configure();
449 e5b89d37 Ermal
}
450
451 00a4146e jim-p
led_normalize();
452 410cdac4 Scott Ullrich
453 63e18082 jim-p
conf_mount_ro();
454 6346595c Ermal Lu?i
455 3a4b0147 Ermal
?>