install.php 26.1 KB
Newer Older
latham's avatar
latham 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 31 32
<?php

/*
Copyright (c) 2007-2010, 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.
*/

/*
	ISPConfig 3 installer.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
	
	-------------------------------------------------------------------------------------
	- Interactive install
	-------------------------------------------------------------------------------------
	run:
	
	php install.php
	
	-------------------------------------------------------------------------------------
	- Noninteractive (autoinstall) mode
	-------------------------------------------------------------------------------------
	
	The autoinstall mode can read the installer questions from a .ini style file or from
	a php config file. Examples for both file types are in the docs folder. 
	See autoinstall.ini.sample and autoinstall.conf_sample.php.
	
	run:
	
	php install.php --autoinstall=autoinstall.ini
	
	or
	
	php install.php --autoinstall=autoinstall.conf.php
	
latham's avatar
latham committed
57 58 59
*/

error_reporting(E_ALL|E_STRICT);
60
require_once realpath(dirname(__FILE__)) . '/lib/classes/libbashcolor.inc.php';
latham's avatar
latham committed
61

62 63
define('INSTALLER_RUN', true);

latham's avatar
latham committed
64
//** The banner on the command line
65
echo "\n\n".str_repeat('-', 80)."\n";
66 67 68 69 70 71 72
echo PXBashColor::getString( "<darkgrey>
<strong> _____ ___________</strong>   _____              __ _         ____
<strong>|_   _/  ___| ___ \</strong> /  __ \            / _(_)       /__  \
<strong>  | | \ `--.| |_/ /</strong> | /  \/ ___  _ __ | |_ _  __ _    _/ /
<strong>  | |  `--. \  __/</strong>  | |    / _ \| '_ \|  _| |/ _` |  |_ |
<strong> _| |_/\__/ / |   </strong>  | \__/\ (_) | | | | | | | (_| | ___\ \
<strong> \___/\____/\_|   </strong>   \____/\___/|_| |_|_| |_|\__, | \____/
latham's avatar
latham committed
73
                                              __/ |
74
                                             |___/ </darkgrey>");
75
echo "\n".str_repeat('-', 80)."\n";
latham's avatar
latham committed
76 77 78
echo "\n\n>> Initial configuration  \n\n";

//** Include the library with the basic installer functions
79
require_once 'lib/install.lib.php';
latham's avatar
latham committed
80 81

//** Include the base class of the installer class
82
require_once 'lib/installer_base.lib.php';
latham's avatar
latham committed
83 84 85 86 87 88 89 90 91 92 93

//** Ensure that current working directory is install directory
$cur_dir = getcwd();
if(realpath(dirname(__FILE__)) != $cur_dir) {
	chdir( realpath(dirname(__FILE__)) );
}

//** Install logfile
define('ISPC_LOG_FILE', '/var/log/ispconfig_install.log');
define('ISPC_INSTALL_ROOT', realpath(dirname(__FILE__).'/../'));

94 95 96
//** Include the templating lib
require_once 'lib/classes/tpl.inc.php';

latham's avatar
latham committed
97 98 99 100 101
//** Check for existing installation
/*if(is_dir("/usr/local/ispconfig")) {
    die('We will stop here. There is already a ISPConfig installation, use the update script to update this installation.');
}*/

102
// Patch is required to repair latest amavis versions
103
if(is_installed('amavisd-new') && !is_installed('patch')) die('The patch command is missing. Install patch command and start installation again.');
104

latham's avatar
latham committed
105 106 107 108
//** Get distribution identifier
$dist = get_distname();

if($dist['id'] == '') die('Linux distribution or version not recognized.');
109
if(!$dist['supported']) die('This distribution is not supported.');
latham's avatar
latham committed
110

111 112
//** Include the autoinstaller configuration (for non-interactive setups)
error_reporting(E_ALL ^ E_NOTICE);
113 114 115 116 117 118 119 120 121 122

//** Get commandline options
$cmd_opt = getopt('', array('autoinstall::'));

//** Load autoinstall file
if(isset($cmd_opt['autoinstall']) && is_file($cmd_opt['autoinstall'])) {
	$path_parts = pathinfo($cmd_opt['autoinstall']);
	if($path_parts['extension'] == 'php') {
		include_once $cmd_opt['autoinstall'];
	} elseif($path_parts['extension'] == 'ini') {
123 124 125 126 127
		if(is_file('autoinstall.ini')) {
			$tmp = ini_to_array(file_get_contents('autoinstall.ini'));
		} else {
			$tmp = ini_to_array(file_get_contents($cmd_opt['autoinstall']));
		}
128 129 130 131
		if(!is_array($tmp['install'])) $tmp['install'] = array();
		if(!is_array($tmp['ssl_cert'])) $tmp['ssl_cert'] = array();
		if(!is_array($tmp['expert'])) $tmp['expert'] = array();
		if(!is_array($tmp['update'])) $tmp['update'] = array();
132 133 134 135 136 137 138 139 140 141
		$autoinstall = $tmp['install'] + $tmp['ssl_cert'] + $tmp['expert'] + $tmp['update'];
		unset($tmp);
	}
	unset($path_parts);
	define('AUTOINSTALL', true);
} else {
	$autoinstall = array();
	define('AUTOINSTALL', false);
}

142

latham's avatar
latham committed
143
//** Include the distribution-specific installer class library and configuration
144 145
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';
146
include_once 'dist/conf/'.$dist['confid'].'.conf.php';
latham's avatar
latham committed
147 148

//****************************************************************************************************
149
//** Installer Interface
latham's avatar
latham committed
150 151
//****************************************************************************************************
$inst = new installer();
152
if (!$inst->get_php_version()) die('ISPConfig requieres PHP '.$inst->min_php."\n");
153 154
$retval=shell_exec("which which");
if (empty($retval)) die ("ISPConfig requieres which \n");
155

latham's avatar
latham committed
156
swriteln($inst->lng('    Following will be a few questions for primary configuration so be careful.'));
157 158
swriteln($inst->lng('    Default values are in <strong>[brackets]</strong> and can be accepted with <em><ENTER></em>.'));
swriteln($inst->lng('    Tap in "<em>quit</em>" (without the quotes) to stop the installer.'."\n\n"));
latham's avatar
latham committed
159 160 161

//** Check log file is writable (probably not root or sudo)
if(!is_writable(dirname(ISPC_LOG_FILE))){
162
	die(PXBashColor::getString("<strong><red>[ERROR]</red></strong> Cannot write to the ".dirname(ISPC_LOG_FILE)." directory. Are you root or sudo ?\n\n"));
latham's avatar
latham committed
163 164 165 166 167 168 169 170 171 172 173
}

if(is_dir('/root/ispconfig') || is_dir('/home/admispconfig')) {
	die('This software cannot be installed on a server wich runs ISPConfig 2.x.');
}

if(is_dir('/usr/local/ispconfig')) {
	die('ISPConfig 3 installation found. Please use update.php instead if install.php to update the installation.');
}

//** Detect the installed applications
174
$inst->raiseEvent('find_installed_apps::before');
latham's avatar
latham committed
175
$inst->find_installed_apps();
176
$inst->raiseEvent('find_installed_apps::after');
latham's avatar
latham committed
177

178
//** Select the language and set default timezone
179
$conf['language'] = $inst->simple_query('Select language', array('en', 'de'), 'en','language');
180
$conf['timezone'] = get_system_timezone();
latham's avatar
latham committed
181

182
//* Set default theme
183
$conf['theme'] = 'default';
184
$conf['language_file_import_enabled'] = true;
185

latham's avatar
latham committed
186
//** Select installation mode
187
$install_mode = $inst->simple_query('Installation mode', array('standard', 'expert'), 'standard','install_mode');
188
$inst->set_install_mode($install_mode);
latham's avatar
latham committed
189

root's avatar
root committed
190 191
//** tRNG dependencies
$conf['tRNG']='';
latham's avatar
latham committed
192 193 194 195

//** Get the hostname
$tmp_out = array();
exec('hostname -f', $tmp_out);
196
$conf['hostname'] = @$tmp_out[0];
197
unset($tmp_out);
198 199 200 201 202 203 204 205
//** Prevent empty hostname
$check = false;
do {
	$conf['hostname'] = $inst->free_query('Full qualified hostname (FQDN) of the server, eg server1.domain.tld ', $conf['hostname'], 'hostname');
	$conf['hostname']=trim($conf['hostname']);
	$check = @($conf['hostname'] !== '')?true:false;
	if(!$check) swriteln('Hostname may not be empty.');
} while (!$check);
206

latham's avatar
latham committed
207
// Check if the mysql functions are loaded in PHP
208
if(!function_exists('mysqli_connect')) die('No PHP MySQLi functions available. Please ensure that the PHP MySQL module is loaded.');
latham's avatar
latham committed
209 210 211 212

//** Get MySQL root credentials
$finished = false;
do {
213
	$tmp_mysql_server_host = $inst->free_query('MySQL server hostname', $conf['mysql']['host'],'mysql_hostname');	 
214
	$tmp_mysql_server_port = $inst->free_query('MySQL server port', $conf['mysql']['port'],'mysql_port');
215 216 217 218
	$tmp_mysql_server_admin_user = $inst->free_query('MySQL root username', $conf['mysql']['admin_user'],'mysql_root_user');	 
	$tmp_mysql_server_admin_password = $inst->free_query('MySQL root password', $conf['mysql']['admin_password'],'mysql_root_password');	 
	$tmp_mysql_server_database = $inst->free_query('MySQL database to create', $conf['mysql']['database'],'mysql_database');	 
	$tmp_mysql_server_charset = $inst->free_query('MySQL charset', $conf['mysql']['charset'],'mysql_charset');
219
	
220 221
	if($install_mode == 'expert') {
		swriteln("The next two questions are about the internal ISPConfig database user and password.\nIt is recommended to accept the defaults which are 'ispconfig' as username and a random password.\nIf you use a different password, use only numbers and chars for the password.\n");
222
		
223 224
		$conf['mysql']['ispconfig_user'] = $inst->free_query('ISPConfig mysql database username', $conf['mysql']['ispconfig_user'],'mysql_ispconfig_user');	 
		$conf['mysql']['ispconfig_password'] = $inst->free_query('ISPConfig mysql database password', $conf['mysql']['ispconfig_password'],'mysql_ispconfig_password');
225
	}
226

latham's avatar
latham committed
227
	//* Initialize the MySQL server connection
228
	if(@mysqli_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password, '', (int)$tmp_mysql_server_port)) {
latham's avatar
latham committed
229
		$conf['mysql']['host'] = $tmp_mysql_server_host;
230
		$conf['mysql']['port'] = $tmp_mysql_server_port;
latham's avatar
latham committed
231 232 233 234 235 236
		$conf['mysql']['admin_user'] = $tmp_mysql_server_admin_user;
		$conf['mysql']['admin_password'] = $tmp_mysql_server_admin_password;
		$conf['mysql']['database'] = $tmp_mysql_server_database;
		$conf['mysql']['charset'] = $tmp_mysql_server_charset;
		$finished = true;
	} else {
237
		swriteln($inst->lng('Unable to connect to the specified MySQL server').' '.mysqli_connect_error());
latham's avatar
latham committed
238 239 240 241 242
	}
} while ($finished == false);
unset($finished);

// Resolve the IP address of the MySQL hostname.
243
$tmp = explode(':', $conf['mysql']['host']);
latham's avatar
latham committed
244 245 246 247 248
if(!$conf['mysql']['ip'] = gethostbyname($tmp[0])) die('Unable to resolve hostname'.$tmp[0]);
unset($tmp);


//** Initializing database connection
249
include_once 'lib/mysql.lib.php';
latham's avatar
latham committed
250 251 252
$inst->db = new db();

//** Begin with standard or expert installation
253 254 255 256 257 258 259 260 261

$conf['services']['mail'] = false;
$conf['services']['web'] = false;
$conf['services']['dns'] = false;
$conf['services']['file'] = false;
$conf['services']['db'] = true;
$conf['services']['firewall'] = false;
$conf['services']['proxy'] = false;

262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289
//** Get Server ID
// $conf['server_id'] = $inst->free_query('Unique Numeric ID of the server','1');
// Server ID is an autoInc value of the mysql database now
if($install_mode == 'expert' && strtolower($inst->simple_query('Shall this server join an existing ISPConfig multiserver setup', array('y', 'n'), 'n','join_multiserver_setup')) == 'y') {
	$conf['mysql']['master_slave_setup'] = 'y';

	//** Get MySQL root credentials
	$finished = false;
	do {
		$tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname'); 
		$tmp_mysql_server_port = $inst->free_query('MySQL master server port', $conf['mysql']['master_port'],'mysql_master_port');
		$tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user'],'mysql_master_root_user');	 
		$tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password'],'mysql_master_root_password'); 
		$tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database'],'mysql_master_database');

		//* Initialize the MySQL server connection
		if(@mysqli_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password, $tmp_mysql_server_database, (int)$tmp_mysql_server_port)) {
			$conf['mysql']['master_host'] = $tmp_mysql_server_host;
			$conf['mysql']['master_port'] = $tmp_mysql_server_port;
			$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').' '.mysqli_connect_error());
		}
	} while ($finished == false);
	unset($finished);
290

291 292 293
	// initialize the connection to the master database
	$inst->dbmaster = new db();
	if($inst->dbmaster->linkId) $inst->dbmaster->closeConn();
Costin's avatar
Costin committed
294
	$inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_port"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"]);
295 296 297 298
	$inst->dbmaster->setDBName($conf['mysql']["master_database"]);

} else {
	// the master DB is the same then the slave DB
299
	$inst->dbmaster = $inst->db;
300 301 302 303
}

//* Create the mysql database
$inst->configure_database();
304

305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329
//* Check for Web-Server
if(!$conf['apache']['installed'] && !$conf['nginx']['installed']) {
	$conf['apache']['installed'] = $inst->force_configure_app('Apache', ($install_mode == 'expert'));
	$conf['nginx']['installed'] = $inst->force_configure_app('nginx', ($install_mode == 'expert'));
}

//* Configure Webserver - Apache or nginx
if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) {
	$http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
	if($http_server_to_use == 'apache'){
		$conf['nginx']['installed'] = false;
		$conf['services']['file'] = true;
	} else {
		$conf['apache']['installed'] = false;
	}
}

//* Insert the Server record into the database
if($install_mode == 'expert') {
	swriteln('Adding ISPConfig server record to database.');
	swriteln('');
}
$inst->add_database_server_record();

if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Mail', array('y', 'n') , 'y','configure_mail') ) == 'y') {
latham's avatar
latham committed
330

331
	//* Configure Postgrey
332
	$force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey', ($install_mode == 'expert'));
333
	if($force) swriteln('Configuring Postgrey');
334

335
	//* Configure Postfix
336
	$force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix', ($install_mode == 'expert'));
337 338 339
	if($force) {
		swriteln('Configuring Postfix');
		$conf['services']['mail'] = true;
340
		$inst->configure_postfix();
341
	}
342

343
	if($conf['services']['mail']) {
344
		//* Check for Dovecot
345
		if(!$conf['dovecot']['installed']) {
346
			$conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot', ($install_mode == 'expert'));
347
		}
latham's avatar
latham committed
348
		//* Configure Dovecot
349 350 351 352
		if($conf['dovecot']['installed']) {
			swriteln('Configuring Dovecot');
			$inst->configure_dovecot();
		}
353
		
354
		//* Configure Spamasassin
355
		$force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin', ($install_mode == 'expert'));
356 357 358 359
		if($force) {
			swriteln('Configuring Spamassassin');
			$inst->configure_spamassassin();
		}
360

361
		//* Configure Amavis
362
		$force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd', ($install_mode == 'expert'));
363 364 365 366
		if($force) {
			swriteln('Configuring Amavisd');
			$inst->configure_amavis();
		}
latham's avatar
latham committed
367

368 369 370 371 372 373
		//* Configure Rspamd
		$force = @($conf['rspamd']['installed']) ? true : $inst->force_configure_app('Rspamd', ($install_mode == 'expert'));
		if($force) {
			swriteln('Configuring Rspamd');
			$inst->configure_rspamd();
		}
374
		//* Configure Getmail
375
		$force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail', ($install_mode == 'expert'));
376 377 378 379
		if($force) {
			swriteln('Configuring Getmail');
			$inst->configure_getmail();
		}
380 381 382 383 384 385 386 387 388 389 390
	} else {
		swriteln('[ERROR] Postfix not installed - skipping Mail');
	}
}

//* Configure Jailkit
$force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit', ($install_mode == 'expert'));
if($force) {
	swriteln('Configuring Jailkit');
	$inst->configure_jailkit();
}
391

392 393 394 395 396 397
//* Configure Pureftpd
$force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd', ($install_mode == 'expert'));
if($force) {
	swriteln('Configuring Pureftpd');
	$inst->configure_pureftpd();
}
latham's avatar
latham committed
398

399 400
//** Configure DNS
if($install_mode == 'standard' || strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y','configure_dns')) == 'y') {
401
	//* Check for DNS
402 403 404 405
	if(!$conf['powerdns']['installed'] && !$conf['bind']['installed'] && !$conf['mydns']['installed']) {
		if($install_mode == 'expert') $conf['powerdns']['installed'] = $inst->force_configure_app('PowerDNS', ($install_mode == 'expert'));
		$conf['bind']['installed'] = $inst->force_configure_app('BIND', ($install_mode == 'expert'));
		$conf['mydns']['installed'] = $inst->force_configure_app('MyDNS', ($install_mode == 'expert'));
406 407
	}
	//* Configure PowerDNS
408
	if($install_mode == 'expert' && $conf['powerdns']['installed']) {
latham's avatar
latham committed
409 410
		swriteln('Configuring PowerDNS');
		$inst->configure_powerdns();
411 412 413 414
		$conf['services']['dns'] = true;
	}
	//* Configure Bind
	if($conf['bind']['installed']) {
latham's avatar
latham committed
415 416
		swriteln('Configuring BIND');
		$inst->configure_bind();
417
		$conf['services']['dns'] = true;
root's avatar
root committed
418
		$conf['tRNG'] .= 'DNSSEC with BIND, ';
419 420 421
	}
	//* Configure MyDNS
	if($conf['mydns']['installed']) {
latham's avatar
latham committed
422 423
		swriteln('Configuring MyDNS');
		$inst->configure_mydns();
424 425 426
		$conf['services']['dns'] = true;
	}

427
}
428

429
if($install_mode == 'expert') swriteln('The Web Server option has to be enabled when you want run a web server or when this node shall host the ISPConfig interface.');
430
if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Web Server', array('y', 'n'), 'y','configure_webserver')) == 'y') {
latham's avatar
latham committed
431
	//* Configure Apache
432
	if($conf['apache']['installed']){
433 434
		swriteln('Configuring Apache');
		$inst->configure_apache();
435 436 437
		$conf['services']['web'] = true;
		$conf['services']['file'] = true;
		//* Configure Vlogger
438
		$force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger', ($install_mode == 'expert'));
439 440 441 442 443 444
		if($force) {
			swriteln('Configuring vlogger');
			$inst->configure_vlogger();
		}
		//* Configure squid
/*
445
		$force = @($conf['squid']['installed']) ? true : $inst->force_configure_app('squid', ($install_mode == 'expert'));
446 447 448 449
		if($force) {
			swriteln('Configuring Squid');
			$inst->configure_squid();
			$conf['services']['proxy'] = true;
450
			if($conf['squid']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['squid']['init_script']))system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null');
451 452
		}
*/
453 454
	}
	//* Configure nginx
455
	if($conf['nginx']['installed']){
456 457
		swriteln('Configuring nginx');
		$inst->configure_nginx();
458
		$conf['services']['web'] = true;
459
	}
460
}
461

462
$inst->raiseEvent('configure_webserver_selection::after');
463

464
if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Firewall Server', array('y', 'n'), 'y','configure_firewall')) == 'y') {
465 466
	//* Check for Firewall
	if(!$conf['ufw']['installed'] && !$conf['firewall']['installed']) {
467 468
		$conf['ufw']['installed'] = $inst->force_configure_app('Ubuntu Firewall', ($install_mode == 'expert'));
		$conf['firewall']['installed'] = $inst->force_configure_app('Bastille Firewall', ($install_mode == 'expert'));
469 470 471 472 473 474 475 476 477 478 479 480
	}
	//* Configure Firewall - Ubuntu or Bastille
	if($conf['ufw']['installed'] && $conf['firewall']['installed']) {
		$firewall_to_use = $inst->simple_query('Ubuntu and Bastille Firewall detected. Select firewall to use with ISPConfig:', array('bastille', 'ubuntu'), 'bastille','firewall_server');
		if($firewall_to_use == 'bastille'){
			$conf['ufw']['installed'] = false;
		} else {
			$conf['firewall']['installed'] = false;
		}
	}
	//* Configure Ubuntu Firewall
	if($conf['ufw']['installed']){
481 482 483
		swriteln('Configuring Ubuntu Firewall');
		$inst->configure_ufw_firewall();
		$conf['services']['firewall'] = true;
484 485 486
	}
	//* Configure Bastille Firewall
	if($conf['firewall']['installed']){
487 488
		swriteln('Configuring Bastille Firewall');
		$inst->configure_bastille_firewall();
489
		$conf['services']['firewall'] = true;
Florian Schaal's avatar
Florian Schaal committed
490
		$conf['bastille']['installed'] = true;
491
	}
492
}
493

494 495 496 497 498 499
//* Configure Fail2ban
$force = @($conf['fail2ban']['installed']) ? true : $inst->force_configure_app('Fail2ban', ($install_mode == 'expert'));
if($force) {
	swriteln('Configuring Fail2ban');
	$inst->configure_fail2ban();
}
500

501
if($conf['services']['web'] == true) {
502 503 504
	//** Configure apps vhost
	swriteln('Configuring Apps vhost');
	$inst->configure_apps_vhost();
505
}
506

507 508 509
//** Configure ISPConfig :-)
$install_ispconfig_interface_default = ($conf['mysql']['master_slave_setup'] == 'y')?'n':'y';
if($install_mode == 'standard' || strtolower($inst->simple_query('Install ISPConfig Web Interface', array('y', 'n'), $install_ispconfig_interface_default,'install_ispconfig_web_interface')) == 'y') {
latham's avatar
latham committed
510
	swriteln('Installing ISPConfig');
511

512
	//** Customise the port ISPConfig runs on
513
	$ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
514 515 516
	$temp_admin_password = str_shuffle(bin2hex(openssl_random_pseudo_bytes(4)));
	$conf['interface_password'] = $inst->free_query('Admin password', $temp_admin_password, 'ispconfig_admin_password');
	if($conf['interface_password'] != $temp_admin_password) {
517 518 519
		$check = false;
		do {
			unset($temp_password);
520
			$temp_password = $inst->free_query('Re-enter admin password', '','ispconfig_admin_password');
521
			$check = @($temp_password == $conf['interface_password'])?true:false;
Marius Cramer's avatar
Marius Cramer committed
522
			if(!$check) swriteln('Passwords do not match.');
523 524 525 526
		} while (!$check);
	}
	unset($check);
	unset($temp_password);
527
	unset($temp_admin_password);
528 529 530
	if($conf['apache']['installed'] == true) $conf['apache']['vhost_port']  = $ispconfig_vhost_port;
	if($conf['nginx']['installed'] == true) $conf['nginx']['vhost_port']  = $ispconfig_vhost_port;
	unset($ispconfig_vhost_port);
latham's avatar
latham committed
531

532
	if(strtolower($inst->simple_query('Do you want a secure (SSL) connection to the ISPConfig web interface', array('y', 'n'), 'y','ispconfig_use_ssl')) == 'y') {	 
533
		$inst->make_ispconfig_ssl_cert();
534
	}
535
	$inst->install_ispconfig_interface = true;
536

537 538 539
} else {
	$inst->install_ispconfig_interface = false;
}
540

541
// Create SSL certs for non-webserver(s)?
542 543
if(!file_exists('/usr/local/ispconfig/interface/ssl/ispserver.crt')) {
    if(strtolower($inst->simple_query('Do you want to create SSL certs for your server?', array('y', 'n'), 'y')) == 'y') {
544
        $inst->make_ispconfig_ssl_cert();
545
	}
546 547
}

548
$inst->raiseEvent('install_ispconfig::before');
549
$inst->install_ispconfig();
550
$inst->raiseEvent('install_ispconfig::after');
551

552 553 554
//* Configure DBServer
swriteln('Configuring DBServer');
$inst->configure_dbserver();
555

556 557 558
//* Configure ISPConfig
swriteln('Installing ISPConfig crontab');
if($conf['cron']['installed']) {
latham's avatar
latham committed
559
	$inst->install_crontab();
560 561 562 563 564 565 566 567 568
} else swriteln('[ERROR] Cron not found');

swriteln('Detect IP addresses');
$inst->detect_ips();

swriteln('Restarting services ...');
if($conf['mysql']['installed'] == true && $conf['mysql']['init_script'] != '') system($inst->getinitcommand($conf['mysql']['init_script'], 'restart').' >/dev/null 2>&1');
if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart'));
if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart'));
569
if($conf['rspamd']['installed'] == true && $conf['rspamd']['init_script'] != '') system($inst->getinitcommand($conf['rspamd']['init_script'], 'restart'));
570 571 572 573 574 575 576 577 578 579 580 581 582 583 584
if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart'));
if($conf['dovecot']['installed'] == true && $conf['dovecot']['init_script'] != '') system($inst->getinitcommand($conf['dovecot']['init_script'], 'restart'));
if($conf['apache']['installed'] == true && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart'));
//* Reload is enough for nginx
if($conf['nginx']['installed'] == true){
	if($conf['nginx']['php_fpm_init_script'] != '') system($inst->getinitcommand($conf['nginx']['php_fpm_init_script'], 'reload'));
	if($conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'reload'));
}
if($conf['pureftpd']['installed'] == true && $conf['pureftpd']['init_script'] != '') system($inst->getinitcommand($conf['pureftpd']['init_script'], 'restart'));
if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '') system($inst->getinitcommand($conf['mydns']['init_script'], 'restart').' &> /dev/null');
if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '') system($inst->getinitcommand($conf['powerdns']['init_script'], 'restart').' &> /dev/null');
if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '') system($inst->getinitcommand($conf['bind']['init_script'], 'restart').' &> /dev/null');
//if($conf['squid']['installed'] == true && $conf['squid']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['squid']['init_script']))     system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null');
if($conf['nginx']['installed'] == true && $conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'restart').' &> /dev/null');
if($conf['ufw']['installed'] == true && $conf['ufw']['init_script'] != '') system($inst->getinitcommand($conf['ufw']['init_script'], 'restart').' &> /dev/null');
585

root's avatar
root committed
586 587
//* test tRNG
if($conf['tRNG']) tRNG();
latham's avatar
latham committed
588

Marius Cramer's avatar
Marius Cramer committed
589 590
$inst->create_mount_script();

591 592 593 594 595
//* Create md5 filelist
$md5_filename = '/usr/local/ispconfig/security/data/file_checksums_'.date('Y-m-d_h-i').'.md5';
exec('find /usr/local/ispconfig -type f -print0 | xargs -0 md5sum > '.$md5_filename);
chmod($md5_filename,0700);

latham's avatar
latham committed
596 597 598 599

echo "Installation completed.\n";


600
?>