Project

General

Profile

Download (10.9 KB) Statistics
| Branch: | Tag: | Revision:
1
#!/usr/local/bin/php -f
2
<?php
3
/* $Id$ */
4
/*
5
	rc.bootup
6
	part of pfSense by Scott Ullrich
7
	originally based on m0n0wall (http://m0n0.ch/wall)
8
	Copyright (C) 2004-2009 Scott Ullrich <sullrich@pfsense.org>.
9
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
10
	Copyright (C) 2009 Erik Kristensen
11
	All rights reserved.
12

    
13
	Redistribution and use in source and binary forms, with or without
14
	modification, are permitted provided that the following conditions are met:
15

    
16
	1. Redistributions of source code must retain the above copyright notice,
17
	   this list of conditions and the following disclaimer.
18

    
19
	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

    
23
	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
function rescue_detect_keypress() {
36
	// How long do you want the script to wait before moving on (in seconds)
37
	$timeout=9;
38
	echo "\n";
39
    echo "[ Press R to enter recovery mode or ]\n";
40
	echo "[  press I to launch the installer  ]\n\n";
41
	echo "(R)ecovery mode can assist by rescuing config.xml\n";
42
	echo "from a broken hard disk installation, etc.\n\n";
43
	echo "(I)nstaller may be invoked now if you do \n";
44
	echo "not wish to boot into the liveCD environment at this time.\n\n";
45
	echo "(C) continues the LiveCD bootup without further pause.\n\n";
46
	echo "Timeout before auto boot continues (seconds): {$timeout}";
47
	$key = null;
48
	exec("/bin/stty erase " . chr(8));
49
	while(!in_array($key, array("c", "C", "r","R", "i", "I", "~", "!"))) {
50
	        echo chr(8) . "{$timeout}";
51
	        `/bin/stty -icanon min 0 time 25`;
52
	        $key = trim(`KEY=\`dd count=1 2>/dev/null\`; echo \$KEY`);
53
	        `/bin/stty icanon`;
54
	        // Decrement our timeout value
55
	        $timeout--;
56
	        // If we have reached 0 exit and continue on
57
	        if ($timeout == 0) 
58
				break;
59
	}
60
	// If R or I was pressed do our logic here
61
	if (in_array($key, array("r", "R"))) {
62
	  putenv("TERM=cons25");
63
	  echo "\n\nRecovery mode selected...\n";
64
	  passthru("/usr/bin/env TERM=cons25 /bin/tcsh -c /scripts/lua_installer_rescue");
65
	} elseif (in_array($key, array("i", "I"))) {
66
	  putenv("TERM=cons25");  
67
	  echo "\n\nInstaller mode selected...\n";
68
	  passthru("/usr/bin/env TERM=cons25 /bin/tcsh -c /scripts/lua_installer");
69
	  if(file_exists("/tmp/install_complete")) {
70
		passthru("/etc/rc.reboot");
71
		exit;
72
	  }
73
	} elseif (in_array($key, array("!", "~"))) {
74
 		putenv("TERM=cons25");
75
		echo "\n\nRecovery shell selected...\n";
76
		echo "\n";
77
		touch("/tmp/donotbootup");
78
		exit;
79
	} else {
80
		echo "\n\n";
81
	}
82
}
83

    
84
echo " done.\n";
85

    
86
echo "Initializing...";
87
echo ".";
88
require_once("/etc/inc/globals.inc");
89
echo ".";
90
require_once("/etc/inc/led.inc");
91
led_normalize();
92
echo ".";
93
if (led_count() >= 3) {
94
	led_kitt();
95
}
96

    
97
/* let the other functions know we're booting */
98
$pkg_interface = 'console';
99
$g['booting'] = true;
100

    
101
/* parse the configuration and include all functions used below */
102
require_once("/etc/inc/config.inc");
103
echo ".";
104
require_once("/etc/inc/config.console.inc");
105
echo ".";
106
require_once("/etc/inc/auth.inc");
107
echo ".";
108
require_once("/etc/inc/functions.inc");
109
echo ".";
110
require_once("/etc/inc/filter.inc");
111
echo ".";
112
require_once("/etc/inc/shaper.inc");
113
echo ".";
114
require_once("/etc/inc/ipsec.inc");
115
echo ".";
116
require_once("/etc/inc/vpn.inc");
117
echo ".";
118
require_once("/etc/inc/openvpn.inc");
119
echo ".";
120
require_once("/etc/inc/captiveportal.inc");
121
echo ".";
122
require_once("/etc/inc/rrd.inc");
123
echo ".";
124
require_once("/etc/inc/pfsense-utils.inc");
125
echo ".";
126

    
127
/* get system memory amount */
128
$memory = get_memory();
129
$avail = $memory[0];
130
echo " done.\n";
131

    
132
conf_mount_rw();
133

    
134
/* save dmesg output to file */
135
system_dmesg_save();
136

    
137
/* check whether config reset is desired (via hardware button on WRAP/ALIX) */
138
system_check_reset_button();
139

    
140
/* remove previous firmware upgrade if present */
141
if (file_exists("/root/firmware.tgz")) 
142
	unlink("/root/firmware.tgz");
143

    
144
/* start devd (dhclient now uses it */
145
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
echo "Loading configuration...";
157
parse_config_bootup();
158
echo "done.\n";
159

    
160
/*
161
 *  Determine if we need to throw a interface exception
162
 *  and ask the user to reassign interfaces.  This will
163
 *  avoid a reboot and thats a good thing.
164
 */
165
while(is_interface_mismatch() == true) {
166
	led_assigninterfaces();
167
	echo "\nNetwork interface mismatch -- Running interface assignment option.\n";
168
	$ifaces = get_interface_list();
169
	if (is_array($ifaces)) {
170
		foreach($ifaces as $iface => $ifdata)
171
			interfaces_bring_up($iface);
172
	}
173
	set_networking_interfaces_ports();
174
	led_kitt();
175
}
176

    
177
/* convert config and clean backups */
178
echo "Updating configuration...";
179
convert_config();
180
echo "done.\n";
181

    
182
echo "Cleaning backup cache...";
183
cleanup_backupcache(true);
184
echo "done.\n";
185

    
186
/* read in /etc/sysctl.conf and set values if needed */
187
echo "Setting up extended sysctls...";
188
system_setup_sysctl();
189
echo "done.\n";
190

    
191
/* enable glxsb if wanted */
192
load_glxsb();
193

    
194
/* run any early shell commands specified in config.xml */
195
system_do_shell_commands(1);
196

    
197
/* set up our timezone */
198
system_timezone_configure();
199

    
200
/* set up our hostname */
201
system_hostname_configure();
202

    
203
/* make hosts file */
204
system_hosts_generate();
205

    
206
/* configure loopback interface */
207
interfaces_loopback_configure();
208

    
209
echo "Starting Secure Shell Services...";
210
mwexec_bg("/etc/sshd");
211
echo "done.\n";
212

    
213
/* setup polling */
214
echo "Setting up polling defaults...";
215
setup_polling();
216
echo "done.\n";
217

    
218
/* setup interface microcode which improves tcp/ip speed */
219
echo "Setting up interfaces microcode...";
220
setup_microcode();
221
echo "done.\n";
222

    
223
/* set up interfaces */
224
if(!$debugging)
225
	mute_kernel_msgs();
226
interfaces_configure();
227
if(!$debugging)
228
	unmute_kernel_msgs();
229

    
230
/* re-make hosts file after configuring interfaces */
231
system_hosts_generate();
232

    
233
/* start OpenVPN server & clients */
234
echo "Syncing OpenVPN settings...";
235
openvpn_resync_all();
236
echo "done.\n";
237

    
238
/* generate resolv.conf */
239
system_resolvconf_generate();
240

    
241
/* start syslogd */
242
system_syslogd_start();
243

    
244
/* setup altq + pf */
245
filter_configure_sync();
246

    
247
/* start pflog */
248
echo "Starting PFLOG...";
249
filter_pflog_start();
250
echo "done.\n";
251

    
252
/* reconfigure our gateway monitor */
253
echo "Setting up gateway monitors...";
254
setup_gateways_monitor();
255
echo "done.\n";
256

    
257
echo "Synchronizing user settings...";
258
local_sync_accounts();
259
echo "done.\n";
260

    
261
if($avail > 0 and $avail < 65) {
262
	echo "System has less than 65 megabytes of ram {$avail}.  Delaying webConfigurator startup.\n";
263
	/* start webConfigurator up on final pass */
264
	mwexec("/usr/local/sbin/pfSctl -c 'service restart webgui'");
265
} else {
266
	/* start web server */
267
	system_webgui_start();
268
}
269

    
270
/* configure cron service */
271
echo "Configuring CRON...";
272
configure_cron();
273
echo "done.\n";
274

    
275
/* set up static routes */
276
system_routing_configure();
277

    
278
/* enable routing */
279
system_routing_enable();
280

    
281
/* Do an initial time sync */
282
echo "Starting NTP time client...";
283
/* At bootup this will just write the config, ntpd will launch from ntpdate_sync_once.sh */
284
system_ntp_configure(false);
285
shell_exec("echo /usr/local/sbin/ntpdate_sync_once.sh | tcsh");
286

    
287
/* start load balancer daemon */
288
relayd_configure();
289

    
290
/* configure console menu */
291
system_console_configure();
292

    
293
/* start DHCP service */
294
services_dhcpd_configure();
295

    
296
/* start dnsmasq service */
297
services_dnsmasq_configure();
298

    
299
/* start dhcpleases dhpcp hosts leases program */
300
system_dhcpleases_configure();
301

    
302
/* start DHCP relay */
303
services_dhcrelay_configure();
304

    
305
/* dyndns service updates */
306
send_event("service reload dyndnsall");
307

    
308
/* Run a filter configure now that most all services have started */
309
filter_configure_sync();
310

    
311
/* setup pppoe and pptp */
312
vpn_setup();
313

    
314
/* start the captive portal */
315
captiveportal_configure();
316

    
317
/* start Voucher support */
318
voucher_configure();
319

    
320
/* run any shell commands specified in config.xml */
321
system_do_shell_commands();
322

    
323
/* start IPsec tunnels */
324
vpn_ipsec_configure();
325
/* Reload dynamic hostname tunnels after bootup finishes */
326
send_event("service reload ipsecdns");
327

    
328
/* start SNMP service */
329
services_snmpd_configure();
330

    
331
/* power down hard drive if needed/set */
332
system_set_harddisk_standby();
333

    
334
/* lock down console if necessary */
335
auto_login();
336

    
337
/* load graphing functions */
338
enable_rrd_graphing();
339

    
340
/* startup OLSR if needed */
341
setup_wireless_olsr();
342

    
343
/* startup routed if needed */
344
include_once("/usr/local/pkg/routed.inc");
345
setup_routed();
346

    
347
/* enable watchdog if supported */
348
enable_watchdog();
349

    
350
/* if <system><afterbootupshellcmd> exists, execute the command */
351
if($config['system']['afterbootupshellcmd'] <> "") {
352
	echo "Running afterbootupshellcmd {$config['system']['afterbootupshellcmd']}\n";
353
	mwexec($config['system']['afterbootupshellcmd']);
354
}
355

    
356
if($avail < $g['minimum_ram_warning']) {
357
	require_once("/etc/inc/notices.inc");
358
	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);
359
	mwexec("/sbin/sysctl net.inet.tcp.recvspace=4096");
360
	mwexec("/sbin/sysctl net.inet.tcp.sendspace=4096");
361
}
362

    
363
/* if we are operating at 1000 then increase timeouts.
364
   this was never accounted for after moving to 1000 hz */
365
$kern_hz = `/sbin/sysctl kern.clockrate | /usr/bin/awk '{ print $5 }' | /usr/bin/cut -d"," -f1`;
366
$kern_hz = trim($kern_hz, "\r\n");
367
if($kern_hz == "1000") 
368
	mwexec("/sbin/sysctl net.inet.tcp.rexmit_min=30");
369

    
370
/* start the igmpproxy daemon */
371
services_igmpproxy_configure();
372

    
373
/* start the upnp daemon if it is enabled */
374
upnp_start();
375

    
376
/* If powerd is enabled, lets launch it */
377
activate_powerd();
378

    
379
/* Remove the old shutdown binary if we kept it. */
380
if (file_exists("/sbin/shutdown.old"))
381
	@unlink("/sbin/shutdown.old");
382

    
383
/* Resync / Reinstall packages if need be */
384
if(file_exists('/conf/needs_package_sync')) {
385
	if($config['installedpackages'] <> '' && is_array($config['installedpackages']['package'])) {
386
		require_once("pkg-utils.inc");
387
		if($g['platform'] == "pfSense" || $g['platform'] == "nanobsd") {
388
			mark_subsystem_dirty('packagelock');
389
			pkg_reinstall_all();
390
			clear_subsystem_dirty('packagelock');
391
		}
392
	}
393
	@unlink('/conf/needs_package_sync');
394
}
395

    
396
/* done */
397
unset($g['booting']);
398

    
399
led_normalize();
400

    
401
conf_mount_ro();
402

    
403
?>
(37-37/104)