update.php 14.8 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"];
91
$conf['language'] = $conf_old['language'];
92
if($conf['language'] == '{language}') $conf['language'] = 'en';
tbrehm's avatar
tbrehm committed
93

94 95 96 97
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"];
98

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

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

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

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

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

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

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

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

124 125 126 127 128 129 130 131 132
//** 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');
	}
}

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

136
	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
137 138 139
}
else {

140
	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
141
}
tbrehm's avatar
tbrehm committed
142

143 144

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

147 148
//* 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']);
149
$ini_array = ini_to_array(stripslashes($tmp['config']));
150 151 152 153 154 155 156

$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;
157
$conf['postfix']['vmail_mailbox_base'] = $ini_array['mail']['homedir_path'];
158 159

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

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

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

168 169 170
//** Update master database rights
$inst->grant_master_database_rights();

171
//** empty all databases
tbrehm's avatar
tbrehm committed
172
$db_tables = $inst->db->getTables();
173

tbrehm's avatar
tbrehm committed
174
foreach($db_tables as $table) {
175

tbrehm's avatar
tbrehm committed
176 177 178
	$inst->db->query("TRUNCATE $table");
}

179 180 181
//** load old data back into database
if( !empty($conf["mysql"]["admin_password"]) ) {

182
	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
183
} else {
184

185
	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
186
}
187

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


195 196 197 198 199 200 201
//** 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
202 203 204 205 206
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;
		}
207 208 209 210
	}
}

$new_ini = array_to_ini($tpl_ini_array);
211
$inst->db->query("UPDATE server SET config = '".mysql_real_escape_string($new_ini)."' WHERE server_id = ".$conf['server_id']);
212 213 214 215 216
unset($old_ini_array);
unset($tpl_ini_array);
unset($new_ini);


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


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

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

266 267 268
		//** Configure courier
		swriteln('Configuring Courier');
		$inst->configure_courier();
tbrehm's avatar
tbrehm committed
269

270 271 272
		//** Configure Spamasassin
		swriteln('Configuring Spamassassin');
		$inst->configure_spamassassin();
tbrehm's avatar
tbrehm committed
273

274 275 276
		//** Configure Amavis
		swriteln('Configuring Amavisd');
		$inst->configure_amavis();
277

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

tbrehm's avatar
tbrehm committed
306
	
307
	//if(@is_dir('/etc/Bastille')) {
308 309 310
	//* Configure Firewall
	swriteln('Configuring Firewall');
	$inst->configure_firewall();
311
	//}
312
}
313

314
//** Configure ISPConfig
315
swriteln('Updating ISPConfig');
daniel's avatar
daniel committed
316 317 318


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

tbrehm's avatar
tbrehm committed
321 322
$inst->install_ispconfig();

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

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

echo "Update finished.\n";

356
?>