install.php 37 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.
Till Brehm's avatar
Till Brehm committed
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);
Till Brehm's avatar
Till Brehm committed
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();
Till Brehm's avatar
Till Brehm committed
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 144
$retval=shell_exec("which which");
if (empty($retval)) die ("ISPConfig requieres which \n");
145

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

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

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

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

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


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

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

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

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

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


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

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

$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
249
if($install_mode == 'standard') {
250

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

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

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

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

271
	if($conf['services']['mail']) {
272

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

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

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

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

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

332
	//* Check for DNS
333 334 335
//	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);
336 337
		$conf['bind']['installed'] = $inst->force_configure_app('BIND', false);
		$conf['mydns']['installed'] = $inst->force_configure_app('MyDNS', false);
338 339
	}
	//* Configure PowerDNS
340
/*
341
	if($conf['powerdns']['installed']) {
latham's avatar
latham committed
342 343
		swriteln('Configuring PowerDNS');
		$inst->configure_powerdns();
344 345
		$conf['services']['dns'] = true;
	}
346
*/
347 348
	//* Configure Bind
	if($conf['bind']['installed']) {
latham's avatar
latham committed
349 350
		swriteln('Configuring BIND');
		$inst->configure_bind();
351
		$conf['services']['dns'] = true;
352 353 354
		if(!$inst->find_installed_apps('haveged')) {
			swriteln("[INFO] haveged not detected - DNSSEC can fail");
		}
355 356 357
	}
	//* Configure MyDNS
	if($conf['mydns']['installed']) {
latham's avatar
latham committed
358 359
		swriteln('Configuring MyDNS');
		$inst->configure_mydns();
360 361 362 363
		$conf['services']['dns'] = true;
	}

	//* Configure Jailkit
364
	$force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit', false);
365 366 367 368 369 370
	if($force) {
		swriteln('Configuring Jailkit');
		$inst->configure_jailkit();
	}

	//* Configure Pureftpd
371
	$force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd', false);
372 373 374 375 376 377 378
	if($force) {
		swriteln('Configuring Pureftpd');
		$inst->configure_pureftpd();
	}

	//* Check for Web-Server
	if(!$conf['apache']['installed'] && !$conf['nginx']['installed']) {
379 380
		$conf['apache']['installed'] = $inst->force_configure_app('Apache', false);
		$conf['nginx']['installed'] = $inst->force_configure_app('nginx', false);
381 382 383 384 385 386 387 388 389 390
	}

	//* 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
391
	}
392

latham's avatar
latham committed
393
	//* Configure Apache
394
	if($conf['apache']['installed']){
395 396
		swriteln('Configuring Apache');
		$inst->configure_apache();
397 398 399
		$conf['services']['web'] = true;
		$conf['services']['file'] = true;
		//* Configure Vlogger
400
		$force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger', false);
401 402 403 404 405 406 407 408 409 410 411 412 413
		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;
		}
*/
414
	}
415

416
	//* Configure nginx
417
	if($conf['nginx']['installed']){
418 419
		swriteln('Configuring nginx');
		$inst->configure_nginx();
420
		$conf['services']['web'] = true;
421
	}
422

423
    //* Configure XMPP
424
	$force = @($conf['xmpp']['installed']) ? true : $inst->force_configure_app('Metronome XMPP Server', false);
425 426 427 428 429
	if($force) {
        swriteln('Configuring Metronome XMPP Server');
        $inst->configure_xmpp();
	    $conf['services']['xmpp'] = true;
	}
430

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

459
	//* Configure Fail2ban
460
	$force = @($conf['fail2ban']['installed']) ? true : $inst->force_configure_app('Fail2ban', false);
461
	if($force) {
462 463 464 465
		swriteln('Configuring Fail2ban');
		$inst->configure_fail2ban();
	}

466
	//* Configure OpenVZ
467
	$force = @($conf['openvz']['installed']) ? true : $inst->force_configure_app('OpenVZ', false);
468 469 470
	if($force) {
		$conf['services']['vserver'] = true;
		swriteln('Configuring OpenVZ');
471
	}
472

473 474 475
	//** Configure apps vhost
	swriteln('Configuring Apps vhost');
	$inst->configure_apps_vhost();
476

latham's avatar
latham committed
477 478
	//* Configure ISPConfig
	swriteln('Installing ISPConfig');
479

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

Till Brehm's avatar
Till Brehm committed
498
	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') {	 
499
		$inst->make_ispconfig_ssl_cert();
500 501
	}

latham's avatar
latham committed
502
	$inst->install_ispconfig();
503

latham's avatar
latham committed
504 505 506 507 508
	//* Configure DBServer
	swriteln('Configuring DBServer');
	$inst->configure_dbserver();

	//* Configure ISPConfig
509 510 511 512
	if($conf['cron']['installed']) {
		swriteln('Installing ISPConfig crontab');
		$inst->install_crontab();
	} else swriteln('[ERROR] Cron not found');
513

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

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

547
} else { //* expert mode
548

latham's avatar
latham committed
549 550 551
	//** 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
Till Brehm's avatar
Till Brehm committed
552
	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
553
		$conf['mysql']['master_slave_setup'] = 'y';
554

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

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

latham's avatar
latham committed
578 579 580
		// initialize the connection to the master database
		$inst->dbmaster = new db();
		if($inst->dbmaster->linkId) $inst->dbmaster->closeConn();
581 582
		$inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"]);
		$inst->dbmaster->setDBName($conf['mysql']["master_database"]);
583

latham's avatar
latham committed
584 585 586 587
	} else {
		// the master DB is the same then the slave DB
		$inst->dbmaster = $inst->db;
	}
588

latham's avatar
latham committed
589 590
	//* Create the mysql database
	$inst->configure_database();
591

592 593 594 595 596
	//* 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');
	}
597 598
	//* Configure Webserver - Apache or nginx
	if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) {
Till Brehm's avatar
Till Brehm committed
599
		$http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
600 601
		if($http_server_to_use == 'apache'){
			$conf['nginx']['installed'] = false;
602
			$conf['services']['file'] = true;
603 604 605 606
		} else {
			$conf['apache']['installed'] = false;
		}
	}
607

latham's avatar
latham committed
608 609 610 611 612
	//* Insert the Server record into the database
	swriteln('Adding ISPConfig server record to database.');
	swriteln('');
	$inst->add_database_server_record();

Till Brehm's avatar
Till Brehm committed
613
	if(strtolower($inst->simple_query('Configure Mail', array('y', 'n') , 'y','configure_mail') ) == 'y') {
614

latham's avatar
latham committed
615
		$conf['services']['mail'] = true;
616

617 618 619 620
		//* Configure Postgrey
		$force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey');
		if($force) swriteln('Configuring Postgrey');

latham's avatar
latham committed
621
		//* Configure Postfix
622 623 624 625 626
		$force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix');
		if($force) {
			swriteln('Configuring Postfix');
			$inst->configure_postfix();
		}
627

latham's avatar
latham committed
628
		//* Configure Mailman
629 630 631 632 633
		$force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman');
		if($force) {
			swriteln('Configuring Mailman');
			$inst->configure_mailman();
		}
latham's avatar
latham committed
634

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

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

		//* Configure Getmail
679 680 681 682 683
		$force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail');
		if($force) {
			swriteln('Configuring Getmail');
			$inst->configure_getmail();
		}
684

685 686 687 688 689 690 691 692 693 694 695 696 697
		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
698
	}
699

700 701 702
	//* Configure Jailkit
	$force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit');
	if($force) {
latham's avatar
latham committed
703 704 705
		swriteln('Configuring Jailkit');
		$inst->configure_jailkit();
	}
706

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

		//* 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
726 727
			swriteln('Configuring PowerDNS');
			$inst->configure_powerdns();
728 729 730 731
			$conf['services']['dns'] = true;
		}
		//* Configure Bind
		if($conf['bind']['installed']) {
latham's avatar
latham committed
732 733
			swriteln('Configuring BIND');
			$inst->configure_bind();
734
			$conf['services']['dns'] = true;
735 736 737
			if(!$inst->find_installed_apps('haveged')) {
				swriteln("[INFO] haveged not detected - DNSSEC can fail");
			}
738 739 740
		}
		//* Configure MyDNS
		if($conf['mydns']['installed']) {
latham's avatar
latham committed
741 742
			swriteln('Configuring MyDNS');
			$inst->configure_mydns();
743
			$conf['services']['dns'] = true;
latham's avatar
latham committed
744
		}
745

latham's avatar
latham committed
746
	}
747

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

751 752
		//* Configure Apache
		if($conf['apache']['installed']){
753 754
			swriteln('Configuring Apache');
			$inst->configure_apache();
755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771
			$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');
			}
*/
772
		}
773 774
		//* Configure nginx
		if($conf['nginx']['installed']){
775 776
			swriteln('Configuring nginx');
			$inst->configure_nginx();
777 778
		}
	}
779

780 781 782 783 784 785
	//* Configure OpenVZ
	$force = @($conf['openvz']['installed']) ? true : $inst->force_configure_app('OpenVZ');
	if($force) {
		$conf['services']['vserver'] = true;
		swriteln('Configuring OpenVZ');
	}
786

787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812
	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;
813
		}
latham's avatar
latham committed
814
	}
815

816 817 818 819 820 821 822
    //* 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;
	}
823

latham's avatar
latham committed
824
	//** Configure ISPConfig :-)
825
	$install_ispconfig_interface_default = ($conf['mysql']['master_slave_setup'] == 'y')?'n':'y';
Till Brehm's avatar
Till Brehm committed
826
	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
827
		swriteln('Installing ISPConfig');
828

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

Till Brehm's avatar
Till Brehm committed
861
		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
862 863
			$inst->make_ispconfig_ssl_cert();
		}
864

latham's avatar
latham committed
865
		$inst->install_ispconfig_interface = true;
866

latham's avatar
latham committed
867 868 869
	} else {
		$inst->install_ispconfig_interface = false;
	}
870

latham's avatar
latham committed
871
	$inst->install_ispconfig();
872

latham's avatar
latham committed
873 874 875
	//* Configure DBServer
	swriteln('Configuring DBServer');
	$inst->configure_dbserver();
876

latham's avatar
latham committed
877 878 879
	//* Configure ISPConfig
	swriteln('Installing ISPConfig crontab');
	$inst->install_crontab();
880
	if($conf['apache']['installed'] == true && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart'));
881 882
	//* Reload is enough for nginx
	if($conf['nginx']['installed'] == true){
883 884
		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'));
885
	}
886 887 888
	
	swriteln('Detect IP addresses');
	$inst->detect_ips();
889 890 891



latham's avatar
latham committed
892 893
} //* << $install_mode / 'Standard' or Genius

Marius Cramer's avatar
Marius Cramer committed
894 895
$inst->create_mount_script();

Till Brehm's avatar
Till Brehm committed
896 897 898 899 900
//* 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
901 902 903 904

echo "Installation completed.\n";


905
?>