update.php 14.2 KB
Newer Older
tbrehm's avatar
tbrehm committed
1
2
3
<?php

/*
vogelor's avatar
vogelor committed
4
Copyright (c) 2007-2010, Till Brehm, projektfarm Gmbh
tbrehm's avatar
tbrehm committed
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
All rights reserved.

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

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of ISPConfig nor the names of its contributors
      may be used to endorse or promote products derived from this software without
      specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

redray's avatar
redray committed
31
32
33
34
35
/*
	ISPConfig 3 updater.
*/

error_reporting(E_ALL|E_STRICT);
36

tbrehm's avatar
tbrehm committed
37
38
//** The banner on the command line
echo "\n\n".str_repeat('-',80)."\n";
vogelor's avatar
vogelor committed
39
40
41
42
43
44
echo " _____ ___________   _____              __ _         ____
|_   _/  ___| ___ \ /  __ \            / _(_)       /__  \
  | | \ `--.| |_/ / | /  \/ ___  _ __ | |_ _  __ _    _/ /
  | |  `--. \  __/  | |    / _ \| '_ \|  _| |/ _` |  |_ |
 _| |_/\__/ / |     | \__/\ (_) | | | | | | | (_| | ___\ \
 \___/\____/\_|      \____/\___/|_| |_|_| |_|\__, | \____/
tbrehm's avatar
tbrehm committed
45
46
47
48
                                              __/ |
                                             |___/ ";
echo "\n".str_repeat('-',80)."\n";
echo "\n\n>> Update  \n\n";
tbrehm's avatar
tbrehm committed
49

50
//** Include the library with the basic installer functions
tbrehm's avatar
tbrehm committed
51
52
require_once('lib/install.lib.php');

53
54
55
//** Include the library with the basic updater functions
require_once('lib/update.lib.php');

56
//** Include the base class of the installer class
tbrehm's avatar
tbrehm committed
57
58
require_once('lib/installer_base.lib.php');

59
60
61
62
//** Ensure that current working directory is install directory
$cur_dir = getcwd();
if(realpath(dirname(__FILE__)) != $cur_dir) die("Please run installation/update from _inside_ the install directory!\n");

redray's avatar
redray committed
63
//** Install logfile
oliver's avatar
oliver committed
64
define('ISPC_LOG_FILE', '/var/log/ispconfig_install.log');
65
define('ISPC_INSTALL_ROOT', realpath(dirname(__FILE__).'/../'));
oliver's avatar
oliver committed
66

67
68
69
70
71
//** Check for ISPConfig 2.x versions
if(is_dir('/root/ispconfig') || is_dir('/home/admispconfig')) {
	die('This software can not be installed on a server wich runs ISPConfig 2.x.');
}

oliver's avatar
oliver committed
72
//** Get distribution identifier
tbrehm's avatar
tbrehm committed
73
$dist = get_distname();
tbrehm's avatar
tbrehm committed
74
75
76

include_once("/usr/local/ispconfig/server/lib/config.inc.php");
$conf_old = $conf;
77
unset($conf);
tbrehm's avatar
tbrehm committed
78

tbrehm's avatar
tbrehm committed
79
80
if($dist['id'] == '') die('Linux Dustribution or Version not recognized.');

81
//** Include the distribution specific installer class library and configuration
tbrehm's avatar
tbrehm committed
82
83
84
if(is_file('dist/lib/'.$dist['baseid'].'.lib.php')) include_once('dist/lib/'.$dist['baseid'].'.lib.php');
include_once('dist/lib/'.$dist['id'].'.lib.php');
include_once('dist/conf/'.$dist['id'].'.conf.php');
tbrehm's avatar
tbrehm committed
85

86
87
88
89
90
91
//** Get hostname
exec('hostname -f', $tmp_out);
$conf['hostname'] = $tmp_out[0];
unset($tmp_out);


92
//** Set the mysql login information
93
94
$conf["mysql"]["host"] = $conf_old["db_host"];
$conf["mysql"]["database"] = $conf_old["db_database"];
redray's avatar
redray committed
95
$conf['mysql']['charset'] = 'utf8';
96
97
$conf["mysql"]["ispconfig_user"] = $conf_old["db_user"];
$conf["mysql"]["ispconfig_password"] = $conf_old["db_password"];
98
$conf['language'] = $conf_old['language'];
99
if($conf['language'] == '{language}') $conf['language'] = 'en';
tbrehm's avatar
tbrehm committed
100

101
102
103
104
if(isset($conf_old["dbmaster_host"])) $conf["mysql"]["master_host"] = $conf_old["dbmaster_host"];
if(isset($conf_old["dbmaster_database"])) $conf["mysql"]["master_database"] = $conf_old["dbmaster_database"];
if(isset($conf_old["dbmaster_user"])) $conf["mysql"]["master_ispconfig_user"] = $conf_old["dbmaster_user"];
if(isset($conf_old["dbmaster_password"])) $conf["mysql"]["master_ispconfig_password"] = $conf_old["dbmaster_password"];
105

106
107
108
109
110
//* Check if this is a master / slave setup
if($conf["mysql"]["master_host"] != '' && $conf["mysql"]["host"] != $conf["mysql"]["master_host"]) {
	$conf['mysql']['master_slave_setup'] = 'y';
}

111
112
113
// Resolve the IP address of the mysql hostname.
if(!$conf['mysql']['ip'] = gethostbyname($conf['mysql']['host'])) die('Unable to resolve hostname'.$conf['mysql']['host']);

114
$conf['server_id'] = intval($conf_old["server_id"]);
115
$conf['ispconfig_log_priority'] = $conf_old["log_priority"];
116

tbrehm's avatar
tbrehm committed
117
$inst = new installer();
tbrehm's avatar
tbrehm committed
118
$inst->is_update = true;
tbrehm's avatar
tbrehm committed
119

tbrehm's avatar
tbrehm committed
120
121
122
//** Detect the installed applications
$inst->find_installed_apps();

tbrehm's avatar
tbrehm committed
123
124
echo "This application will update ISPConfig 3 on your server.\n";

125
//** Initialize the MySQL server connection
tbrehm's avatar
tbrehm committed
126
127
include_once('lib/mysql.lib.php');

128
//** Database update is a bit brute force and should be rebuild later ;)
tbrehm's avatar
tbrehm committed
129

vogelor's avatar
vogelor committed
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
 * Try to read the DB-admin settings
 */
$clientdb_host			= '';
$clientdb_user			= '';
$clientdb_password		= '';
include_once("/usr/local/ispconfig/server/lib/mysql_clientdb.conf");
$conf["mysql"]["admin_user"] = $clientdb_user;
$conf["mysql"]["admin_password"] = $clientdb_password;
$clientdb_host			= '';
$clientdb_user			= '';
$clientdb_password		= '';

143
//** Ask user for mysql admin_password if empty
oliver's avatar
oliver committed
144
145
146
if( empty($conf["mysql"]["admin_password"]) ) {

	$conf["mysql"]["admin_password"] = $inst->free_query('MySQL root password', $conf['mysql']['admin_password']);
tbrehm's avatar
tbrehm committed
147
148
}

149
150
151
152
/*
 *  Prepare the dump of the database 
 */
prepareDBDump();
153
154

//* initialize the database
oliver's avatar
oliver committed
155
156
$inst->db = new db();

157
158
//* initialize the master DB, if we have a multiserver setup
if($conf['mysql']['master_slave_setup'] == 'y') {
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
		//** Get MySQL root credentials
		$finished = false;
		do {
			$tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host']);
			$tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user']);
			$tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password']);
    		$tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database']);
	
			//* Initialize the MySQL server connection
			if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
				$conf['mysql']['master_host'] = $tmp_mysql_server_host;
				$conf['mysql']['master_admin_user'] = $tmp_mysql_server_admin_user;
				$conf['mysql']['master_admin_password'] = $tmp_mysql_server_admin_password;
				$conf['mysql']['master_database'] = $tmp_mysql_server_database;
				$finished = true;
			} else {
				swriteln($inst->lng('Unable to connect to mysql server').' '.mysql_error());
			}
		} while ($finished == false);
		unset($finished);
		
		// initialize the connection to the master database
		$inst->dbmaster = new db();
		if($inst->dbmaster->linkId) $inst->dbmaster->closeConn();
		$inst->dbmaster->dbHost = $conf['mysql']["master_host"];
		$inst->dbmaster->dbName = $conf['mysql']["master_database"];
		$inst->dbmaster->dbUser = $conf['mysql']["master_admin_user"];
		$inst->dbmaster->dbPass = $conf['mysql']["master_admin_password"];
187
188
189
190
} else {
	$inst->dbmaster = $inst->db;
}

oliver's avatar
oliver committed
191

192
193
194
195
/*
 *  dump the new Database and reconfigure the server.ini
 */
updateDbAndIni();
tbrehm's avatar
tbrehm committed
196

197
198
199
200
201
202
/*
 * Reconfigure the permisson if needed
 * (if this is done at client side, only this client is updated.
 * If this is done at server side, all clients are updated.
 */
//if($conf['mysql']['master_slave_setup'] == 'y') {
203
204
205
206
207
208
	//** Update master database rights
	$reconfigure_master_database_rights_answer = $inst->simple_query('Reconfigure Permissions in master database?', array('yes','no'),'no');

	if($reconfigure_master_database_rights_answer == 'yes') {
		$inst->grant_master_database_rights();
	}
209
//}
210

211
//** Shall the services be reconfigured during update
tbrehm's avatar
tbrehm committed
212
$reconfigure_services_answer = $inst->simple_query('Reconfigure Services?', array('yes','no'),'yes');
tbrehm's avatar
tbrehm committed
213

214
if($reconfigure_services_answer == 'yes') {
215
	
216
217
	if($conf['services']['mail']) {
		//** Configure postfix
Falko Timme's avatar
Falko Timme committed
218
		swriteln('Configuring Postfix');
219
		$inst->configure_postfix('dont-create-certs');
220
	
Falko Timme's avatar
Falko Timme committed
221
		//* Configure Jailkit
222
223
		swriteln('Configuring Jailkit');
		$inst->configure_jailkit();
224
	
225
226
227
228
229
230
231
		//** Configure saslauthd
		swriteln('Configuring SASL');
		$inst->configure_saslauthd();
	
		//** Configure PAM
		swriteln('Configuring PAM');
		$inst->configure_pam();
tbrehm's avatar
tbrehm committed
232

233
234
235
236
237
238
239
240
241
		if($conf['dovecot']['installed'] == true) {
			//* Configure dovecot
			swriteln('Configuring Dovecot');
			$inst->configure_dovecot();
		} else {
			//* Configure courier
			swriteln('Configuring Courier');
			$inst->configure_courier();
		}
tbrehm's avatar
tbrehm committed
242

243
244
245
		//** Configure Spamasassin
		swriteln('Configuring Spamassassin');
		$inst->configure_spamassassin();
tbrehm's avatar
tbrehm committed
246

247
248
249
		//** Configure Amavis
		swriteln('Configuring Amavisd');
		$inst->configure_amavis();
250

251
252
253
254
		//** Configure Getmail
		swriteln('Configuring Getmail');
		$inst->configure_getmail();
	}
tbrehm's avatar
tbrehm committed
255
	
256
257
258
259
260
261
262
	if($conf['services']['web']) {
		//** Configure Pureftpd
		swriteln('Configuring Pureftpd');
		$inst->configure_pureftpd();
	}
	
	if($conf['services']['dns']) {
263
264
265
266
		//* Configure DNS
		if($conf['powerdns']['installed'] == true) {
			swriteln('Configuring PowerDNS');
			$inst->configure_powerdns();
267
268
269
		} elseif($conf['bind']['installed'] == true) {
			swriteln('Configuring BIND');
			$inst->configure_bind();
270
271
272
273
		} else {
			swriteln('Configuring MyDNS');
			$inst->configure_mydns();
		}
274
275
276
277
278
279
	}
	
	if($conf['services']['web']) {
		//** Configure Apache
		swriteln('Configuring Apache');
		$inst->configure_apache();
280
281
282
283
        
        //** Configure vlogger
        swriteln('Configuring vlogger');
        $inst->configure_vlogger();
284
285
286
287
		
		//** Configure apps vhost
		swriteln('Configuring Apps vhost');
		$inst->configure_apps_vhost();
288
289
290
	}
	

tbrehm's avatar
tbrehm committed
291
	//* Configure DBServer
292
	swriteln('Configuring Database');
tbrehm's avatar
tbrehm committed
293
	$inst->configure_dbserver();
294

tbrehm's avatar
tbrehm committed
295
	
296
	//if(@is_dir('/etc/Bastille')) {
297
298
299
	//* Configure Firewall
	swriteln('Configuring Firewall');
	$inst->configure_firewall();
300
	//}
301
}
302

303
//** Configure ISPConfig
304
swriteln('Updating ISPConfig');
daniel's avatar
daniel committed
305
306
307


//** Customise the port ISPConfig runs on
308
$conf['apache']['vhost_port'] = $inst->free_query('ISPConfig Port', '8080');
daniel's avatar
daniel committed
309

tbrehm's avatar
tbrehm committed
310
311
$inst->install_ispconfig();

312
//** Configure Crontab
tbrehm's avatar
tbrehm committed
313
$update_crontab_answer = $inst->simple_query('Reconfigure Crontab?', array('yes','no'),'yes');
314
315
316
317
if($update_crontab_answer == 'yes') {
	swriteln('Updating Crontab');
	$inst->install_crontab();
}
tbrehm's avatar
tbrehm committed
318

319
//** Restart services:
320
321
if($reconfigure_services_answer == 'yes') {
	swriteln('Restarting services ...');
tbrehm's avatar
tbrehm committed
322
	if($conf['mysql']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['mysql']['init_script']))					system($conf['init_scripts'].'/'.$conf['mysql']['init_script'].' restart');
323
	if($conf['services']['mail']) {
tbrehm's avatar
tbrehm committed
324
325
326
327
328
329
330
331
332
		if($conf['postfix']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['postfix']['init_script']))				system($conf['init_scripts'].'/'.$conf['postfix']['init_script'].' restart');
		if($conf['saslauthd']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['saslauthd']['init_script']))			system($conf['init_scripts'].'/'.$conf['saslauthd']['init_script'].' restart');
		if($conf['amavis']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['amavis']['init_script']))					system($conf['init_scripts'].'/'.$conf['amavis']['init_script'].' restart');
		if($conf['clamav']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['clamav']['init_script']))					system($conf['init_scripts'].'/'.$conf['clamav']['init_script'].' restart');
		if($conf['courier']['courier-authdaemon'] != '' && is_file($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'])) system($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'].' restart');
		if($conf['courier']['courier-imap'] != '' && is_file($conf['init_scripts'].'/'.$conf['courier']['courier-imap'])) 			system($conf['init_scripts'].'/'.$conf['courier']['courier-imap'].' restart');
		if($conf['courier']['courier-imap-ssl'] != '' && is_file($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'])) 	system($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'].' restart');
		if($conf['courier']['courier-pop'] != '' && is_file($conf['init_scripts'].'/'.$conf['courier']['courier-pop'])) 				system($conf['init_scripts'].'/'.$conf['courier']['courier-pop'].' restart');
		if($conf['courier']['courier-pop-ssl'] != '' && is_file($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'])) 		system($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'].' restart');
333
		if($conf['dovecot']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['dovecot']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['dovecot']['init_script'].' restart');
334
335
	}
	if($conf['services']['web']) {
tbrehm's avatar
tbrehm committed
336
337
		if($conf['apache']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['apache']['init_script'])) 				system($conf['init_scripts'].'/'.$conf['apache']['init_script'].' restart');
		if($conf['pureftpd']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['pureftpd']['init_script']))				system($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'].' restart');
338
339
	}
	if($conf['services']['dns']) {
340
341
		if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['mydns']['init_script']))					system($conf['init_scripts'].'/'.$conf['mydns']['init_script'].' restart &> /dev/null');
		if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['powerdns']['init_script']))					system($conf['init_scripts'].'/'.$conf['powerdns']['init_script'].' restart &> /dev/null');
342
		if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['bind']['init_script']))					system($conf['init_scripts'].'/'.$conf['bind']['init_script'].' restart &> /dev/null');
343
	}
344
}
tbrehm's avatar
tbrehm committed
345
346
347

echo "Update finished.\n";

348
?>