Project

General

Profile

Download (8.22 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/* $Id$ */
3
/*
4
	pkg_mgr_install.php
5
	part of pfSense (http://www.pfSense.com)
6
	Copyright (C) 2004-2010 Scott Ullrich <sullrich@gmail.com>
7
 	Copyright (C) 2005 Colin Smith
8
	All rights reserved.
9

    
10
	Redistribution and use in source and binary forms, with or without
11
	modification, are permitted provided that the following conditions are met:
12

    
13
	1. Redistributions of source code must retain the above copyright notice,
14
	   this list of conditions and the following disclaimer.
15

    
16
	2. Redistributions in binary form must reproduce the above copyright
17
	   notice, this list of conditions and the following disclaimer in the
18
	   documentation and/or other materials provided with the distribution.
19

    
20
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
21
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
22
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
23
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
24
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
	POSSIBILITY OF SUCH DAMAGE.
30
*/
31
/*
32
	pfSense_BUILDER_BINARIES:	/bin/rm
33
	pfSense_MODULE:	pkgs
34
*/
35

    
36
##|+PRIV
37
##|*IDENT=page-system-packagemanager-installpackage
38
##|*NAME=System: Package Manager: Install Package page
39
##|*DESCR=Allow access to the 'System: Package Manager: Install Package' page.
40
##|*MATCH=pkg_mgr_install.php*
41
##|-PRIV
42

    
43
ini_set('max_execution_time', '0');
44

    
45
require("guiconfig.inc");
46
require_once("functions.inc");
47
require_once("filter.inc");
48
require_once("shaper.inc");
49
require_once("pkg-utils.inc");
50

    
51
$static_output = "";
52
$static_status = "";
53
$sendto = "output";
54

    
55
$pgtitle = array(gettext("System"),gettext("Package Manager"),gettext("Install Package"));
56
include("head.inc");
57

    
58
?>
59

    
60
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
61
<?php include("fbegin.inc"); ?>
62
	<form action="pkg_mgr_install.php" method="post">
63
		<div id="mainareapkg">
64
			<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package manager install">
65
				<tr>
66
					<td>
67
						<?php
68
//							$version = file_get_contents("/etc/version");
69
							$tab_array = array();
70
							$tab_array[] = array(gettext("Available packages"), false, "pkg_mgr.php");
71
//							$tab_array[] = array("Packages for any platform", false, "pkg_mgr.php?ver=none");
72
//							$tab_array[] = array("Packages for a different platform", $requested_version == "other" ? true : false, "pkg_mgr.php?ver=other");
73
							$tab_array[] = array(gettext("Installed packages"), false, "pkg_mgr_installed.php");
74
							$tab_array[] = array(gettext("Package Installer"), true, "");
75
							display_top_tabs($tab_array);
76
						?>
77
					</td>
78
				</tr>
79
				<tr>
80
					<td class="tabcont" align="center">
81
						<table style="height:15;colspacing:0" width="420" border="0" cellpadding="0" cellspacing="0" summary="images">
82
							<tr>
83
								<td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_left.gif')" height="15" width="5"></td>
84
								<td>
85
									<table id="progholder" style="height:15;colspacing:0" width="410" border="0" cellpadding="0" cellspacing="0" summary="progress bar">
86
										<tr><td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_gray.gif')" valign="top" align="left">
87
											<img src='./themes/<?= $g['theme']; ?>/images/misc/bar_blue.gif' width="0" height="15" name="progressbar" id="progressbar" alt="progress bar" />
88
										</td></tr>
89
									</table>
90
								</td>
91
								<td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_right.gif')" height="15" width="5">
92
								</td>
93
							</tr>
94
						</table>
95
						<br/>
96
						<!-- status box -->
97
						<textarea cols="80" rows="1" name="status" id="status" wrap="hard"><?=gettext("Beginning package installation.");?></textarea>
98
						<!-- command output box -->
99
						<textarea cols="80" rows="35" name="output" id="output" wrap="hard"></textarea>
100
					</td>
101
				</tr>
102
			</table>
103
		</div>
104
	</form>
105
<?php include("fend.inc"); ?>
106
<script type="text/javascript">
107
//<![CDATA[
108
NiftyCheck();
109
Rounded("div#mainareapkg","bl br","#FFF","#eeeeee","smooth");
110
//]]>
111
</script>
112

    
113
<?php
114

    
115
ob_flush();
116

    
117
switch($_GET['mode']) {
118
	case "showlog":
119
	case "installedinfo":
120
		/* These cases do not make changes. */
121
		$fs_mounted_rw = false;
122
		break;
123
	default:
124
		/* All other cases make changes, so mount rw fs */
125
		conf_mount_rw();
126
		$fs_mounted_rw = true;
127
		/* Write out configuration to create a backup prior to pkg install. */
128
		write_config(gettext("Creating restore point before package installation."));
129
		break;
130
}
131

    
132
switch($_GET['mode']) {
133
	case "delete":
134
		uninstall_package($_GET['pkg']);
135
		update_status(gettext("Package deleted."));
136
		$static_output .= "\n" . gettext("Package deleted.");
137
		update_output_window($static_output);
138
		filter_configure();
139
		break;
140
	case "showlog":
141
		$id = htmlspecialchars($_GET['pkg']);
142
		if(strpos($id, "."))
143
			exit;
144
		update_output_window(file_get_contents("/tmp/pkg_mgr_{$id}.log"));
145
		break;
146
	case "reinstallxml":
147
	case "reinstallpkg":
148
		delete_package_xml(htmlspecialchars($_GET['pkg']));
149
		if (install_package(htmlspecialchars($_GET['pkg'])) < 0) {
150
			update_status(gettext("Package reinstallation failed."));
151
			$static_output .= "\n" . gettext("Package reinstallation failed.");
152
			update_output_window($static_output);
153
		} else {
154
			update_status(gettext("Package reinstalled."));
155
			$static_output .= "\n" . gettext("Package reinstalled.");
156
			update_output_window($static_output);
157
			filter_configure();
158
		}
159
		file_put_contents("/tmp/{$_GET['pkg']}.info", $static_output);
160
		echo "<script type='text/javascript'>document.location=\"pkg_mgr_install.php?mode=installedinfo&pkg={$_GET['pkg']}\";</script>";
161
		break;
162
	case "installedinfo":
163
		if(file_exists("/tmp/{$_GET['pkg']}.info")) {
164
			$filename = escapeshellcmd("/tmp/" . $_GET['pkg']  . ".info");
165
			$status = file_get_contents($filename);
166
			update_status($_GET['pkg']  . " " . gettext("installation completed."));
167
			update_output_window($status);
168
		} else
169
			update_output_window(sprintf(gettext("Could not find %s."), htmlspecialchars($_GET['pkg'])));
170
		break;
171
	case "reinstallall":
172
		if (is_array($config['installedpackages']['package'])) {
173
			$todo = array();
174
			foreach($config['installedpackages']['package'] as $package)
175
				$todo[] = array('name' => $package['name'], 'version' => $package['version']);
176
			foreach($todo as $pkgtodo) {
177
				$static_output = "";
178
				if($pkgtodo['name']) {
179
					update_output_window($static_output);
180
					uninstall_package($pkgtodo['name']);
181
					install_package($pkgtodo['name']);
182
				}
183
			}
184
			update_status(gettext("All packages reinstalled."));
185
			$static_output .= "\n" . gettext("All packages reinstalled.");
186
			update_output_window($static_output);
187
			filter_configure();
188
		} else
189
			update_output_window(gettext("No packages are installed."));
190
		break;
191
	default:
192
		$pkgid = htmlspecialchars($_GET['id']);
193
		$status = install_package($pkgid);
194
		if($status == -1) {
195
			update_status(gettext("Installation of") . " {$pkgid} " . gettext("FAILED!"));
196
			$static_output .= "\n" . gettext("Installation halted.");
197
			update_output_window($static_output);
198
		} else {
199
			$status_a = gettext("Installation of") . " {$pkgid} " . gettext("completed.");
200
			update_status($status_a);
201
			$status = get_after_install_info($pkgid);
202
			if($status) 
203
				$static_output .= "\n" . gettext("Installation completed.") . "\n{$pkgid} " . gettext("setup instructions") . ":\n{$status}";
204
			else
205
				$static_output .= "\n" . gettext("Installation completed.   Please check to make sure that the package is configured from the respective menu then start the package.");
206
		file_put_contents("/tmp/{$pkgid}.info", $static_output);
207
		echo "<script type='text/javascript'>document.location=\"pkg_mgr_install.php?mode=installedinfo&pkg={$pkgid}\";</script>";
208
		}
209
		filter_configure();
210
		break;
211
}
212

    
213
// Delete all temporary package tarballs and staging areas.
214
unlink_if_exists("/tmp/apkg_*");
215
rmdir_recursive("/var/tmp/instmp*");
216

    
217
// close log
218
if($fd_log)
219
	fclose($fd_log);
220

    
221
if($fs_mounted_rw) {
222
	/* Restore to read only fs */
223
	conf_mount_ro();
224
}
225
?>
226

    
227
</body>
228
</html>
(131-131/246)