Project

General

Profile

Download (10.4 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
$lan_if = $config['interfaces']['lan']['if'];
161
$wan_if = get_real_interface();
162

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

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

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

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

    
189
/* enable glxsb if wanted */
190
load_glxsb();
191

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

    
195
/* set up our timezone */
196
system_timezone_configure();
197

    
198
/* set up our hostname */
199
system_hostname_configure();
200

    
201
/* make hosts file */
202
system_hosts_generate();
203

    
204
/* configure loopback interface */
205
interfaces_loopback_configure();
206

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

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

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

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

    
228
/* re-make hosts file after configuring interfaces */
229
system_hosts_generate();
230

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

    
236
/* generate resolv.conf */
237
system_resolvconf_generate();
238

    
239
/* start syslogd */
240
system_syslogd_start();
241

    
242
/* setup altq + pf */
243
filter_configure_sync();
244

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

    
250
/* start load balancer daemon */
251
relayd_configure();
252

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

    
258
echo "Synchronizing user settings...";
259
if (empty($config['system']['webgui']['backend']))
260
	local_sync_accounts();
261
echo "done.\n";
262

    
263
if($avail > 0 and $avail < 65) {
264
	echo "System has less than 65 megabytes of ram {$avail}.  Delaying webConfigurator startup.\n";
265
	/* start webConfigurator up on final pass */
266
	touch("/tmp/restart_webgui");
267
} else {
268
	/* start web server */
269
	system_webgui_start();
270
}
271

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

    
277
/* set up static routes */
278
system_routing_configure();
279

    
280
/* enable routing */
281
system_routing_enable();
282

    
283
/* configure console menu */
284
system_console_configure();
285

    
286
/* start the NTP client */
287
echo "Starting OpenNTP time client...";
288
system_ntp_configure();
289
echo "done.\n";
290

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

    
294
/* static IP address? -> attempt DNS update */
295
if (is_ipaddr($config['interfaces']['wan']['ipaddr']))
296
	services_dnsupdate_process();
297

    
298
/* start DHCP service */
299
services_dhcpd_configure();
300

    
301
/* start dnsmasq service */
302
services_dnsmasq_configure();
303

    
304
/* start dhcpleases dhpcp hosts leases program */
305
system_dhcpleases_configure();
306

    
307
/* start dyndns service */
308
@touch("{$g['tmp_path']}/update_dyndns");
309

    
310
/* start DHCP relay */
311
services_dhcrelay_configure();
312

    
313
/* setup pppoe and pptp */
314
vpn_setup();
315

    
316
/* start the captive portal */
317
captiveportal_configure();
318

    
319
/* start Voucher support */
320
voucher_configure();
321

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

    
325
/* start IPsec tunnels */
326
vpn_ipsec_configure();
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
/* Run a filter configure now that most all services have started */
338
filter_configure_sync();
339

    
340
/* load graphing functions */
341
enable_rrd_graphing();
342

    
343
/* startup OLSR if needed */
344
setup_wireless_olsr();
345

    
346
/* startup routed if needed */
347
include_once("/usr/local/pkg/routed/routed.inc");
348
setup_routed();
349

    
350
/* enable watchdog if supported */
351
enable_watchdog();
352

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

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

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

    
373
/* start the igmpproxy daemon */
374
services_igmpproxy_configure();
375

    
376
/* start the upnp daemon if it is enabled */
377
upnp_start();
378

    
379
/* If powerd is enabled, lets launch it */
380
activate_powerd();
381

    
382
/* Remove the old shutdown binary if we kept it. */
383
if (file_exists("/sbin/shutdown.old"))
384
	unlink("/sbin/shutdown.old");
385

    
386
/* done */
387
unset($g['booting']);
388

    
389
led_normalize();
390

    
391
conf_mount_ro();
392

    
393
?>
(34-34/98)