install.php 36.7 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 100 101 102 103 104
//** 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.');
}*/

//** Get distribution identifier
$dist = get_distname();

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

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

//** 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') {
		$tmp = ini_to_array(file_get_contents('autoinstall.ini'));
118 119 120 121
		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();
122 123 124 125 126 127 128 129 130 131
		$autoinstall = $tmp['install'] + $tmp['ssl_cert'] + $tmp['expert'] + $tmp['update'];
		unset($tmp);
	}
	unset($path_parts);
	define('AUTOINSTALL', true);
} else {
	$autoinstall = array();
	define('AUTOINSTALL', false);
}

132

latham's avatar
latham committed
133
//** Include the distribution-specific installer class library and configuration
134 135 136
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';
latham's avatar
latham committed
137 138

//****************************************************************************************************
139
//** Installer Interface
latham's avatar
latham committed
140 141
//****************************************************************************************************
$inst = new installer();
142
if (!$inst->get_php_version()) die('ISPConfig requieres PHP '.$inst->min_php."\n");
143

latham's avatar
latham committed
144 145 146 147 148 149
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))){
150
	die("ERROR: Cannot write to the ".dirname(ISPC_LOG_FILE)." directory. Are you root or sudo ?\n\n");
latham's avatar
latham committed
151 152 153 154 155 156 157 158 159 160 161 162 163
}

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();

164
//** Select the language and set default timezone
165
$conf['language'] = $inst->simple_query('Select language', array('en', 'de'), 'en','language');
166
$conf['timezone'] = get_system_timezone();
latham's avatar
latham committed
167

168
//* Set default theme
169
$conf['theme'] = 'default';
170
$conf['language_file_import_enabled'] = true;
171

latham's avatar
latham committed
172
//** Select installation mode
173
$install_mode = $inst->simple_query('Installation mode', array('standard', 'expert'), 'standard','install_mode');
latham's avatar
latham committed
174 175 176 177 178


//** Get the hostname
$tmp_out = array();
exec('hostname -f', $tmp_out);
179
$conf['hostname'] = @$tmp_out[0];
180
unset($tmp_out);
181 182 183 184 185 186 187 188
//** 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);
189

latham's avatar
latham committed
190
// Check if the mysql functions are loaded in PHP
191
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
192 193 194 195

//** Get MySQL root credentials
$finished = false;
do {
196
	$tmp_mysql_server_host = $inst->free_query('MySQL server hostname', $conf['mysql']['host'],'mysql_hostname');	 
197
	$tmp_mysql_server_port = $inst->free_query('MySQL server port', $conf['mysql']['port'],'mysql_port');
198 199 200 201
	$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');
202
	
203 204
	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");
205
		
206 207
		$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');
208
	}
209

latham's avatar
latham committed
210
	//* Initialize the MySQL server connection
211
	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
212
		$conf['mysql']['host'] = $tmp_mysql_server_host;
213
		$conf['mysql']['port'] = $tmp_mysql_server_port;
latham's avatar
latham committed
214 215 216 217 218 219
		$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 {
220
		swriteln($inst->lng('Unable to connect to the specified MySQL server').' '.mysqli_connect_error());
latham's avatar
latham committed
221 222 223 224 225
	}
} while ($finished == false);
unset($finished);

// Resolve the IP address of the MySQL hostname.
226
$tmp = explode(':', $conf['mysql']['host']);
latham's avatar
latham committed
227 228 229 230 231
if(!$conf['mysql']['ip'] = gethostbyname($tmp[0])) die('Unable to resolve hostname'.$tmp[0]);
unset($tmp);


//** Initializing database connection
232
include_once 'lib/mysql.lib.php';
latham's avatar
latham committed
233 234 235
$inst->db = new db();

//** Begin with standard or expert installation
236 237 238 239 240 241 242 243 244 245 246

$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;

latham's avatar
latham committed
247
if($install_mode == 'standard') {
248

249 250
	$inst->dbmaster = $inst->db;
	
latham's avatar
latham committed
251 252
	//* Create the MySQL database
	$inst->configure_database();
253

latham's avatar
latham committed
254 255 256
	//* Insert the Server record into the database
	$inst->add_database_server_record();

257
	//* Configure Postgrey
258
	$force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey', false);
259
	if($force) swriteln('Configuring Postgrey');
260

261
	//* Configure Postfix
262
	$force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix', false);
263 264 265 266
	if($force) {
		swriteln('Configuring Postfix');
		$inst->configure_postfix();
		$conf['services']['mail'] = true;
267
	}
268

269
	if($conf['services']['mail']) {
270

271
		//* Configure Mailman
272
		$force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman', false);
273 274 275 276 277 278 279
		if($force) {
			swriteln('Configuring Mailman');
			$inst->configure_mailman();
		} 

		//* Check for Dovecot and Courier
		if(!$conf['dovecot']['installed'] && !$conf['courier']['installed']) {
280 281
			$conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot', false);
			$conf['courier']['installed'] = $inst->force_configure_app('Courier', false);
282 283 284 285 286 287 288 289 290 291
		}
		//* 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
292
		//* Configure Dovecot
293 294 295 296
		if($conf['dovecot']['installed']) {
			swriteln('Configuring Dovecot');
			$inst->configure_dovecot();
		}
latham's avatar
latham committed
297
		//* Configure Courier
298 299 300 301 302 303 304 305
		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
306

307
		//* Configure Spamasassin
308
		$force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin', false);
309 310 311 312 313 314
		if($force) {
			swriteln('Configuring Spamassassin');
			$inst->configure_spamassassin();
		}
    
		//* Configure Amavis
315
		$force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd', false);
316 317 318 319
		if($force) {
			swriteln('Configuring Amavisd');
			$inst->configure_amavis();
		}
latham's avatar
latham committed
320

321
		//* Configure Getmail
322
		$force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail', false);
323 324 325 326
		if($force) {
			swriteln('Configuring Getmail');
			$inst->configure_getmail();
		}
327

328
	} else swriteln('[ERROR] Postfix not installed - skipping Mail');
latham's avatar
latham committed
329

330
	//* Check for DNS
331 332 333
//	if(!$conf['powerdns']['installed'] && !$conf['bind']['installed'] && !$conf['mydns']['installed']) {
	if(!$conf['bind']['installed'] && !$conf['mydns']['installed']) {
//		$conf['powerdns']['installed'] = $inst->force_configure_app('PowerDNS', false);
334 335
		$conf['bind']['installed'] = $inst->force_configure_app('BIND', false);
		$conf['mydns']['installed'] = $inst->force_configure_app('MyDNS', false);
336 337
	}
	//* Configure PowerDNS
338
/*
339
	if($conf['powerdns']['installed']) {
latham's avatar
latham committed
340 341
		swriteln('Configuring PowerDNS');
		$inst->configure_powerdns();
342 343
		$conf['services']['dns'] = true;
	}
344
*/
345 346
	//* Configure Bind
	if($conf['bind']['installed']) {
latham's avatar
latham committed
347 348
		swriteln('Configuring BIND');
		$inst->configure_bind();
349 350 351 352
		$conf['services']['dns'] = true;
	}
	//* Configure MyDNS
	if($conf['mydns']['installed']) {
latham's avatar
latham committed
353 354
		swriteln('Configuring MyDNS');
		$inst->configure_mydns();
355 356 357 358
		$conf['services']['dns'] = true;
	}

	//* Configure Jailkit
359
	$force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit', false);
360 361 362 363 364 365
	if($force) {
		swriteln('Configuring Jailkit');
		$inst->configure_jailkit();
	}

	//* Configure Pureftpd
366
	$force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd', false);
367 368 369 370 371 372 373
	if($force) {
		swriteln('Configuring Pureftpd');
		$inst->configure_pureftpd();
	}

	//* Check for Web-Server
	if(!$conf['apache']['installed'] && !$conf['nginx']['installed']) {
374 375
		$conf['apache']['installed'] = $inst->force_configure_app('Apache', false);
		$conf['nginx']['installed'] = $inst->force_configure_app('nginx', false);
376 377 378 379 380 381 382 383 384 385
	}

	//* Configure Webserver - Apache or nginx
	if($conf['apache']['installed'] && $conf['nginx']['installed']) {
		$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;
		} else {
			$conf['apache']['installed'] = false;
		}
latham's avatar
latham committed
386
	}
387

latham's avatar
latham committed
388
	//* Configure Apache
389
	if($conf['apache']['installed']){
390 391
		swriteln('Configuring Apache');
		$inst->configure_apache();
392 393 394
		$conf['services']['web'] = true;
		$conf['services']['file'] = true;
		//* Configure Vlogger
395
		$force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger', false);
396 397 398 399 400 401 402 403 404 405 406 407 408
		if($force) {
			swriteln('Configuring vlogger');
			$inst->configure_vlogger();
		}
		//* Configure squid
/*
		$force = @($conf['squid']['installed']) ? true : $inst->force_configure_app('squid');
		if($force) {
			swriteln('Configuring Squid');
			$inst->configure_squid();
			$conf['services']['proxy'] = true;
		}
*/
409
	}
410

411
	//* Configure nginx
412
	if($conf['nginx']['installed']){
413 414
		swriteln('Configuring nginx');
		$inst->configure_nginx();
415
		$conf['services']['web'] = true;
416
	}
417

418
    //* Configure XMPP
419
	$force = @($conf['xmpp']['installed']) ? true : $inst->force_configure_app('Metronome XMPP Server', false);
420 421 422 423 424
	if($force) {
        swriteln('Configuring Metronome XMPP Server');
        $inst->configure_xmpp();
	    $conf['services']['xmpp'] = true;
	}
425

426 427
	//* Check for Firewall
	if(!$conf['ufw']['installed'] && !$conf['firewall']['installed']) {
428 429
		$conf['ufw']['installed'] = $inst->force_configure_app('Ubuntu Firewall', false);
		$conf['firewall']['installed'] = $inst->force_configure_app('Bastille Firewall', false);
430 431 432 433 434 435 436 437 438 439 440 441
	}
	//* 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']){
442 443 444
		swriteln('Configuring Ubuntu Firewall');
		$inst->configure_ufw_firewall();
		$conf['services']['firewall'] = true;
445 446 447
	}
	//* Configure Bastille Firewall
	if($conf['firewall']['installed']){
448 449
		swriteln('Configuring Bastille Firewall');
		$inst->configure_bastille_firewall();
450
		$conf['services']['firewall'] = true;
Florian Schaal's avatar
Florian Schaal committed
451
		$conf['bastille']['installed'] = true;
452
	}
453

454
	//* Configure Fail2ban
455
	$force = @($conf['fail2ban']['installed']) ? true : $inst->force_configure_app('Fail2ban', false);
456
	if($force) {
457 458 459 460
		swriteln('Configuring Fail2ban');
		$inst->configure_fail2ban();
	}

461
	//* Configure OpenVZ
462
	$force = @($conf['openvz']['installed']) ? true : $inst->force_configure_app('OpenVZ', false);
463 464 465
	if($force) {
		$conf['services']['vserver'] = true;
		swriteln('Configuring OpenVZ');
466
	}
467

468 469 470
	//** Configure apps vhost
	swriteln('Configuring Apps vhost');
	$inst->configure_apps_vhost();
471

latham's avatar
latham committed
472 473
	//* Configure ISPConfig
	swriteln('Installing ISPConfig');
474

latham's avatar
latham committed
475
	//** Customize the port ISPConfig runs on
476
	$ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
477
	$conf['interface_password'] = $inst->free_query('Admin password', 'admin');
478 479 480 481
	if($conf['interface_password'] != 'admin') {
		$check = false;
		do {
			unset($temp_password);
Marius Cramer's avatar
Marius Cramer committed
482
			$temp_password = $inst->free_query('Re-enter admin password', '');
483
			$check = @($temp_password == $conf['interface_password'])?true:false;
Marius Cramer's avatar
Marius Cramer committed
484
			if(!$check) swriteln('Passwords do not match.');
485 486 487 488
		} while (!$check);
	}
	unset($check);
	unset($temp_password);
489 490 491
	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
492

493
	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') {	 
494
		$inst->make_ispconfig_ssl_cert();
495 496
	}

latham's avatar
latham committed
497
	$inst->install_ispconfig();
498

latham's avatar
latham committed
499 500 501 502 503
	//* Configure DBServer
	swriteln('Configuring DBServer');
	$inst->configure_dbserver();

	//* Configure ISPConfig
504 505 506 507
	if($conf['cron']['installed']) {
		swriteln('Installing ISPConfig crontab');
		$inst->install_crontab();
	} else swriteln('[ERROR] Cron not found');
508

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

latham's avatar
latham committed
512
	swriteln('Restarting services ...');
513
	if($conf['mysql']['installed'] == true && $conf['mysql']['init_script'] != '') system($inst->getinitcommand($conf['mysql']['init_script'], 'restart').' >/dev/null 2>&1');
514 515 516 517 518 519 520 521 522 523 524 525 526
	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 &');
527
	if($conf['apache']['installed'] == true && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart'));
528 529
	//* Reload is enough for nginx
	if($conf['nginx']['installed'] == true){
530 531
		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'));
532
	}
533
	if($conf['pureftpd']['installed'] == true && $conf['pureftpd']['init_script'] != '') system($inst->getinitcommand($conf['pureftpd']['init_script'], 'restart'));
534 535 536
	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');
537
	//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');
538
	if($conf['nginx']['installed'] == true && $conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'restart').' &> /dev/null');
539
	if($conf['ufw']['installed'] == true && $conf['ufw']['init_script'] != '') system($inst->getinitcommand($conf['ufw']['init_script'], 'restart').' &> /dev/null');
540
    if($conf['xmpp']['installed'] == true && $conf['xmpp']['init_script'] != '') system($inst->getinitcommand($conf['xmpp']['init_script'], 'restart').' &> /dev/null');
541

542
} else { //* expert mode
543

latham's avatar
latham committed
544 545 546
	//** 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
547
	if(strtolower($inst->simple_query('Shall this server join an existing ISPConfig multiserver setup', array('y', 'n'), 'n','join_multiserver_setup')) == 'y') {
latham's avatar
latham committed
548
		$conf['mysql']['master_slave_setup'] = 'y';
549

latham's avatar
latham committed
550 551 552
		//** Get MySQL root credentials
		$finished = false;
		do {
553
			$tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname'); 
554
			$tmp_mysql_server_port = $inst->free_query('MySQL master server port', $conf['mysql']['master_port'],'mysql_master_port');
555 556 557
			$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');
558

latham's avatar
latham committed
559
			//* Initialize the MySQL server connection
560
			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)) {
latham's avatar
latham committed
561
				$conf['mysql']['master_host'] = $tmp_mysql_server_host;
562
				$conf['mysql']['master_port'] = $tmp_mysql_server_port;
latham's avatar
latham committed
563 564 565 566 567
				$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 {
568
				swriteln($inst->lng('Unable to connect to mysql server').' '.mysqli_connect_error());
latham's avatar
latham committed
569 570 571
			}
		} while ($finished == false);
		unset($finished);
572

latham's avatar
latham committed
573 574 575
		// initialize the connection to the master database
		$inst->dbmaster = new db();
		if($inst->dbmaster->linkId) $inst->dbmaster->closeConn();
576 577
		$inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"]);
		$inst->dbmaster->setDBName($conf['mysql']["master_database"]);
578

latham's avatar
latham committed
579 580 581 582
	} else {
		// the master DB is the same then the slave DB
		$inst->dbmaster = $inst->db;
	}
583

latham's avatar
latham committed
584 585
	//* Create the mysql database
	$inst->configure_database();
586

587 588 589 590 591
	//* Check for Web-Server
	if($conf['apache']['installed'] != true && $conf['nginx']['installed'] != true) {
		$conf['apache']['installed'] = $inst->force_configure_app('Apache');
		$conf['nginx']['installed'] = $inst->force_configure_app('nginx');
	}
592 593
	//* Configure Webserver - Apache or nginx
	if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) {
594
		$http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
595 596
		if($http_server_to_use == 'apache'){
			$conf['nginx']['installed'] = false;
597
			$conf['services']['file'] = true;
598 599 600 601
		} else {
			$conf['apache']['installed'] = false;
		}
	}
602

latham's avatar
latham committed
603 604 605 606 607
	//* Insert the Server record into the database
	swriteln('Adding ISPConfig server record to database.');
	swriteln('');
	$inst->add_database_server_record();

608
	if(strtolower($inst->simple_query('Configure Mail', array('y', 'n') , 'y','configure_mail') ) == 'y') {
609

latham's avatar
latham committed
610
		$conf['services']['mail'] = true;
611

612 613 614 615
		//* Configure Postgrey
		$force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey');
		if($force) swriteln('Configuring Postgrey');

latham's avatar
latham committed
616
		//* Configure Postfix
617 618 619 620 621
		$force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix');
		if($force) {
			swriteln('Configuring Postfix');
			$inst->configure_postfix();
		}
622

latham's avatar
latham committed
623
		//* Configure Mailman
624 625 626 627 628
		$force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman');
		if($force) {
			swriteln('Configuring Mailman');
			$inst->configure_mailman();
		}
latham's avatar
latham committed
629

630 631
		//* Check for Dovecot and Courier
		if(!$conf['dovecot']['installed'] && !$conf['courier']['installed']) {
632 633
			$conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot');
			$conf['courier']['installed'] = $inst->force_configure_app('Courier');
634 635 636 637 638 639 640 641 642 643 644 645
		}
		//* 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;
			}
		}
		//* Configure Dovecot
		if($conf['dovecot']['installed']) {
latham's avatar
latham committed
646 647
			swriteln('Configuring Dovecot');
			$inst->configure_dovecot();
648 649 650 651 652
		}
		//* Configure Courier
		if($conf['courier']['installed']) {
			swriteln('Configuring Courier');
			$inst->configure_courier();
latham's avatar
latham committed
653 654 655 656 657 658 659
			swriteln('Configuring SASL');
			$inst->configure_saslauthd();
			swriteln('Configuring PAM');
			$inst->configure_pam();
		}

		//* Configure Spamasassin
660 661 662 663 664 665
		$force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin');
		if($force) {
			swriteln('Configuring Spamassassin');
			$inst->configure_spamassassin();
		}
    
latham's avatar
latham committed
666
		//* Configure Amavis
667 668 669 670 671
		$force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd');
		if($force) {
			swriteln('Configuring Amavisd');
			$inst->configure_amavis();
		}
latham's avatar
latham committed
672 673

		//* Configure Getmail
674 675 676 677 678
		$force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail');
		if($force) {
			swriteln('Configuring Getmail');
			$inst->configure_getmail();
		}
679

680 681 682 683 684 685 686 687 688 689 690 691 692
		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 &');
latham's avatar
latham committed
693
	}
694

695 696 697
	//* Configure Jailkit
	$force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit');
	if($force) {
latham's avatar
latham committed
698 699 700
		swriteln('Configuring Jailkit');
		$inst->configure_jailkit();
	}
701

702 703 704
	//* Configure Pureftpd
	$force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd');
	if($force) {
latham's avatar
latham committed
705 706 707
		swriteln('Configuring Pureftpd');
		$inst->configure_pureftpd();
	}
708
	
latham's avatar
latham committed
709
	//** Configure DNS
710
	if(strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y','configure_dns')) == 'y') {
latham's avatar
latham committed
711
		$conf['services']['dns'] = true;
712 713 714 715 716 717 718 719 720

		//* Check for DNS
		if(!$conf['powerdns']['installed'] && !$conf['bind']['installed'] && !$conf['mydns']['installed']) {
			$conf['powerdns']['installed'] = $inst->force_configure_app('PowerDNS');
			$conf['bind']['installed'] = $inst->force_configure_app('BIND');
			$conf['mydns']['installed'] = $inst->force_configure_app('MyDNS');
		}
		//* Configure PowerDNS
		if($conf['powerdns']['installed']) {
latham's avatar
latham committed
721 722
			swriteln('Configuring PowerDNS');
			$inst->configure_powerdns();
723 724 725 726
			$conf['services']['dns'] = true;
		}
		//* Configure Bind
		if($conf['bind']['installed']) {
latham's avatar
latham committed
727 728
			swriteln('Configuring BIND');
			$inst->configure_bind();
729 730 731 732
			$conf['services']['dns'] = true;
		}
		//* Configure MyDNS
		if($conf['mydns']['installed']) {
latham's avatar
latham committed
733 734
			swriteln('Configuring MyDNS');
			$inst->configure_mydns();
735
			$conf['services']['dns'] = true;
latham's avatar
latham committed
736
		}
737

latham's avatar
latham committed
738
	}
739

740 741
	if(strtolower($inst->simple_query('Configure Web Server', array('y', 'n'), 'y','configure_webserver')) == 'y') {
		$conf['services']['web'] = true;
742

743 744
		//* Configure Apache
		if($conf['apache']['installed']){
745 746
			swriteln('Configuring Apache');
			$inst->configure_apache();
747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763
			$conf['services']['file'] = true;
			//* Configure Vlogger
			$force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger');
			if($force) {
				swriteln('Configuring vlogger');
				$inst->configure_vlogger();
			}
			//* Configure squid
/*
			$force = @($conf['squid']['installed']) ? true : $inst->force_configure_app('squid');
			if($force) {
				swriteln('Configuring Squid');
				$inst->configure_squid();
				$conf['services']['proxy'] = true;
				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');
			}
*/
764
		}
765 766
		//* Configure nginx
		if($conf['nginx']['installed']){
767 768
			swriteln('Configuring nginx');
			$inst->configure_nginx();
769 770
		}
	}
771

772 773 774 775 776 777
	//* Configure OpenVZ
	$force = @($conf['openvz']['installed']) ? true : $inst->force_configure_app('OpenVZ');
	if($force) {
		$conf['services']['vserver'] = true;
		swriteln('Configuring OpenVZ');
	}
778

779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804
	if(strtolower($inst->simple_query('Configure Firewall Server', array('y', 'n'), 'y','configure_firewall')) == 'y') {
		//* Check for Firewall
		if(!$conf['ufw']['installed'] && !$conf['firewall']['installed']) {
			$conf['ufw']['installed'] = $inst->force_configure_app('Ubuntu Firewall');
			$conf['firewall']['installed'] = $inst->force_configure_app('Bastille Firewall');
		}
		//* 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']){
			swriteln('Configuring Ubuntu Firewall');
			$inst->configure_ufw_firewall();
			$conf['services']['firewall'] = true;
		}
		//* Configure Bastille Firewall
		if($conf['firewall']['installed']){
			swriteln('Configuring Bastille Firewall');
			$inst->configure_bastille_firewall();
			$conf['services']['firewall'] = true;
805
		}
latham's avatar
latham committed
806
	}
807

808 809 810 811 812 813 814
    //* Configure XMPP
	$force = @($conf['xmpp']['installed']) ? true : $inst->force_configure_app('Metronome XMPP Server');
	if($force) {
        swriteln('Configuring Metronome XMPP Server');
        $inst->configure_xmpp();
	    $conf['services']['xmpp'] = true;
	}
815

latham's avatar
latham committed
816
	//** Configure ISPConfig :-)
817
	$install_ispconfig_interface_default = ($conf['mysql']['master_slave_setup'] == 'y')?'n':'y';
818
	if(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
819
		swriteln('Installing ISPConfig');
820

latham's avatar
latham committed
821 822 823 824 825 826 827 828 829 830 831 832 833 834 835
		//** 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
836
		$ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
837
		$conf['interface_password'] = $inst->free_query('Admin password', 'admin');
838 839 840 841
		if($conf['interface_password'] != 'admin') {
			$check = false;
			do {
				unset($temp_password);
Marius Cramer's avatar
Marius Cramer committed
842
				$temp_password = $inst->free_query('Re-enter admin password', '');
843
				$check = @($temp_password == $conf['interface_password'])?true:false;
Marius Cramer's avatar
Marius Cramer committed
844
				if(!$check) swriteln('Passwords do not match.');
845 846 847 848
			} while (!$check);
		}
		unset($check);
		unset($temp_password);
849 850 851
		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);
852

853
		if(strtolower($inst->simple_query('Enable SSL for the ISPConfig web interface', array('y', 'n'), 'y','ispconfig_use_ssl')) == 'y') {
latham's avatar
latham committed
854 855
			$inst->make_ispconfig_ssl_cert();
		}
856

latham's avatar
latham committed
857
		$inst->install_ispconfig_interface = true;
858

latham's avatar
latham committed
859 860 861
	} else {
		$inst->install_ispconfig_interface = false;
	}
862

latham's avatar
latham committed
863
	$inst->install_ispconfig();
864

latham's avatar
latham committed
865 866 867
	//* Configure DBServer
	swriteln('Configuring DBServer');
	$inst->configure_dbserver();
868

latham's avatar
latham committed
869 870 871
	//* Configure ISPConfig
	swriteln('Installing ISPConfig crontab');
	$inst->install_crontab();
872
	if($conf['apache']['installed'] == true && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart'));
873 874
	//* Reload is enough for nginx
	if($conf['nginx']['installed'] == true){
875 876
		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'));
877
	}
878 879 880
	
	swriteln('Detect IP addresses');
	$inst->detect_ips();
881 882 883



latham's avatar
latham committed
884 885
} //* << $install_mode / 'Standard' or Genius

Marius Cramer's avatar
Marius Cramer committed
886 887
$inst->create_mount_script();

888 889 890 891 892
//* 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
893 894 895 896

echo "Installation completed.\n";


897
?>