update.php 14.6 KB
Newer Older
tbrehm's avatar
tbrehm committed
1
2
3
4
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
<?php

/*
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
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
39
40
41
42
43
44
45
46
47
48
//** The banner on the command line
echo "\n\n".str_repeat('-',80)."\n";
echo " _____ ___________   _____              __ _       
|_   _/  ___| ___ \ /  __ \            / _(_)      
  | | \ `--.| |_/ / | /  \/ ___  _ __ | |_ _  __ _ 
  | |  `--. \  __/  | |    / _ \| '_ \|  _| |/ _` |
 _| |_/\__/ / |     | \__/\ (_) | | | | | | | (_| |
 \___/\____/\_|      \____/\___/|_| |_|_| |_|\__, |
                                              __/ |
                                             |___/ ";
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
//** Include the base class of the installer class
tbrehm's avatar
tbrehm committed
54
55
require_once('lib/installer_base.lib.php');

redray's avatar
redray committed
56
//** Install logfile
oliver's avatar
oliver committed
57
define('ISPC_LOG_FILE', '/var/log/ispconfig_install.log');
58
define('ISPC_INSTALL_ROOT', realpath(dirname(__FILE__).'/../'));
oliver's avatar
oliver committed
59

60
61
62
63
64
//** 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
65
//** Get distribution identifier
tbrehm's avatar
tbrehm committed
66
$dist = get_distname();
tbrehm's avatar
tbrehm committed
67
68
69

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

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

74
//** Include the distribution specific installer class library and configuration
tbrehm's avatar
tbrehm committed
75
76
77
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
78

79
80
81
82
83
84
//** Get hostname
exec('hostname -f', $tmp_out);
$conf['hostname'] = $tmp_out[0];
unset($tmp_out);


85
//** Set the mysql login information
86
87
$conf["mysql"]["host"] = $conf_old["db_host"];
$conf["mysql"]["database"] = $conf_old["db_database"];
redray's avatar
redray committed
88
$conf['mysql']['charset'] = 'utf8';
89
90
$conf["mysql"]["ispconfig_user"] = $conf_old["db_user"];
$conf["mysql"]["ispconfig_password"] = $conf_old["db_password"];
tbrehm's avatar
tbrehm committed
91

92
93
94
95
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"];
96

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

100
$conf['server_id'] = intval($conf_old["server_id"]);
101
$conf['ispconfig_log_priority'] = $conf_old["log_priority"];
102

tbrehm's avatar
tbrehm committed
103
$inst = new installer();
tbrehm's avatar
tbrehm committed
104
$inst->is_update = true;
tbrehm's avatar
tbrehm committed
105

tbrehm's avatar
tbrehm committed
106
107
108
//** Detect the installed applications
$inst->find_installed_apps();

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

111
//** Initialize the MySQL server connection
tbrehm's avatar
tbrehm committed
112
113
include_once('lib/mysql.lib.php');

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

116
//** Ask user for mysql admin_password if empty
oliver's avatar
oliver committed
117
118
119
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
120
121
}

122
123
124
125
126
127
128
129
130
//** load the pre update sql script do perform modifications on the database before the database is dumped
if(is_file(ISPC_INSTALL_ROOT."/install/sql/pre_update.sql")) {
	if($conf['mysql']['admin_password'] == '') {
		caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' '".$conf['mysql']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/pre_update.sql' &> /dev/null", __FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql');
	} else {
		caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' '".$conf['mysql']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/pre_update.sql' &> /dev/null", __FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql');
	}
}

131
//** export the current database data
oliver's avatar
oliver committed
132
133
if( !empty($conf["mysql"]["admin_password"]) ) {

134
	system("mysqldump -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' -c -t --add-drop-table --all --quick ".$conf['mysql']['database']." > existing_db.sql");
oliver's avatar
oliver committed
135
136
137
}
else {

138
	system("mysqldump -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -c -t --add-drop-table --all --quick ".$conf['mysql']['database']." > existing_db.sql");
oliver's avatar
oliver committed
139
}
tbrehm's avatar
tbrehm committed
140

141
142

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

145
146
//* Update $conf array with values from the server.ini that shall be preserved
$tmp = $inst->db->queryOneRecord("SELECT * FROM ".$conf["mysql"]["database"].".server WHERE server_id = ".$conf['server_id']);
147
$ini_array = ini_to_array(stripslashes($tmp['config']));
148
149
150
151
152
153
154

$conf['services']['mail'] = ($tmp['mail_server'] == 1)?true:false;
$conf['services']['web'] = ($tmp['web_server'] == 1)?true:false;
$conf['services']['dns'] = ($tmp['dns_server'] == 1)?true:false;
$conf['services']['file'] = ($tmp['file_server'] == 1)?true:false;
$conf['services']['db'] = ($tmp['db_server'] == 1)?true:false;
$conf['services']['vserver'] = ($tmp['vserver_server'] == 1)?true:false;
155
$conf['postfix']['vmail_mailbox_base'] = $ini_array['mail']['homedir_path'];
156
157

//** Delete the old database
oliver's avatar
oliver committed
158
159
160
161
162
if( !$inst->db->query('DROP DATABASE IF EXISTS '.$conf['mysql']['database']) ) {

	$inst->error('Unable to drop MySQL database: '.$conf['mysql']['database'].'.');
}

163
//** Create the mysql database
tbrehm's avatar
tbrehm committed
164
165
$inst->configure_database();

166
//** empty all databases
tbrehm's avatar
tbrehm committed
167
$db_tables = $inst->db->getTables();
168

tbrehm's avatar
tbrehm committed
169
foreach($db_tables as $table) {
170

tbrehm's avatar
tbrehm committed
171
172
173
	$inst->db->query("TRUNCATE $table");
}

174
175
176
//** load old data back into database
if( !empty($conf["mysql"]["admin_password"]) ) {

177
	system("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' ".$conf['mysql']['database']." < existing_db.sql");
tbrehm's avatar
tbrehm committed
178
} else {
179

180
	system("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' ".$conf['mysql']['database']." < existing_db.sql");
tbrehm's avatar
tbrehm committed
181
}
182

183
// create a backup copy of the ispconfig database in the root folder
184
$backup_db_name = '/root/ispconfig_db_backup_'.@date('Y-m-d_h-i').'.sql';
185
186
187
188
189
copy('existing_db.sql',$backup_db_name);
exec("chmod 700 $backup_db_name");
exec("chown root:root $backup_db_name");


190
191
192
193
194
195
196
//** Update server ini
$tmp_server_rec = $inst->db->queryOneRecord("SELECT config FROM server WHERE server_id = ".$conf['server_id']);
$old_ini_array = ini_to_array(stripslashes($tmp_server_rec['config']));
unset($tmp_server_rec);
$tpl_ini_array = ini_to_array(rf('tpl/server.ini.master'));

// update the new template with the old values
197
198
199
200
201
if(is_array($old_ini_array)) {
	foreach($old_ini_array as $tmp_section_name => $tmp_section_content) {
		foreach($tmp_section_content as $tmp_var_name => $tmp_var_content) {
			$tpl_ini_array[$tmp_section_name][$tmp_var_name] = $tmp_var_content;
		}
202
203
204
205
	}
}

$new_ini = array_to_ini($tpl_ini_array);
206
$inst->db->query("UPDATE server SET config = '".mysql_real_escape_string($new_ini)."' WHERE server_id = ".$conf['server_id']);
207
208
209
210
211
unset($old_ini_array);
unset($tpl_ini_array);
unset($new_ini);


212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
//** Update system ini
$tmp_server_rec = $inst->db->queryOneRecord("SELECT config FROM sys_ini WHERE sysini_id = 1");
$old_ini_array = ini_to_array(stripslashes($tmp_server_rec['config']));
unset($tmp_server_rec);
$tpl_ini_array = ini_to_array(rf('tpl/system.ini.master'));

// update the new template with the old values
if(is_array($old_ini_array)) {
	foreach($old_ini_array as $tmp_section_name => $tmp_section_content) {
		foreach($tmp_section_content as $tmp_var_name => $tmp_var_content) {
			$tpl_ini_array[$tmp_section_name][$tmp_var_name] = $tmp_var_content;
		}
	}
}

$new_ini = array_to_ini($tpl_ini_array);
228
229
230
231
232
233
$tmp = $inst->db->queryOneRecord('SELECT count(sysini_id) as number FROM sys_ini WHERE 1');
if($tmp['number'] == 0) {
	$inst->db->query("INSERT INTO sys_ini (sysini_id, config) VALUES (1,'".mysql_real_escape_string($new_ini)."')");
} else {
	$inst->db->query("UPDATE sys_ini SET config = '".mysql_real_escape_string($new_ini)."' WHERE sysini_id = 1");
}
234
235
236
237
238
unset($old_ini_array);
unset($tpl_ini_array);
unset($new_ini);


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

242
if($reconfigure_services_answer == 'yes') {
243
	
244
245
	if($conf['services']['mail']) {
		//** Configure postfix
Falko Timme's avatar
Falko Timme committed
246
		swriteln('Configuring Postfix');
247
		$inst->configure_postfix('dont-create-certs');
248
	
Falko Timme's avatar
Falko Timme committed
249
		//* Configure Jailkit
250
251
		swriteln('Configuring Jailkit');
		$inst->configure_jailkit();
252
	
253
254
255
256
257
258
259
		//** Configure saslauthd
		swriteln('Configuring SASL');
		$inst->configure_saslauthd();
	
		//** Configure PAM
		swriteln('Configuring PAM');
		$inst->configure_pam();
tbrehm's avatar
tbrehm committed
260

261
262
263
		//** Configure courier
		swriteln('Configuring Courier');
		$inst->configure_courier();
tbrehm's avatar
tbrehm committed
264

265
266
267
		//** Configure Spamasassin
		swriteln('Configuring Spamassassin');
		$inst->configure_spamassassin();
tbrehm's avatar
tbrehm committed
268

269
270
271
		//** Configure Amavis
		swriteln('Configuring Amavisd');
		$inst->configure_amavis();
272

273
274
275
276
		//** Configure Getmail
		swriteln('Configuring Getmail');
		$inst->configure_getmail();
	}
tbrehm's avatar
tbrehm committed
277
	
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
	if($conf['services']['web']) {
		//** Configure Pureftpd
		swriteln('Configuring Pureftpd');
		$inst->configure_pureftpd();
	}
	
	if($conf['services']['dns']) {
		//** Configure MyDNS
		swriteln('Configuring MyDNS');
		$inst->configure_mydns();
	}
	
	if($conf['services']['web']) {
		//** Configure Apache
		swriteln('Configuring Apache');
		$inst->configure_apache();
	}
	

tbrehm's avatar
tbrehm committed
297
	//* Configure DBServer
298
	swriteln('Configuring Database');
tbrehm's avatar
tbrehm committed
299
	$inst->configure_dbserver();
300

tbrehm's avatar
tbrehm committed
301
	
302
	//if(@is_dir('/etc/Bastille')) {
303
304
305
	//* Configure Firewall
	swriteln('Configuring Firewall');
	$inst->configure_firewall();
306
	//}
307
}
308

309
//** Configure ISPConfig
310
swriteln('Updating ISPConfig');
daniel's avatar
daniel committed
311
312
313


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

tbrehm's avatar
tbrehm committed
316
317
$inst->install_ispconfig();

318
//** Configure Crontab
tbrehm's avatar
tbrehm committed
319
$update_crontab_answer = $inst->simple_query('Reconfigure Crontab?', array('yes','no'),'yes');
320
321
322
323
if($update_crontab_answer == 'yes') {
	swriteln('Updating Crontab');
	$inst->install_crontab();
}
tbrehm's avatar
tbrehm committed
324

325
//** Restart services:
326
327
if($reconfigure_services_answer == 'yes') {
	swriteln('Restarting services ...');
tbrehm's avatar
tbrehm committed
328
	if($conf['mysql']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['mysql']['init_script']))					system($conf['init_scripts'].'/'.$conf['mysql']['init_script'].' restart');
329
	if($conf['services']['mail']) {
tbrehm's avatar
tbrehm committed
330
331
332
333
334
335
336
337
338
		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');
339
340
	}
	if($conf['services']['web']) {
tbrehm's avatar
tbrehm committed
341
342
		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');
343
344
	}
	if($conf['services']['dns']) {
tbrehm's avatar
tbrehm committed
345
		if($conf['mydns']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['mydns']['init_script']))					system($conf['init_scripts'].'/'.$conf['mydns']['init_script'].' restart &> /dev/null');
346
	}
347
}
tbrehm's avatar
tbrehm committed
348
349
350

echo "Update finished.\n";

351
?>