update.php 15 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');

56
57
58
59
//** 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
60
//** Install logfile
oliver's avatar
oliver committed
61
define('ISPC_LOG_FILE', '/var/log/ispconfig_install.log');
62
define('ISPC_INSTALL_ROOT', realpath(dirname(__FILE__).'/../'));
oliver's avatar
oliver committed
63

64
65
66
67
68
//** 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
69
//** Get distribution identifier
tbrehm's avatar
tbrehm committed
70
$dist = get_distname();
tbrehm's avatar
tbrehm committed
71
72
73

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

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

78
//** Include the distribution specific installer class library and configuration
tbrehm's avatar
tbrehm committed
79
80
81
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
82

83
84
85
86
87
88
//** Get hostname
exec('hostname -f', $tmp_out);
$conf['hostname'] = $tmp_out[0];
unset($tmp_out);


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

98
99
100
101
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"];
102

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

106
$conf['server_id'] = intval($conf_old["server_id"]);
107
$conf['ispconfig_log_priority'] = $conf_old["log_priority"];
108

tbrehm's avatar
tbrehm committed
109
$inst = new installer();
tbrehm's avatar
tbrehm committed
110
$inst->is_update = true;
tbrehm's avatar
tbrehm committed
111

tbrehm's avatar
tbrehm committed
112
113
114
//** Detect the installed applications
$inst->find_installed_apps();

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

117
//** Initialize the MySQL server connection
tbrehm's avatar
tbrehm committed
118
119
include_once('lib/mysql.lib.php');

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

122
//** Ask user for mysql admin_password if empty
oliver's avatar
oliver committed
123
124
125
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
126
127
}

128
129
130
131
132
133
134
135
136
//** 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');
	}
}

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

140
	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
141
142
143
}
else {

144
	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
145
}
tbrehm's avatar
tbrehm committed
146

147
148

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

151
152
//* 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']);
153
$ini_array = ini_to_array(stripslashes($tmp['config']));
154
155
156
157
158
159
160

$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;
161
$conf['postfix']['vmail_mailbox_base'] = $ini_array['mail']['homedir_path'];
162
163

//** Delete the old database
oliver's avatar
oliver committed
164
165
166
167
168
if( !$inst->db->query('DROP DATABASE IF EXISTS '.$conf['mysql']['database']) ) {

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

169
//** Create the mysql database
tbrehm's avatar
tbrehm committed
170
171
$inst->configure_database();

172
173
174
//** Update master database rights
$inst->grant_master_database_rights();

175
//** empty all databases
tbrehm's avatar
tbrehm committed
176
$db_tables = $inst->db->getTables();
177

tbrehm's avatar
tbrehm committed
178
foreach($db_tables as $table) {
179

tbrehm's avatar
tbrehm committed
180
181
182
	$inst->db->query("TRUNCATE $table");
}

183
184
185
//** load old data back into database
if( !empty($conf["mysql"]["admin_password"]) ) {

186
	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
187
} else {
188

189
	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
190
}
191

192
// create a backup copy of the ispconfig database in the root folder
193
$backup_db_name = '/root/ispconfig_db_backup_'.@date('Y-m-d_h-i').'.sql';
194
195
196
197
198
copy('existing_db.sql',$backup_db_name);
exec("chmod 700 $backup_db_name");
exec("chown root:root $backup_db_name");


199
200
201
202
203
204
205
//** 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
206
207
208
209
210
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;
		}
211
212
213
214
	}
}

$new_ini = array_to_ini($tpl_ini_array);
215
$inst->db->query("UPDATE server SET config = '".mysql_real_escape_string($new_ini)."' WHERE server_id = ".$conf['server_id']);
216
217
218
219
220
unset($old_ini_array);
unset($tpl_ini_array);
unset($new_ini);


221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
//** 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);
237
238
239
240
241
242
$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");
}
243
244
245
246
247
unset($old_ini_array);
unset($tpl_ini_array);
unset($new_ini);


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

251
if($reconfigure_services_answer == 'yes') {
252
	
253
254
	if($conf['services']['mail']) {
		//** Configure postfix
Falko Timme's avatar
Falko Timme committed
255
		swriteln('Configuring Postfix');
256
		$inst->configure_postfix('dont-create-certs');
257
	
Falko Timme's avatar
Falko Timme committed
258
		//* Configure Jailkit
259
260
		swriteln('Configuring Jailkit');
		$inst->configure_jailkit();
261
	
262
263
264
265
266
267
268
		//** Configure saslauthd
		swriteln('Configuring SASL');
		$inst->configure_saslauthd();
	
		//** Configure PAM
		swriteln('Configuring PAM');
		$inst->configure_pam();
tbrehm's avatar
tbrehm committed
269

270
271
272
		//** Configure courier
		swriteln('Configuring Courier');
		$inst->configure_courier();
tbrehm's avatar
tbrehm committed
273

274
275
276
		//** Configure Spamasassin
		swriteln('Configuring Spamassassin');
		$inst->configure_spamassassin();
tbrehm's avatar
tbrehm committed
277

278
279
280
		//** Configure Amavis
		swriteln('Configuring Amavisd');
		$inst->configure_amavis();
281

282
283
284
285
		//** Configure Getmail
		swriteln('Configuring Getmail');
		$inst->configure_getmail();
	}
tbrehm's avatar
tbrehm committed
286
	
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
	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
306
	//* Configure DBServer
307
	swriteln('Configuring Database');
tbrehm's avatar
tbrehm committed
308
	$inst->configure_dbserver();
309

tbrehm's avatar
tbrehm committed
310
	
311
	//if(@is_dir('/etc/Bastille')) {
312
313
314
	//* Configure Firewall
	swriteln('Configuring Firewall');
	$inst->configure_firewall();
315
	//}
316
}
317

318
//** Configure ISPConfig
319
swriteln('Updating ISPConfig');
daniel's avatar
daniel committed
320
321
322


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

tbrehm's avatar
tbrehm committed
325
326
$inst->install_ispconfig();

327
//** Configure Crontab
tbrehm's avatar
tbrehm committed
328
$update_crontab_answer = $inst->simple_query('Reconfigure Crontab?', array('yes','no'),'yes');
329
330
331
332
if($update_crontab_answer == 'yes') {
	swriteln('Updating Crontab');
	$inst->install_crontab();
}
tbrehm's avatar
tbrehm committed
333

334
//** Restart services:
335
336
if($reconfigure_services_answer == 'yes') {
	swriteln('Restarting services ...');
tbrehm's avatar
tbrehm committed
337
	if($conf['mysql']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['mysql']['init_script']))					system($conf['init_scripts'].'/'.$conf['mysql']['init_script'].' restart');
338
	if($conf['services']['mail']) {
tbrehm's avatar
tbrehm committed
339
340
341
342
343
344
345
346
347
		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');
348
349
	}
	if($conf['services']['web']) {
tbrehm's avatar
tbrehm committed
350
351
		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');
352
353
	}
	if($conf['services']['dns']) {
tbrehm's avatar
tbrehm committed
354
		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');
355
	}
356
}
tbrehm's avatar
tbrehm committed
357
358
359

echo "Update finished.\n";

360
?>