update.php 11.2 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'] = $conf_old["server_id"];
101
$conf['ispconfig_log_priority'] = $conf_old["log_priority"];
102

tbrehm's avatar
tbrehm committed
103
104
105
106
$inst = new installer();

echo "This application will update ISPConfig 3 on your server.\n";

107
//** Initialize the MySQL server connection
tbrehm's avatar
tbrehm committed
108
109
include_once('lib/mysql.lib.php');

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

112
//** Ask user for mysql admin_password if empty
oliver's avatar
oliver committed
113
114
115
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
116
117
}

118
//** export the current database data
oliver's avatar
oliver committed
119
120
121
122
123
124
125
126
if( !empty($conf["mysql"]["admin_password"]) ) {

	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");
}
else {

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

128
//** Delete the old database
oliver's avatar
oliver committed
129
130
131
132
133
134
135
$inst->db = new db();

if( !$inst->db->query('DROP DATABASE IF EXISTS '.$conf['mysql']['database']) ) {

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

136
//** Create the mysql database
tbrehm's avatar
tbrehm committed
137
138
$inst->configure_database();

139
//** empty all databases
tbrehm's avatar
tbrehm committed
140
$db_tables = $inst->db->getTables();
141

tbrehm's avatar
tbrehm committed
142
foreach($db_tables as $table) {
143

tbrehm's avatar
tbrehm committed
144
145
146
	$inst->db->query("TRUNCATE $table");
}

147
148
149
//** load old data back into database
if( !empty($conf["mysql"]["admin_password"]) ) {

redray's avatar
redray committed
150
	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
151
} else {
152

redray's avatar
redray committed
153
	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
154
}
155

156
// create a backup copy of the ispconfig database in the root folder
157
$backup_db_name = '/root/ispconfig_db_backup_'.@date('Y-m-d_h-i').'.sql';
158
159
160
161
162
copy('existing_db.sql',$backup_db_name);
exec("chmod 700 $backup_db_name");
exec("chown root:root $backup_db_name");


163
164
165
166
167
168
169
//** 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
170
171
172
173
174
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;
		}
175
176
177
178
	}
}

$new_ini = array_to_ini($tpl_ini_array);
179
$inst->db->query("UPDATE server SET config = '".mysql_real_escape_string($new_ini)."' WHERE server_id = ".$conf['server_id']);
180
181
182
183
184
unset($old_ini_array);
unset($tpl_ini_array);
unset($new_ini);


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

188
189
190
if($reconfigure_services_answer == 'yes') {
	//** Configure postfix
	$inst->configure_postfix('dont-create-certs');
191
192
193
194
195
	
	//* Configure postfix
	swriteln('Configuring Jailkit');
	$inst->configure_jailkit();
	
196
197
198
199
200
201
202
	//** Configure saslauthd
	swriteln('Configuring SASL');
	$inst->configure_saslauthd();
	
	//** Configure PAM
	swriteln('Configuring PAM');
	$inst->configure_pam();
tbrehm's avatar
tbrehm committed
203

204
205
206
	//** Configure courier
	swriteln('Configuring Courier');
	$inst->configure_courier();
tbrehm's avatar
tbrehm committed
207

208
209
210
	//** Configure Spamasassin
	swriteln('Configuring Spamassassin');
	$inst->configure_spamassassin();
tbrehm's avatar
tbrehm committed
211

212
213
214
	//** Configure Amavis
	swriteln('Configuring Amavisd');
	$inst->configure_amavis();
tbrehm's avatar
tbrehm committed
215

216
217
218
	//** Configure Getmail
	swriteln('Configuring Getmail');
	$inst->configure_getmail();
tbrehm's avatar
tbrehm committed
219

220
221
222
	//** Configure Pureftpd
	swriteln('Configuring Pureftpd');
	$inst->configure_pureftpd();
tbrehm's avatar
tbrehm committed
223

224
225
226
	//** Configure MyDNS
	swriteln('Configuring MyDNS');
	$inst->configure_mydns();
227

228
229
230
	//** Configure Apache
	swriteln('Configuring Apache');
	$inst->configure_apache();
tbrehm's avatar
tbrehm committed
231
232
233
234
	
	//* Configure DBServer
	swriteln('Configuring DBServer');
	$inst->configure_dbserver();
tbrehm's avatar
tbrehm committed
235
	
236
	//if(@is_dir('/etc/Bastille')) {
tbrehm's avatar
tbrehm committed
237
238
239
		//* Configure Firewall
		swriteln('Configuring Firewall');
		$inst->configure_firewall();
240
	//}
241
}
242

243
//** Configure ISPConfig
244
swriteln('Updating ISPConfig');
daniel's avatar
daniel committed
245
246
247


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

tbrehm's avatar
tbrehm committed
250
251
$inst->install_ispconfig();

252
//** Configure Crontab
tbrehm's avatar
tbrehm committed
253
$update_crontab_answer = $inst->simple_query('Reconfigure Crontab?', array('yes','no'),'yes');
254
255
256
257
if($update_crontab_answer == 'yes') {
	swriteln('Updating Crontab');
	$inst->install_crontab();
}
tbrehm's avatar
tbrehm committed
258

259
//** Restart services:
260
261
if($reconfigure_services_answer == 'yes') {
	swriteln('Restarting services ...');
262
263
264
265
266
267
268
269
270
271
272
273
274
	if($conf['mysql']['init_script'] != '' && is_file($conf['mysql']['init_script']))					system($conf['init_scripts'].'/'.$conf['mysql']['init_script'].' restart');
	if($conf['postfix']['init_script'] != '' && is_file($conf['postfix']['init_script']))				system($conf['init_scripts'].'/'.$conf['postfix']['init_script'].' restart');
	if($conf['saslauthd']['init_script'] != '' && is_file($conf['saslauthd']['init_script']))			system($conf['init_scripts'].'/'.$conf['saslauthd']['init_script'].' restart');
	if($conf['amavis']['init_script'] != '' && is_file($conf['amavis']['init_script']))					system($conf['init_scripts'].'/'.$conf['amavis']['init_script'].' restart');
	if($conf['clamav']['init_script'] != '' && is_file($conf['clamav']['init_script']))					system($conf['init_scripts'].'/'.$conf['clamav']['init_script'].' restart');
	if($conf['courier']['courier-authdaemon'] != '' && is_file($conf['courier']['courier-authdaemon'])) system($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'].' restart');
	if($conf['courier']['courier-imap'] != '' && is_file($conf['courier']['courier-imap'])) 			system($conf['init_scripts'].'/'.$conf['courier']['courier-imap'].' restart');
	if($conf['courier']['courier-imap-ssl'] != '' && is_file($conf['courier']['courier-imap-ssl'])) 	system($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'].' restart');
	if($conf['courier']['courier-pop'] != '' && is_file($conf['courier']['courier-pop'])) 				system($conf['init_scripts'].'/'.$conf['courier']['courier-pop'].' restart');
	if($conf['courier']['courier-pop-ssl'] != '' && is_file($conf['courier']['courier-pop-ssl'])) 		system($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'].' restart');
	if($conf['apache']['init_script'] != '' && is_file($conf['apache']['init_script'])) 				system($conf['init_scripts'].'/'.$conf['apache']['init_script'].' restart');
	if($conf['pureftpd']['init_script'] != '' && is_file($conf['pureftpd']['init_script']))				system($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'].' restart');
	if($conf['mydns']['init_script'] != '' && is_file($conf['mydns']['init_script']))					system($conf['init_scripts'].'/'.$conf['mydns']['init_script'].' restart &> /dev/null');
275
}
tbrehm's avatar
tbrehm committed
276
277
278

echo "Update finished.\n";

279
?>