Project

General

Profile

Download (10 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/auth.inc");
105
echo ".";
106
require_once("/etc/inc/functions.inc");
107
echo ".";
108
require("/etc/inc/filter.inc");
109
echo ".";
110
require("/etc/inc/shaper.inc");
111
echo ".";
112
require_once("/etc/inc/ipsec.inc");
113
echo ".";
114
require_once("/etc/inc/vpn.inc");
115
echo ".";
116
require_once("/etc/inc/openvpn.inc");
117
echo ".";
118
require_once("/etc/inc/captiveportal.inc");
119
echo ".";
120
require_once("/etc/inc/rrd.inc");
121
echo ".";
122

    
123
/* get system memory amount */
124
$memory = get_memory();
125
$avail = $memory[0];
126
echo " done.\n";
127

    
128
conf_mount_rw();
129

    
130
/* save dmesg output to file */
131
system_dmesg_save();
132

    
133
/* check whether config reset is desired (via hardware button on WRAP/ALIX) */
134
system_check_reset_button();
135

    
136
/* remove previous firmware upgrade if present */
137
if (file_exists("/root/firmware.tgz")) 
138
	unlink("/root/firmware.tgz");
139

    
140
/* start devd (dhclient now uses it */
141
echo "Starting device manager (devd)...";
142
mute_kernel_msgs();
143
start_devd();
144
set_device_perms();
145
unmute_kernel_msgs();
146
echo "done.\n";
147

    
148
// Display rescue configuration option
149
if($g['platform'] == "cdrom") 
150
		rescue_detect_keypress();
151

    
152
echo "Loading configuration...";
153
parse_config_bootup();
154
echo "done.\n";
155

    
156
$lan_if = $config['interfaces']['lan']['if'];
157
$wan_if = get_real_interface();
158

    
159
/*
160
 *  Determine if we need to throw a interface exception
161
 *  and ask the user to reassign interfaces.  This will
162
 *  avoid a reboot and thats a good thing.
163
 */
164
while(is_interface_mismatch() == true) {
165
	echo "\nNetwork interface mismatch -- Running interface assignment option.\n";
166
	set_networking_interfaces_ports();
167
}
168

    
169
/* convert config and clean backups */
170
echo "Updating configuration...";
171
convert_config();
172
echo "done.\n";
173

    
174
echo "Cleaning backup cache...";
175
cleanup_backupcache(true);
176
echo "done.\n";
177

    
178
/* read in /etc/sysctl.conf and set values if needed */
179
echo "Setting up extended sysctls...";
180
system_setup_sysctl();
181
echo "done.\n";
182

    
183
/* enable glxsb if wanted */
184
load_glxsb();
185

    
186
/* run any early shell commands specified in config.xml */
187
system_do_shell_commands(1);
188

    
189
/* set up our timezone */
190
system_timezone_configure();
191

    
192
/* set up our hostname */
193
system_hostname_configure();
194

    
195
/* make hosts file */
196
system_hosts_generate();
197

    
198
/* configure loopback interface */
199
interfaces_loopback_configure();
200

    
201
echo "Starting Secure Shell Services...";
202
mwexec_bg("/etc/sshd");
203
echo "done.\n";
204

    
205
/* set up interfaces */
206
if(!$debugging)
207
	mute_kernel_msgs();
208
interfaces_configure();
209
if(!$debugging)
210
	unmute_kernel_msgs();
211

    
212
/* re-make hosts file after configuring interfaces */
213
system_hosts_generate();
214

    
215
/* generate resolv.conf */
216
system_resolvconf_generate();
217

    
218
/* start syslogd */
219
system_syslogd_start();
220

    
221
/* setup altq + pf */
222
filter_configure_sync();
223

    
224
/* start pflog */
225
echo "Starting PFLOG...";
226
filter_pflog_start();
227
echo "done.\n";
228

    
229
/* start load balancer daemon */
230
relayd_configure();
231

    
232
/* reconfigure our gateway monitor */
233
echo "Setting up gateway monitors...";
234
setup_gateways_monitor();
235
echo "done.\n";
236

    
237
echo "Synchronizing user settings...";
238
if (empty($config['system']['webgui']['backend']))
239
	local_sync_accounts();
240
echo "done.\n";
241

    
242
/* start OpenVPN server & clients */
243
echo "Syncing OpenVPN settings...";
244
openvpn_resync_all();
245
echo "done.\n";
246

    
247
if($avail > 0 and $avail < 65) {
248
	echo "System has less than 65 megabytes of ram {$avail}.  Delaying webConfigurator startup.\n";
249
	/* start webConfigurator up on final pass */
250
	touch("/tmp/restart_webgui");
251
} else {
252
	/* start web server */
253
	system_webgui_start();
254
}
255

    
256
/* configure cron service */
257
echo "Configuring CRON...";
258
configure_cron();
259
echo "done.\n";
260

    
261
/* set up static routes */
262
system_routing_configure();
263

    
264
/* enable routing */
265
system_routing_enable();
266

    
267
/* configure console menu */
268
system_console_configure();
269

    
270
/* start the NTP client */
271
echo "Starting OpenNTP time client...";
272
system_ntp_configure();
273
echo "done.\n";
274

    
275
/* Launch on bootup and keep trying to sync.  Exit once time/date has been sync'd. */
276
mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh");
277

    
278
/* static IP address? -> attempt DNS update */
279
if (is_ipaddr($config['interfaces']['wan']['ipaddr']))
280
	services_dnsupdate_process();
281

    
282
/* start dnsmasq service */
283
services_dnsmasq_configure();
284

    
285
/* start dyndns service */
286
@touch("{$g['tmp_path']}/update_dyndns");
287

    
288
/* start DHCP relay */
289
services_dhcrelay_configure();
290

    
291
/* setup pppoe and pptp */
292
vpn_setup();
293

    
294
/* start the captive portal */
295
captiveportal_configure();
296

    
297
/* start Voucher support */
298
voucher_configure();
299

    
300
/* run any shell commands specified in config.xml */
301
system_do_shell_commands();
302

    
303
/* setup polling */
304
setup_polling();
305

    
306
/* setup interface microcode which improves tcp/ip speed */
307
echo "Setting up microcode and tx/rx offloading...";
308
setup_microcode();
309
echo "done.\n";
310

    
311
/* start IPsec tunnels */
312
vpn_ipsec_configure();
313

    
314
/* start SNMP service */
315
services_snmpd_configure();
316

    
317
/* power down hard drive if needed/set */
318
system_set_harddisk_standby();
319

    
320
/* lock down console if necessary */
321
auto_login();
322

    
323
/* Run a filter configure now that most all services have started */
324
filter_configure_sync();
325

    
326
/* load graphing functions */
327
enable_rrd_graphing();
328

    
329
/* start DHCP service */
330
services_dhcpd_configure();
331

    
332
/* startup OLSR if needed */
333
setup_wireless_olsr();
334

    
335
/* startup routed if needed */
336
include_once("/usr/local/pkg/routed/routed.inc");
337
setup_routed();
338

    
339
/* enable watchdog if supported */
340
enable_watchdog();
341

    
342
/* if <system><afterbootupshellcmd> exists, execute the command */
343
if($config['system']['afterbootupshellcmd'] <> "") {
344
	echo "Running afterbootupshellcmd {$config['system']['afterbootupshellcmd']}\n";
345
	mwexec($config['system']['afterbootupshellcmd']);
346
}
347

    
348
if($avail < $g['minimum_ram_warning']) {
349
	require_once("/etc/inc/notices.inc");
350
	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);
351
	mwexec("sysctl net.inet.tcp.recvspace=4096");
352
	mwexec("sysctl net.inet.tcp.sendspace=4096");
353
}
354

    
355
/* if we are operating at 1000 then increase timeouts.
356
   this was never accounted for after moving to 1000 hz */
357
$kern_hz = `sysctl kern.clockrate | awk '{ print $5 }' | cut -d"," -f1`;
358
$kern_hz = trim($kern_hz, "\r\n");
359
if($kern_hz == "1000") 
360
	mwexec("sysctl net.inet.tcp.rexmit_min=30");
361

    
362
/* start the igmpproxy daemon */
363
services_igmpproxy_configure();
364

    
365
/* start the upnp daemon if it is enabled */
366
upnp_start();
367

    
368
/* If powerd is enabled, lets launch it */
369
activate_powerd();
370

    
371
/* done */
372
unset($g['booting']);
373

    
374
led_normalize();
375

    
376
conf_mount_ro();
377

    
378
?>
(32-32/94)