update.php 17.9 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
106
107
//* 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';
}

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

111
$conf['server_id'] = intval($conf_old["server_id"]);
112
$conf['ispconfig_log_priority'] = $conf_old["log_priority"];
113

tbrehm's avatar
tbrehm committed
114
$inst = new installer();
tbrehm's avatar
tbrehm committed
115
$inst->is_update = true;
tbrehm's avatar
tbrehm committed
116

tbrehm's avatar
tbrehm committed
117
118
119
//** Detect the installed applications
$inst->find_installed_apps();

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

122
//** Initialize the MySQL server connection
tbrehm's avatar
tbrehm committed
123
124
include_once('lib/mysql.lib.php');

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

127
//** Ask user for mysql admin_password if empty
oliver's avatar
oliver committed
128
129
130
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
131
132
}

133
134
135
136
137
138
139
140
141
//** 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');
	}
}

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

145
	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
146
147
148
}
else {

149
	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
150
}
tbrehm's avatar
tbrehm committed
151

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

158
159

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

162
163
//* initialize the master DB, if we have a multiserver setup
if($conf['mysql']['master_slave_setup'] == 'y') {
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
		//** 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"];
192
193
194
195
} else {
	$inst->dbmaster = $inst->db;
}

196
197
//* 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']);
198
$ini_array = ini_to_array(stripslashes($tmp['config']));
199

200
201
if(count($ini_array) == 0) die('Unable to read server configuration from database.');

202
203
204
205
206
207
$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;
208
$conf['postfix']['vmail_mailbox_base'] = $ini_array['mail']['homedir_path'];
209
210

//** Delete the old database
oliver's avatar
oliver committed
211
212
213
214
215
if( !$inst->db->query('DROP DATABASE IF EXISTS '.$conf['mysql']['database']) ) {

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

216
//** Create the mysql database
tbrehm's avatar
tbrehm committed
217
218
$inst->configure_database();

219
220
221
222
223
224
225
226
if($conf['mysql']['master_slave_setup'] == 'y') {
	//** 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();
	}
}
227

228
//** empty all databases
tbrehm's avatar
tbrehm committed
229
$db_tables = $inst->db->getTables();
230

tbrehm's avatar
tbrehm committed
231
foreach($db_tables as $table) {
232

tbrehm's avatar
tbrehm committed
233
234
235
	$inst->db->query("TRUNCATE $table");
}

236
237
238
//** load old data back into database
if( !empty($conf["mysql"]["admin_password"]) ) {

239
	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
240
} else {
241

242
	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
243
}
244

245

246
247
248
249
250
251
252
//** 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
253
254
255
256
257
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;
		}
258
259
260
261
	}
}

$new_ini = array_to_ini($tpl_ini_array);
262
$inst->db->query("UPDATE server SET config = '".mysql_real_escape_string($new_ini)."' WHERE server_id = ".$conf['server_id']);
263
264
265
266
267
unset($old_ini_array);
unset($tpl_ini_array);
unset($new_ini);


268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
//** 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);
284
285
286
287
288
289
$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");
}
290
291
292
293
294
unset($old_ini_array);
unset($tpl_ini_array);
unset($new_ini);


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

298
if($reconfigure_services_answer == 'yes') {
299
	
300
301
	if($conf['services']['mail']) {
		//** Configure postfix
Falko Timme's avatar
Falko Timme committed
302
		swriteln('Configuring Postfix');
303
		$inst->configure_postfix('dont-create-certs');
304
	
Falko Timme's avatar
Falko Timme committed
305
		//* Configure Jailkit
306
307
		swriteln('Configuring Jailkit');
		$inst->configure_jailkit();
308
	
309
310
311
312
313
314
315
		//** Configure saslauthd
		swriteln('Configuring SASL');
		$inst->configure_saslauthd();
	
		//** Configure PAM
		swriteln('Configuring PAM');
		$inst->configure_pam();
tbrehm's avatar
tbrehm committed
316

317
318
319
		//** Configure courier
		swriteln('Configuring Courier');
		$inst->configure_courier();
tbrehm's avatar
tbrehm committed
320

321
322
323
		//** Configure Spamasassin
		swriteln('Configuring Spamassassin');
		$inst->configure_spamassassin();
tbrehm's avatar
tbrehm committed
324

325
326
327
		//** Configure Amavis
		swriteln('Configuring Amavisd');
		$inst->configure_amavis();
328

329
330
331
332
		//** Configure Getmail
		swriteln('Configuring Getmail');
		$inst->configure_getmail();
	}
tbrehm's avatar
tbrehm committed
333
	
334
335
336
337
338
339
340
	if($conf['services']['web']) {
		//** Configure Pureftpd
		swriteln('Configuring Pureftpd');
		$inst->configure_pureftpd();
	}
	
	if($conf['services']['dns']) {
341
342
343
344
345
346
347
348
		//* Configure DNS
		if($conf['powerdns']['installed'] == true) {
			swriteln('Configuring PowerDNS');
			$inst->configure_powerdns();
		} else {
			swriteln('Configuring MyDNS');
			$inst->configure_mydns();
		}
349
350
351
352
353
354
	}
	
	if($conf['services']['web']) {
		//** Configure Apache
		swriteln('Configuring Apache');
		$inst->configure_apache();
355
356
357
358
        
        //** Configure vlogger
        swriteln('Configuring vlogger');
        $inst->configure_vlogger();
359
360
361
362
		
		//** Configure apps vhost
		swriteln('Configuring Apps vhost');
		$inst->configure_apps_vhost();
363
364
365
	}
	

tbrehm's avatar
tbrehm committed
366
	//* Configure DBServer
367
	swriteln('Configuring Database');
tbrehm's avatar
tbrehm committed
368
	$inst->configure_dbserver();
369

tbrehm's avatar
tbrehm committed
370
	
371
	//if(@is_dir('/etc/Bastille')) {
372
373
374
	//* Configure Firewall
	swriteln('Configuring Firewall');
	$inst->configure_firewall();
375
	//}
376
}
377

378
//** Configure ISPConfig
379
swriteln('Updating ISPConfig');
daniel's avatar
daniel committed
380
381
382


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

tbrehm's avatar
tbrehm committed
385
386
$inst->install_ispconfig();

387
//** Configure Crontab
tbrehm's avatar
tbrehm committed
388
$update_crontab_answer = $inst->simple_query('Reconfigure Crontab?', array('yes','no'),'yes');
389
390
391
392
if($update_crontab_answer == 'yes') {
	swriteln('Updating Crontab');
	$inst->install_crontab();
}
tbrehm's avatar
tbrehm committed
393

394
//** Restart services:
395
396
if($reconfigure_services_answer == 'yes') {
	swriteln('Restarting services ...');
tbrehm's avatar
tbrehm committed
397
	if($conf['mysql']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['mysql']['init_script']))					system($conf['init_scripts'].'/'.$conf['mysql']['init_script'].' restart');
398
	if($conf['services']['mail']) {
tbrehm's avatar
tbrehm committed
399
400
401
402
403
404
405
406
407
		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');
408
409
	}
	if($conf['services']['web']) {
tbrehm's avatar
tbrehm committed
410
411
		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');
412
413
	}
	if($conf['services']['dns']) {
414
415
		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');
416
	}
417
}
tbrehm's avatar
tbrehm committed
418
419
420

echo "Update finished.\n";

421
?>