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.
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

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

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

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

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

	//* 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
383
	}
384

latham's avatar
latham committed
385
	//* Configure Apache
386
	if($conf['apache']['installed']){
387 388
		swriteln('Configuring Apache');
		$inst->configure_apache();
389 390 391
		$conf['services']['web'] = true;
		$conf['services']['file'] = true;
		//* Configure Vlogger
392
		$force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger', false);
393 394 395 396 397 398 399 400 401 402 403 404 405
		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;
		}
*/
406
	}
407

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

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

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

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

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

464 465 466
	//** Configure apps vhost
	swriteln('Configuring Apps vhost');
	$inst->configure_apps_vhost();
467

latham's avatar
latham committed
468 469
	//* Configure ISPConfig
	swriteln('Installing ISPConfig');
470

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

Till Brehm's avatar
Till Brehm committed
489
	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') {	 
490
		$inst->make_ispconfig_ssl_cert();
491 492
	}

latham's avatar
latham committed
493
	$inst->install_ispconfig();
494

latham's avatar
latham committed
495 496 497 498 499
	//* Configure DBServer
	swriteln('Configuring DBServer');
	$inst->configure_dbserver();

	//* Configure ISPConfig
500 501 502 503
	if($conf['cron']['installed']) {
		swriteln('Installing ISPConfig crontab');
		$inst->install_crontab();
	} else swriteln('[ERROR] Cron not found');
504

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

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

538
} else { //* expert mode
539

latham's avatar
latham committed
540 541 542
	//** 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
543
	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
544
		$conf['mysql']['master_slave_setup'] = 'y';
545

latham's avatar
latham committed
546 547 548
		//** Get MySQL root credentials
		$finished = false;
		do {
Till Brehm's avatar
Till Brehm committed
549
			$tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname'); 
550
			$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
551 552 553
			$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');
554

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

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

latham's avatar
latham committed
575 576 577 578
	} else {
		// the master DB is the same then the slave DB
		$inst->dbmaster = $inst->db;
	}
579

latham's avatar
latham committed
580 581
	//* Create the mysql database
	$inst->configure_database();
582

583 584 585 586 587
	//* 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');
	}
588 589
	//* Configure Webserver - Apache or nginx
	if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) {
Till Brehm's avatar
Till Brehm committed
590
		$http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
591 592
		if($http_server_to_use == 'apache'){
			$conf['nginx']['installed'] = false;
593
			$conf['services']['file'] = true;
594 595 596 597
		} else {
			$conf['apache']['installed'] = false;
		}
	}
598

latham's avatar
latham committed
599 600 601 602 603
	//* 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
604
	if(strtolower($inst->simple_query('Configure Mail', array('y', 'n') , 'y','configure_mail') ) == 'y') {
605

latham's avatar
latham committed
606
		$conf['services']['mail'] = true;
607

608 609 610 611
		//* Configure Postgrey
		$force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey');
		if($force) swriteln('Configuring Postgrey');

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

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

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

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

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

676 677 678 679 680 681 682 683 684 685 686 687 688
		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
689
	}
690

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

698 699 700
	//* Configure Pureftpd
	$force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd');
	if($force) {
latham's avatar
latham committed
701 702 703
		swriteln('Configuring Pureftpd');
		$inst->configure_pureftpd();
	}
704 705 706
	
	swriteln('Detect IP addresses');
	$inst->detect_ips();
707

latham's avatar
latham committed
708
	//** Configure DNS
Till Brehm's avatar
Till Brehm committed
709
	if(strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y','configure_dns')) == 'y') {
latham's avatar
latham committed
710
		$conf['services']['dns'] = true;
711 712 713 714 715 716 717 718 719

		//* 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
720 721
			swriteln('Configuring PowerDNS');
			$inst->configure_powerdns();
722 723 724 725
			$conf['services']['dns'] = true;
		}
		//* Configure Bind
		if($conf['bind']['installed']) {
latham's avatar
latham committed
726 727
			swriteln('Configuring BIND');
			$inst->configure_bind();
728 729 730 731
			$conf['services']['dns'] = true;
		}
		//* Configure MyDNS
		if($conf['mydns']['installed']) {
latham's avatar
latham committed
732 733
			swriteln('Configuring MyDNS');
			$inst->configure_mydns();
734
			$conf['services']['dns'] = true;
latham's avatar
latham committed
735
		}
736

latham's avatar
latham committed
737
	}
738

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

742 743
		//* Configure Apache
		if($conf['apache']['installed']){
744 745
			swriteln('Configuring Apache');
			$inst->configure_apache();
746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762
			$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');
			}
*/
763
		}
764 765
		//* Configure nginx
		if($conf['nginx']['installed']){
766 767
			swriteln('Configuring nginx');
			$inst->configure_nginx();
768 769
		}
	}
770

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

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
	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;
804
		}
latham's avatar
latham committed
805
	}
806

807 808 809 810 811 812 813
    //* 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;
	}
814

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

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

Till Brehm's avatar
Till Brehm committed
852
		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
853 854
			$inst->make_ispconfig_ssl_cert();
		}
855

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

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

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

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

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



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

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

Till Brehm's avatar
Till Brehm committed
887 888 889 890 891
//* 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
892 893 894 895

echo "Installation completed.\n";


896
?>