install.php 28 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 60
*/

error_reporting(E_ALL|E_STRICT);

61 62
define('INSTALLER_RUN', true);

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

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

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

//** 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__).'/../'));

92 93 94
//** Include the templating lib
require_once 'lib/classes/tpl.inc.php';

latham's avatar
latham committed
95 96 97 98 99
//** 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.');
}*/

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

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

if($dist['id'] == '') die('Linux distribution or version not recognized.');

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

//** 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') {
120 121 122 123 124
		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']));
		}
125 126 127 128
		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();
129 130 131 132 133 134 135 136 137 138
		$autoinstall = $tmp['install'] + $tmp['ssl_cert'] + $tmp['expert'] + $tmp['update'];
		unset($tmp);
	}
	unset($path_parts);
	define('AUTOINSTALL', true);
} else {
	$autoinstall = array();
	define('AUTOINSTALL', false);
}

139

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

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

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

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

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
$inst->find_installed_apps();

173
//** Select the language and set default timezone
174
$conf['language'] = $inst->simple_query('Select language', array('en', 'de'), 'en','language');
175
$conf['timezone'] = get_system_timezone();
latham's avatar
latham committed
176

177
//* Set default theme
178
$conf['theme'] = 'default';
179
$conf['language_file_import_enabled'] = true;
180

latham's avatar
latham committed
181
//** Select installation mode
182
$install_mode = $inst->simple_query('Installation mode', array('standard', 'expert'), 'standard','install_mode');
latham's avatar
latham committed
183 184 185 186 187


//** Get the hostname
$tmp_out = array();
exec('hostname -f', $tmp_out);
188
$conf['hostname'] = @$tmp_out[0];
189
unset($tmp_out);
190 191 192 193 194 195 196 197
//** 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);
198

latham's avatar
latham committed
199
// Check if the mysql functions are loaded in PHP
200
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
201 202 203 204

//** Get MySQL root credentials
$finished = false;
do {
205
	$tmp_mysql_server_host = $inst->free_query('MySQL server hostname', $conf['mysql']['host'],'mysql_hostname');	 
206
	$tmp_mysql_server_port = $inst->free_query('MySQL server port', $conf['mysql']['port'],'mysql_port');
207 208 209 210
	$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');
211
	
212 213
	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");
214
		
215 216
		$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');
217
	}
218

latham's avatar
latham committed
219
	//* Initialize the MySQL server connection
220
	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
221
		$conf['mysql']['host'] = $tmp_mysql_server_host;
222
		$conf['mysql']['port'] = $tmp_mysql_server_port;
latham's avatar
latham committed
223 224 225 226 227 228
		$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 {
229
		swriteln($inst->lng('Unable to connect to the specified MySQL server').' '.mysqli_connect_error());
latham's avatar
latham committed
230 231 232 233 234
	}
} while ($finished == false);
unset($finished);

// Resolve the IP address of the MySQL hostname.
235
$tmp = explode(':', $conf['mysql']['host']);
latham's avatar
latham committed
236 237 238 239 240
if(!$conf['mysql']['ip'] = gethostbyname($tmp[0])) die('Unable to resolve hostname'.$tmp[0]);
unset($tmp);


//** Initializing database connection
241
include_once 'lib/mysql.lib.php';
latham's avatar
latham committed
242 243 244
$inst->db = new db();

//** Begin with standard or expert installation
245 246 247 248 249 250 251 252 253 254 255

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

256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283
//** 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);
284

285 286 287
	// initialize the connection to the master database
	$inst->dbmaster = new db();
	if($inst->dbmaster->linkId) $inst->dbmaster->closeConn();
288
	$inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"], $conf['mysql']['master_port']);
289 290 291 292
	$inst->dbmaster->setDBName($conf['mysql']["master_database"]);

} else {
	// the master DB is the same then the slave DB
293
	$inst->dbmaster = $inst->db;
294 295 296 297
}

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

299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323
//* 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
324

325
	//* Configure Postgrey
326
	$force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey', ($install_mode == 'expert'));
327
	if($force) swriteln('Configuring Postgrey');
328

329
	//* Configure Postfix
330
	$force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix', ($install_mode == 'expert'));
331 332 333
	if($force) {
		swriteln('Configuring Postfix');
		$conf['services']['mail'] = true;
334
		$inst->configure_postfix();
335
	}
336

337 338
	if($conf['services']['mail']) {
		//* Configure Mailman
339
		$force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman', ($install_mode == 'expert'));
340 341 342
		if($force) {
			swriteln('Configuring Mailman');
			$inst->configure_mailman();
343
		}
344 345 346

		//* Check for Dovecot and Courier
		if(!$conf['dovecot']['installed'] && !$conf['courier']['installed']) {
347 348
			$conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot', ($install_mode == 'expert'));
			$conf['courier']['installed'] = $inst->force_configure_app('Courier', ($install_mode == 'expert'));
349 350 351 352 353 354 355 356 357 358
		}
		//* Configure Mailserver - Dovecot or Courier
		if($conf['dovecot']['installed'] && $conf['courier']['installed']) {
			$mail_server_to_use = $inst->simple_query('Dovecot and Courier detected. Select server to use with ISPConfig:', array('dovecot', 'courier'), 'dovecot','mail_server');
			if($mail_server_to_use == 'dovecot'){
				$conf['courier']['installed'] = false;
			} else {
				$conf['dovecot']['installed'] = false;
			}
		}
latham's avatar
latham committed
359
		//* Configure Dovecot
360 361 362 363
		if($conf['dovecot']['installed']) {
			swriteln('Configuring Dovecot');
			$inst->configure_dovecot();
		}
latham's avatar
latham committed
364
		//* Configure Courier
365 366 367 368 369 370 371 372
		if($conf['courier']['installed']) {
			swriteln('Configuring Courier');
			$inst->configure_courier();
			swriteln('Configuring SASL');
			$inst->configure_saslauthd();
			swriteln('Configuring PAM');
			$inst->configure_pam();
		}
latham's avatar
latham committed
373

374
		//* Configure Spamasassin
375
		$force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin', ($install_mode == 'expert'));
376 377 378 379
		if($force) {
			swriteln('Configuring Spamassassin');
			$inst->configure_spamassassin();
		}
380

381
		//* Configure Amavis
382
		$force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd', ($install_mode == 'expert'));
383 384 385 386
		if($force) {
			swriteln('Configuring Amavisd');
			$inst->configure_amavis();
		}
latham's avatar
latham committed
387

388
		//* Configure Getmail
389
		$force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail', ($install_mode == 'expert'));
390 391 392 393
		if($force) {
			swriteln('Configuring Getmail');
			$inst->configure_getmail();
		}
394 395 396 397 398 399 400 401 402 403 404
	} 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();
}
405

406 407 408 409 410 411
//* 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
412

413 414
//** Configure DNS
if($install_mode == 'standard' || strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y','configure_dns')) == 'y') {
415
	//* Check for DNS
416 417 418 419
	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'));
420 421
	}
	//* Configure PowerDNS
422
	if($install_mode == 'expert' && $conf['powerdns']['installed']) {
latham's avatar
latham committed
423 424
		swriteln('Configuring PowerDNS');
		$inst->configure_powerdns();
425 426 427 428
		$conf['services']['dns'] = true;
	}
	//* Configure Bind
	if($conf['bind']['installed']) {
latham's avatar
latham committed
429 430
		swriteln('Configuring BIND');
		$inst->configure_bind();
431
		$conf['services']['dns'] = true;
Florian Schaal's avatar
Florian Schaal committed
432
		if(!is_installed('haveged')) {
433 434
			swriteln("[INFO] haveged not detected - DNSSEC can fail");
		}
435 436 437
	}
	//* Configure MyDNS
	if($conf['mydns']['installed']) {
latham's avatar
latham committed
438 439
		swriteln('Configuring MyDNS');
		$inst->configure_mydns();
440 441 442
		$conf['services']['dns'] = true;
	}

443
}
444

445
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.');
446
if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Web Server', array('y', 'n'), 'y','configure_webserver')) == 'y') {
latham's avatar
latham committed
447
	//* Configure Apache
448
	if($conf['apache']['installed']){
449 450
		swriteln('Configuring Apache');
		$inst->configure_apache();
451 452 453
		$conf['services']['web'] = true;
		$conf['services']['file'] = true;
		//* Configure Vlogger
454
		$force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger', ($install_mode == 'expert'));
455 456 457 458 459 460
		if($force) {
			swriteln('Configuring vlogger');
			$inst->configure_vlogger();
		}
		//* Configure squid
/*
461
		$force = @($conf['squid']['installed']) ? true : $inst->force_configure_app('squid', ($install_mode == 'expert'));
462 463 464 465
		if($force) {
			swriteln('Configuring Squid');
			$inst->configure_squid();
			$conf['services']['proxy'] = true;
466
			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');
467 468
		}
*/
469 470
	}
	//* Configure nginx
471
	if($conf['nginx']['installed']){
472 473
		swriteln('Configuring nginx');
		$inst->configure_nginx();
474
		$conf['services']['web'] = true;
475
	}
476
}
477

478 479 480 481 482 483
//* Configure OpenVZ
$force = @($conf['openvz']['installed']) ? true : $inst->force_configure_app('OpenVZ', ($install_mode == 'expert'));
if($force) {
	$conf['services']['vserver'] = true;
	swriteln('Configuring OpenVZ');
}
484

485
if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Firewall Server', array('y', 'n'), 'y','configure_firewall')) == 'y') {
486 487
	//* Check for Firewall
	if(!$conf['ufw']['installed'] && !$conf['firewall']['installed']) {
488 489
		$conf['ufw']['installed'] = $inst->force_configure_app('Ubuntu Firewall', ($install_mode == 'expert'));
		$conf['firewall']['installed'] = $inst->force_configure_app('Bastille Firewall', ($install_mode == 'expert'));
490 491 492 493 494 495 496 497 498 499 500 501
	}
	//* 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']){
502 503 504
		swriteln('Configuring Ubuntu Firewall');
		$inst->configure_ufw_firewall();
		$conf['services']['firewall'] = true;
505 506 507
	}
	//* Configure Bastille Firewall
	if($conf['firewall']['installed']){
508 509
		swriteln('Configuring Bastille Firewall');
		$inst->configure_bastille_firewall();
510
		$conf['services']['firewall'] = true;
Florian Schaal's avatar
Florian Schaal committed
511
		$conf['bastille']['installed'] = true;
512
	}
513
}
514

515 516 517 518 519 520 521
//* Configure XMPP
$force = @($conf['xmpp']['installed']) ? true : $inst->force_configure_app('Metronome XMPP Server', ($install_mode == 'expert'));
if($force) {
	swriteln('Configuring Metronome XMPP Server');
	$inst->configure_xmpp();
	$conf['services']['xmpp'] = true;
}
522

523 524 525 526 527 528
//* Configure Fail2ban
$force = @($conf['fail2ban']['installed']) ? true : $inst->force_configure_app('Fail2ban', ($install_mode == 'expert'));
if($force) {
	swriteln('Configuring Fail2ban');
	$inst->configure_fail2ban();
}
529

530
if($conf['services']['web'] == true) {
531 532 533
	//** Configure apps vhost
	swriteln('Configuring Apps vhost');
	$inst->configure_apps_vhost();
534
}
535

536 537 538
//** 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
539
	swriteln('Installing ISPConfig');
540

541 542 543 544 545 546 547 548 549 550 551 552 553 554 555
	//** We want to check if the server is a module or cgi based php enabled server
	//** TODO: Don't always ask for this somehow ?
	/*
	$fast_cgi = $inst->simple_query('CGI PHP Enabled Server?', array('yes','no'),'no');

	if($fast_cgi == 'yes') {
		$alias = $inst->free_query('Script Alias', '/php/');
		$path = $inst->free_query('Script Alias Path', '/path/to/cgi/bin');
		$conf['apache']['vhost_cgi_alias'] = sprintf('ScriptAlias %s %s', $alias, $path);
	} else {
		$conf['apache']['vhost_cgi_alias'] = "";
	}
	*/

	//** Customise the port ISPConfig runs on
556
	$ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
557 558 559
	$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) {
560 561 562
		$check = false;
		do {
			unset($temp_password);
563
			$temp_password = $inst->free_query('Re-enter admin password', '','ispconfig_admin_password');
564
			$check = @($temp_password == $conf['interface_password'])?true:false;
Marius Cramer's avatar
Marius Cramer committed
565
			if(!$check) swriteln('Passwords do not match.');
566 567 568 569
		} while (!$check);
	}
	unset($check);
	unset($temp_password);
570
	unset($temp_admin_password);
571 572 573
	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
574

575
	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') {	 
576
		$inst->make_ispconfig_ssl_cert();
577
	}
578
	$inst->install_ispconfig_interface = true;
579

580 581 582
} else {
	$inst->install_ispconfig_interface = false;
}
583

584
$inst->install_ispconfig();
585

586 587 588
//* Configure DBServer
swriteln('Configuring DBServer');
$inst->configure_dbserver();
589

590 591 592
//* Configure ISPConfig
swriteln('Installing ISPConfig crontab');
if($conf['cron']['installed']) {
latham's avatar
latham committed
593 594
	swriteln('Installing ISPConfig crontab');
	$inst->install_crontab();
595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628
} 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['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart'));
if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart'));
if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart'));
if($conf['courier']['installed'] == true){
	if($conf['courier']['courier-authdaemon'] != '') system($inst->getinitcommand($conf['courier']['courier-authdaemon'], 'restart'));
	if($conf['courier']['courier-imap'] != '') system($inst->getinitcommand($conf['courier']['courier-imap'], 'restart'));
	if($conf['courier']['courier-imap-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-imap-ssl'], 'restart'));
	if($conf['courier']['courier-pop'] != '') system($inst->getinitcommand($conf['courier']['courier-pop'], 'restart'));
	if($conf['courier']['courier-pop-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-pop-ssl'], 'restart'));
}
if($conf['dovecot']['installed'] == true && $conf['dovecot']['init_script'] != '') system($inst->getinitcommand($conf['dovecot']['init_script'], 'restart'));
if($conf['mailman']['installed'] == true && $conf['mailman']['init_script'] != '') system('nohup '.$inst->getinitcommand($conf['mailman']['init_script'], 'restart').' >/dev/null 2>&1 &');
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');
if($conf['xmpp']['installed'] == true && $conf['xmpp']['init_script'] != '') system($inst->getinitcommand($conf['xmpp']['init_script'], 'restart').' &> /dev/null');
629

latham's avatar
latham committed
630

Marius Cramer's avatar
Marius Cramer committed
631 632
$inst->create_mount_script();

633 634 635 636 637
//* 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
638 639 640 641

echo "Installation completed.\n";


642
?>