Project

General

Profile

Download (12.5 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 055abc57 Scott Ullrich
	echo "(I)nstaller may be invoked now if you do \n";
44 efce1588 Scott Ullrich
	echo "not wish to boot into the liveCD environment at this time.\n\n";
45 22af75a3 Scott Ullrich
	echo "(C) continues the LiveCD bootup without further pause.\n\n";
46 1e4e8458 Scott Ullrich
	echo "Timeout before auto boot continues (seconds): {$timeout}";
47 6cc9e241 Scott Ullrich
	$key = null;
48 1e4e8458 Scott Ullrich
	exec("/bin/stty erase " . chr(8));
49 055abc57 Scott Ullrich
	while(!in_array($key, array("c", "C", "r","R", "i", "I", "~", "!"))) {
50 1e4e8458 Scott Ullrich
	        echo chr(8) . "{$timeout}";
51 e5a06994 Scott Ullrich
	        `/bin/stty -icanon min 0 time 25`;
52 6cc9e241 Scott Ullrich
	        $key = trim(`KEY=\`dd count=1 2>/dev/null\`; echo \$KEY`);
53 2eeb1781 Scott Ullrich
	        `/bin/stty icanon`;
54 6cc9e241 Scott Ullrich
	        // Decrement our timeout value
55
	        $timeout--;
56
	        // If we have reached 0 exit and continue on
57 70045f5f Scott Ullrich
	        if ($timeout == 0) 
58
				break;
59 6cc9e241 Scott Ullrich
	}
60 540bd313 Scott Ullrich
	// If R or I was pressed do our logic here
61 70045f5f Scott Ullrich
	if (in_array($key, array("r", "R"))) {
62 68235416 Scott Ullrich
	  putenv("TERM=cons25");
63
	  echo "\n\nRecovery mode selected...\n";
64 f98d3d65 Scott Ullrich
	  passthru("/usr/bin/env TERM=cons25 /bin/tcsh -c /scripts/lua_installer_rescue");
65 d5116ed5 Scott Ullrich
	} elseif (in_array($key, array("i", "I"))) {
66 68235416 Scott Ullrich
	  putenv("TERM=cons25");  
67
	  echo "\n\nInstaller mode selected...\n";
68 f98d3d65 Scott Ullrich
	  passthru("/usr/bin/env TERM=cons25 /bin/tcsh -c /scripts/lua_installer");
69 c1da5030 Scott Ullrich
	  if(file_exists("/tmp/install_complete")) {
70 f98d3d65 Scott Ullrich
		passthru("/etc/rc.reboot");
71 c1da5030 Scott Ullrich
		exit;
72
	  }
73
	} elseif (in_array($key, array("!", "~"))) {
74 68235416 Scott Ullrich
 		putenv("TERM=cons25");
75
		echo "\n\nRecovery shell selected...\n";
76 6c616b93 Scott Ullrich
		echo "\n";
77 c1da5030 Scott Ullrich
		touch("/tmp/donotbootup");
78
		exit;
79 01ef30e9 Scott Ullrich
	} else {
80
		echo "\n\n";
81 745188c8 Scott Ullrich
	}
82 6cc9e241 Scott Ullrich
}
83
84
echo " done.\n";
85
86
echo "Initializing...";
87
echo ".";
88
require_once("/etc/inc/globals.inc");
89 483e6de8 Scott Ullrich
echo ".";
90 00a4146e jim-p
require_once("/etc/inc/led.inc");
91
led_normalize();
92 483e6de8 Scott Ullrich
echo ".";
93 00a4146e jim-p
if (led_count() >= 3) {
94
	led_kitt();
95
}
96 483e6de8 Scott Ullrich
97 6cc9e241 Scott Ullrich
/* let the other functions know we're booting */
98
$pkg_interface = 'console';
99 410cdac4 Scott Ullrich
$g['booting'] = true;
100 6cc9e241 Scott Ullrich
101
/* parse the configuration and include all functions used below */
102
require_once("/etc/inc/config.inc");
103
echo ".";
104 032c40c7 Scott Ullrich
require_once("/etc/inc/config.console.inc");
105
echo ".";
106 3066a36f Ermal Lu?i
require_once("/etc/inc/auth.inc");
107
echo ".";
108 6cc9e241 Scott Ullrich
require_once("/etc/inc/functions.inc");
109 62d93213 Scott Ullrich
echo ".";
110 1b1c179d jim-p
require_once("/etc/inc/filter.inc");
111 5f2d078e Scott Ullrich
echo ".";
112 1b1c179d jim-p
require_once("/etc/inc/shaper.inc");
113 5f2d078e Scott Ullrich
echo ".";
114 483e6de8 Scott Ullrich
require_once("/etc/inc/ipsec.inc");
115
echo ".";
116
require_once("/etc/inc/vpn.inc");
117
echo ".";
118 5f2d078e Scott Ullrich
require_once("/etc/inc/openvpn.inc");
119 62d93213 Scott Ullrich
echo ".";
120 483e6de8 Scott Ullrich
require_once("/etc/inc/captiveportal.inc");
121
echo ".";
122
require_once("/etc/inc/rrd.inc");
123
echo ".";
124 3ffa8318 Renato Botelho
require_once("/etc/inc/pfsense-utils.inc");
125
echo ".";
126 62d93213 Scott Ullrich
127 6cc9e241 Scott Ullrich
/* get system memory amount */
128
$memory = get_memory();
129
$avail = $memory[0];
130
echo " done.\n";
131
132 63e18082 jim-p
conf_mount_rw();
133 6cc9e241 Scott Ullrich
134 7f039071 jim-p
/* save dmesg output to file */
135
system_dmesg_save();
136
137 7188fc6d Scott Ullrich
/* check whether config reset is desired (via hardware button on WRAP/ALIX) */
138
system_check_reset_button();
139
140 6cc9e241 Scott Ullrich
/* remove previous firmware upgrade if present */
141
if (file_exists("/root/firmware.tgz")) 
142
	unlink("/root/firmware.tgz");
143
144 de00c381 Phil Davis
/* start devd (dhclient now uses it) */
145 6cc9e241 Scott Ullrich
echo "Starting device manager (devd)...";
146
mute_kernel_msgs();
147
start_devd();
148
set_device_perms();
149
unmute_kernel_msgs();
150
echo "done.\n";
151
152
// Display rescue configuration option
153
if($g['platform'] == "cdrom") 
154
		rescue_detect_keypress();
155
156 d5116ed5 Scott Ullrich
echo "Loading configuration...";
157
parse_config_bootup();
158
echo "done.\n";
159
160 7734aea6 Andrew Thompson
if($g['platform'] == "jail") {
161
	/* We must determine what network settings have been configured for us */
162
	$wanif = "lo0";	/* defaults, if the jail admin hasn't set us up */
163
	$ipaddr = "127.0.0.1";
164
	$iflist = get_interface_list();
165
	foreach ($iflist as $iface => $ifa) {
166
		if (isset($ifa['ipaddr'])) {
167
			$wanif = $iface;
168
			$ipaddr = $ifa['ipaddr'];
169
			break;
170
		}
171
	}
172
	$config['interfaces'] = array();
173
	$config['interfaces']['lan'] = array();
174
	$config['interfaces']['lan']['enable'] = false;
175
	$config['interfaces']['wan'] = array();
176
	/* XXX, todo */
177
	$config['interfaces']['wan']['if'] = $wanif;
178
	$config['interfaces']['wan']['ipaddr'] = $ipaddr;
179
	$config['interfaces']['wan']['subnet'] = "32";	/* XXX right? */
180
	$config['interfaces']['wan']['enable'] = true;
181
	if($config['dhcpd']['lan']) 
182
		unset($config['dhcpd']['lan']['enable']);
183
	unlink_if_exists('/conf/trigger_initial_wizard');
184
	write_config();
185
} else {
186
	/*
187
	 *  Determine if we need to throw a interface exception
188
	 *  and ask the user to reassign interfaces.  This will
189
	 *  avoid a reboot and thats a good thing.
190
	 */
191
	while(is_interface_mismatch() == true) {
192
		led_assigninterfaces();
193 7852ce9b Erik Fonnesbeck
		if (isset($config['revision'])) {
194
			if (file_exists("{$g['tmp_path']}/missing_interfaces"))
195
				echo "Warning: Configuration references interfaces that do not exist: " . file_get_contents("{$g['tmp_path']}/missing_interfaces") . "\n";
196
			echo "\nNetwork interface mismatch -- Running interface assignment option.\n";
197
		} else
198
			echo "\nDefault interfaces not found -- Running interface assignment option.\n";
199 7734aea6 Andrew Thompson
		$ifaces = get_interface_list();
200
		if (is_array($ifaces)) {
201
			foreach($ifaces as $iface => $ifdata)
202
				interfaces_bring_up($iface);
203
		}
204
		set_networking_interfaces_ports();
205
		led_kitt();
206 7f8d463f Ermal
	}
207 6cc9e241 Scott Ullrich
}
208
209
/* convert config and clean backups */
210
echo "Updating configuration...";
211
convert_config();
212
echo "done.\n";
213
214
echo "Cleaning backup cache...";
215
cleanup_backupcache(true);
216
echo "done.\n";
217
218
/* read in /etc/sysctl.conf and set values if needed */
219
echo "Setting up extended sysctls...";
220
system_setup_sysctl();
221
echo "done.\n";
222
223 7530177c jim-p
/* enable optional crypto modules */
224
load_crypto();
225 09f18f59 jim-p
226 f60156f6 jim-p
/* enable optional thermal sensor modules */
227
load_thermal_hardware();
228
229 6cc9e241 Scott Ullrich
/* run any early shell commands specified in config.xml */
230
system_do_shell_commands(1);
231 ef0090a3 Scott Ullrich
232 6cc9e241 Scott Ullrich
/* set up our timezone */
233
system_timezone_configure();
234
235
/* set up our hostname */
236
system_hostname_configure();
237
238
/* make hosts file */
239
system_hosts_generate();
240
241
/* configure loopback interface */
242
interfaces_loopback_configure();
243
244 b29d9c8e Ermal
echo "Starting Secure Shell Services...";
245
mwexec_bg("/etc/sshd");
246
echo "done.\n";
247
248 9a4c3eed Ermal
/* setup polling */
249
echo "Setting up polling defaults...";
250
setup_polling();
251
echo "done.\n";
252
253
/* setup interface microcode which improves tcp/ip speed */
254 7d6128e0 Ermal
echo "Setting up interfaces microcode...";
255 9a4c3eed Ermal
setup_microcode();
256
echo "done.\n";
257
258 6cc9e241 Scott Ullrich
/* set up interfaces */
259
if(!$debugging)
260 70b89814 Scott Ullrich
	mute_kernel_msgs();
261 6cc9e241 Scott Ullrich
interfaces_configure();
262
if(!$debugging)
263 70b89814 Scott Ullrich
	unmute_kernel_msgs();
264 86ddbb71 Scott Ullrich
265 4994b350 smos
/* re-make hosts file after configuring interfaces */
266
system_hosts_generate();
267
268 d09d53ac Ermal
/* start OpenVPN server & clients */
269
echo "Syncing OpenVPN settings...";
270
openvpn_resync_all();
271
echo "done.\n";
272
273 6cc9e241 Scott Ullrich
/* generate resolv.conf */
274
system_resolvconf_generate();
275 aa01f2f2 Scott Ullrich
276 93291959 sullrich
/* start syslogd */
277
system_syslogd_start();
278
279 2fd9d050 Scott Ullrich
/* setup altq + pf */
280
filter_configure_sync();
281
282 6cc9e241 Scott Ullrich
/* start pflog */
283
echo "Starting PFLOG...";
284
filter_pflog_start();
285
echo "done.\n";
286 d0e94aaf Scott Ullrich
287 17fdcb8d Ermal Lu?i
/* reconfigure our gateway monitor */
288 6cc9e241 Scott Ullrich
echo "Setting up gateway monitors...";
289 17fdcb8d Ermal Lu?i
setup_gateways_monitor();
290
echo "done.\n";
291
292
echo "Synchronizing user settings...";
293 24e61cce Ermal
local_sync_accounts();
294 6cc9e241 Scott Ullrich
echo "done.\n";
295 d0e94aaf Scott Ullrich
296 6cc9e241 Scott Ullrich
if($avail > 0 and $avail < 65) {
297
	echo "System has less than 65 megabytes of ram {$avail}.  Delaying webConfigurator startup.\n";
298
	/* start webConfigurator up on final pass */
299 f3239b2d Chris Buechler
	mwexec("/usr/local/sbin/pfSctl -c 'service restart webgui'");
300 6cc9e241 Scott Ullrich
} else {
301
	/* start web server */
302
	system_webgui_start();
303
}
304 ef9366bd Scott Ullrich
305 6cc9e241 Scott Ullrich
/* configure cron service */
306
echo "Configuring CRON...";
307
configure_cron();
308
echo "done.\n";
309 68cd47b3 Scott Ullrich
310 6cc9e241 Scott Ullrich
/* set up static routes */
311
system_routing_configure();
312 d0e94aaf Scott Ullrich
313 6cc9e241 Scott Ullrich
/* enable routing */
314
system_routing_enable();
315 e5cd29a0 Scott Ullrich
316 0b8e9d38 jim-p
/* Do an initial time sync */
317
echo "Starting NTP time client...";
318
/* At bootup this will just write the config, ntpd will launch from ntpdate_sync_once.sh */
319
system_ntp_configure(false);
320 b61e8960 jim-p
mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh", true);
321 de00c381 Phil Davis
echo "done.\n";
322 0b8e9d38 jim-p
323 d1265444 Ermal
/* start load balancer daemon */
324
relayd_configure();
325
326 6cc9e241 Scott Ullrich
/* configure console menu */
327
system_console_configure();
328 a005424e Scott Ullrich
329 24d619f5 Ermal
/* start DHCP service */
330
services_dhcpd_configure();
331
332 6cc9e241 Scott Ullrich
/* start dnsmasq service */
333
services_dnsmasq_configure();
334 e5cd29a0 Scott Ullrich
335 92150bd8 Ermal
/* start dhcpleases dhpcp hosts leases program */
336
system_dhcpleases_configure();
337
338 6cc9e241 Scott Ullrich
/* start DHCP relay */
339
services_dhcrelay_configure();
340 562fca6d Scott Ullrich
341 422bc2a7 Ermal
/* dyndns service updates */
342
send_event("service reload dyndnsall");
343
344 8c41a3e4 Ermal
/* Run a filter configure now that most all services have started */
345
filter_configure_sync();
346
347 6cc9e241 Scott Ullrich
/* setup pppoe and pptp */
348
vpn_setup();
349 c6e604d8 Scott Ullrich
350 6cc9e241 Scott Ullrich
/* start the captive portal */
351
captiveportal_configure();
352 f4959a69 Scott Ullrich
353 336e3c1c Charlie
/* start Voucher support */
354
voucher_configure();
355
356 6cc9e241 Scott Ullrich
/* run any shell commands specified in config.xml */
357
system_do_shell_commands();
358 9f966bc9 Scott Ullrich
359 6cc9e241 Scott Ullrich
/* start IPsec tunnels */
360
vpn_ipsec_configure();
361 a2a13c97 smos
/* Reload dynamic hostname tunnels after bootup finishes */
362 4e192846 Ermal
send_event("service reload ipsecdns");
363 a199b93e Scott Ullrich
364 6cc9e241 Scott Ullrich
/* start SNMP service */
365
services_snmpd_configure();
366 11cbd478 Scott Ullrich
367 6cc9e241 Scott Ullrich
/* power down hard drive if needed/set */
368
system_set_harddisk_standby();
369 011bff69 Bill Marquette
370 6cc9e241 Scott Ullrich
/* lock down console if necessary */
371 a46e450c Ermal Lu?i
auto_login();
372 d0e94aaf Scott Ullrich
373 6cc9e241 Scott Ullrich
/* load graphing functions */
374
enable_rrd_graphing();
375
376
/* startup routed if needed */
377 4395500c Warren Baker
include_once("/usr/local/pkg/routed.inc");
378 6cc9e241 Scott Ullrich
setup_routed();
379
380
/* enable watchdog if supported */
381
enable_watchdog();
382
383
/* if <system><afterbootupshellcmd> exists, execute the command */
384
if($config['system']['afterbootupshellcmd'] <> "") {
385
	echo "Running afterbootupshellcmd {$config['system']['afterbootupshellcmd']}\n";
386
	mwexec($config['system']['afterbootupshellcmd']);
387
}
388
389 9f274393 Chris Buechler
if($avail < $g['minimum_ram_warning']) {
390 6cc9e241 Scott Ullrich
	require_once("/etc/inc/notices.inc");
391 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);
392 c5901d28 Ermal
	mwexec("/sbin/sysctl net.inet.tcp.recvspace=4096");
393
	mwexec("/sbin/sysctl net.inet.tcp.sendspace=4096");
394 6cc9e241 Scott Ullrich
}
395
396
/* if we are operating at 1000 then increase timeouts.
397
   this was never accounted for after moving to 1000 hz */
398 c5901d28 Ermal
$kern_hz = `/sbin/sysctl kern.clockrate | /usr/bin/awk '{ print $5 }' | /usr/bin/cut -d"," -f1`;
399 6cc9e241 Scott Ullrich
$kern_hz = trim($kern_hz, "\r\n");
400
if($kern_hz == "1000") 
401 c5901d28 Ermal
	mwexec("/sbin/sysctl net.inet.tcp.rexmit_min=30");
402 c108ec01 Scott Ullrich
403 34c7f02e Scott Ullrich
/* start the igmpproxy daemon */
404 6cc9e241 Scott Ullrich
services_igmpproxy_configure();
405 41997fbb Ermal Luci
406 6cc9e241 Scott Ullrich
/* start the upnp daemon if it is enabled */
407
upnp_start();
408 6f20377b Scott Ullrich
409 6cc9e241 Scott Ullrich
/* If powerd is enabled, lets launch it */
410
activate_powerd();
411 8e9fa41d Scott Ullrich
412 bf072179 jim-p
/* Remove the old shutdown binary if we kept it. */
413
if (file_exists("/sbin/shutdown.old"))
414 c5901d28 Ermal
	@unlink("/sbin/shutdown.old");
415 bf072179 jim-p
416 9b193619 Scott Ullrich
/* Resync / Reinstall packages if need be */
417
if(file_exists('/conf/needs_package_sync')) {
418
	if($config['installedpackages'] <> '' && is_array($config['installedpackages']['package'])) {
419 7aa9ab00 Scott Ullrich
		require_once("pkg-utils.inc");
420 9b193619 Scott Ullrich
		if($g['platform'] == "pfSense" || $g['platform'] == "nanobsd") {
421 261c7de8 jim-p
			mark_subsystem_dirty('packagelock');
422 9b193619 Scott Ullrich
			pkg_reinstall_all();
423 261c7de8 jim-p
			clear_subsystem_dirty('packagelock');
424 9b193619 Scott Ullrich
		}
425
	}
426 393cd3fc Ermal
	@unlink('/conf/needs_package_sync');
427 9b193619 Scott Ullrich
}
428
429 25ed9cf8 jim-p
/* If syslogd is forwarding to an IPv6 server, give it a kick since otherwise syslogd 
430
	won't forward to a v6 server. See #2370 (https://redmine.pfsense.org/issues/2370). */
431
432
if (is_ipaddrv6($config['syslog']['remoteserver']) || is_ipaddrv6($config['syslog']['remoteserver2']) || is_ipaddrv6($config['syslog']['remoteserver3'])) {
433
	system_syslogd_start();
434
}
435
436 6cc9e241 Scott Ullrich
/* done */
437 27556fa9 Scott Ullrich
unset($g['booting']);
438 5c60c947 Scott Ullrich
439 00a4146e jim-p
led_normalize();
440 410cdac4 Scott Ullrich
441 63e18082 jim-p
conf_mount_ro();
442 6346595c Ermal Lu?i
443 3a4b0147 Ermal
?>