install.php 35.5 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 118 119 120 121 122 123 124 125 126 127

//** 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'));
		$autoinstall = $tmp['install'] + $tmp['ssl_cert'] + $tmp['expert'] + $tmp['update'];
		unset($tmp);
	}
	unset($path_parts);
	define('AUTOINSTALL', true);
} else {
	$autoinstall = array();
	define('AUTOINSTALL', false);
}

128

latham's avatar
latham committed
129
//** Include the distribution-specific installer class library and configuration
130 131 132
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
133 134

//****************************************************************************************************
135
//** Installer Interface
latham's avatar
latham committed
136 137
//****************************************************************************************************
$inst = new installer();
138

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

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

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

163
//* Set default theme
164
$conf['theme'] = 'default';
165
$conf['language_file_import_enabled'] = true;
166

latham's avatar
latham committed
167
//** Select installation mode
Till Brehm's avatar
Till Brehm committed
168
$install_mode = $inst->simple_query('Installation mode', array('standard', 'expert'), 'standard','install_mode');
latham's avatar
latham committed
169 170 171 172 173


//** Get the hostname
$tmp_out = array();
exec('hostname -f', $tmp_out);
174
$conf['hostname'] = @$tmp_out[0];
175
unset($tmp_out);
176 177 178 179 180 181 182 183
//** 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);
184

latham's avatar
latham committed
185 186 187 188 189 190
// Check if the mysql functions are loaded in PHP
if(!function_exists('mysql_connect')) die('No PHP MySQL functions available. Please ensure that the PHP MySQL module is loaded.');

//** Get MySQL root credentials
$finished = false;
do {
Till Brehm's avatar
Till Brehm committed
191 192 193 194 195
	$tmp_mysql_server_host = $inst->free_query('MySQL server hostname', $conf['mysql']['host'],'mysql_hostname');	 
	$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');
196
	
197 198
	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");
199
		
Till Brehm's avatar
Till Brehm committed
200 201
		$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');
202
	}
203

latham's avatar
latham committed
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
	//* Initialize the MySQL server connection
	if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
		$conf['mysql']['host'] = $tmp_mysql_server_host;
		$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 {
		swriteln($inst->lng('Unable to connect to the specified MySQL server').' '.mysql_error());
	}
} while ($finished == false);
unset($finished);

// Resolve the IP address of the MySQL hostname.
219
$tmp = explode(':', $conf['mysql']['host']);
latham's avatar
latham committed
220 221 222 223 224
if(!$conf['mysql']['ip'] = gethostbyname($tmp[0])) die('Unable to resolve hostname'.$tmp[0]);
unset($tmp);


//** Initializing database connection
225
include_once 'lib/mysql.lib.php';
latham's avatar
latham committed
226 227 228
$inst->db = new db();

//** Begin with standard or expert installation
229 230 231 232 233 234 235 236 237 238 239

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

latham's avatar
latham committed
242 243
	//* Create the MySQL database
	$inst->configure_database();
244

latham's avatar
latham committed
245 246 247
	//* Insert the Server record into the database
	$inst->add_database_server_record();

248 249 250
	//* Configure Postgrey
	$force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey');
	if($force) swriteln('Configuring Postgrey');
251

252 253 254 255 256 257
	//* Configure Postfix
	$force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix');
	if($force) {
		swriteln('Configuring Postfix');
		$inst->configure_postfix();
		$conf['services']['mail'] = true;
258
	}
259

260
	if($conf['services']['mail']) {
261

262 263 264 265 266 267 268 269 270
		//* Configure Mailman
		$force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman');
		if($force) {
			swriteln('Configuring Mailman');
			$inst->configure_mailman();
		} 

		//* Check for Dovecot and Courier
		if(!$conf['dovecot']['installed'] && !$conf['courier']['installed']) {
Florian Schaal's avatar
Florian Schaal committed
271 272
			$conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot');
			$conf['courier']['installed'] = $inst->force_configure_app('Courier');
273 274 275 276 277 278 279 280 281 282
		}
		//* 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
283
		//* Configure Dovecot
284 285 286 287
		if($conf['dovecot']['installed']) {
			swriteln('Configuring Dovecot');
			$inst->configure_dovecot();
		}
latham's avatar
latham committed
288
		//* Configure Courier
289 290 291 292 293 294 295 296
		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
297

298 299 300 301 302 303 304 305 306 307 308 309 310
		//* Configure Spamasassin
		$force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin');
		if($force) {
			swriteln('Configuring Spamassassin');
			$inst->configure_spamassassin();
		}
    
		//* Configure Amavis
		$force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd');
		if($force) {
			swriteln('Configuring Amavisd');
			$inst->configure_amavis();
		}
latham's avatar
latham committed
311

312 313 314 315 316 317
		//* Configure Getmail
		$force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail');
		if($force) {
			swriteln('Configuring Getmail');
			$inst->configure_getmail();
		}
318

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

321 322 323 324 325 326 327 328
	//* 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
329 330
		swriteln('Configuring PowerDNS');
		$inst->configure_powerdns();
331 332 333 334
		$conf['services']['dns'] = true;
	}
	//* Configure Bind
	if($conf['bind']['installed']) {
latham's avatar
latham committed
335 336
		swriteln('Configuring BIND');
		$inst->configure_bind();
337 338 339 340
		$conf['services']['dns'] = true;
	}
	//* Configure MyDNS
	if($conf['mydns']['installed']) {
latham's avatar
latham committed
341 342
		swriteln('Configuring MyDNS');
		$inst->configure_mydns();
343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373
		$conf['services']['dns'] = true;
	}

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

	//* Configure Pureftpd
	$force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd');
	if($force) {
		swriteln('Configuring Pureftpd');
		$inst->configure_pureftpd();
	}

	//* Check for Web-Server
	if(!$conf['apache']['installed'] && !$conf['nginx']['installed']) {
		$conf['apache']['installed'] = $inst->force_configure_app('Apache');
		$conf['nginx']['installed'] = $inst->force_configure_app('nginx');
	}

	//* 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
374
	}
375

latham's avatar
latham committed
376
	//* Configure Apache
377
	if($conf['apache']['installed']){
378 379
		swriteln('Configuring Apache');
		$inst->configure_apache();
380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396
		$conf['services']['web'] = true;
		$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;
		}
*/
397
	}
398

399
	//* Configure nginx
400
	if($conf['nginx']['installed']){
401 402
		swriteln('Configuring nginx');
		$inst->configure_nginx();
403
		$conf['services']['web'] = true;
404
	}
405

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

414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429
	//* 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']){
430 431 432
		swriteln('Configuring Ubuntu Firewall');
		$inst->configure_ufw_firewall();
		$conf['services']['firewall'] = true;
433 434 435
	}
	//* Configure Bastille Firewall
	if($conf['firewall']['installed']){
436 437
		swriteln('Configuring Bastille Firewall');
		$inst->configure_bastille_firewall();
438
		$conf['services']['firewall'] = true;
439
	}
latham's avatar
latham committed
440

441
	//* Configure Fail2ban
442 443
	$force = @($conf['fail2ban']['installed']) ? true : $inst->force_configure_app('Fail2ban');
	if($force) {
444 445 446 447
		swriteln('Configuring Fail2ban');
		$inst->configure_fail2ban();
	}

448 449 450 451 452
	//* Configure OpenVZ
	$force = @($conf['openvz']['installed']) ? true : $inst->force_configure_app('OpenVZ');
	if($force) {
		$conf['services']['vserver'] = true;
		swriteln('Configuring OpenVZ');
453
	}
454

455 456 457
	//** Configure apps vhost
	swriteln('Configuring Apps vhost');
	$inst->configure_apps_vhost();
458

latham's avatar
latham committed
459 460
	//* Configure ISPConfig
	swriteln('Installing ISPConfig');
461

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

Till Brehm's avatar
Till Brehm committed
480
	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') {	 
481
		$inst->make_ispconfig_ssl_cert();
482 483
	}

latham's avatar
latham committed
484
	$inst->install_ispconfig();
485

latham's avatar
latham committed
486 487 488 489 490
	//* Configure DBServer
	swriteln('Configuring DBServer');
	$inst->configure_dbserver();

	//* Configure ISPConfig
491 492 493 494
	if($conf['cron']['installed']) {
		swriteln('Installing ISPConfig crontab');
		$inst->install_crontab();
	} else swriteln('[ERROR] Cron not found');
495

latham's avatar
latham committed
496
	swriteln('Restarting services ...');
497
	if($conf['mysql']['installed'] == true && $conf['mysql']['init_script'] != '') system($inst->getinitcommand($conf['mysql']['init_script'], 'restart').' >/dev/null 2>&1');
498 499 500 501 502 503 504 505 506 507 508 509 510
	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 &');
511
	if($conf['apache']['installed'] == true && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart'));
512 513
	//* Reload is enough for nginx
	if($conf['nginx']['installed'] == true){
514 515
		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'));
516
	}
517
	if($conf['pureftpd']['installed'] == true && $conf['pureftpd']['init_script'] != '') system($inst->getinitcommand($conf['pureftpd']['init_script'], 'restart'));
518 519 520
	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');
521
	//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');
522
	if($conf['nginx']['installed'] == true && $conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'restart').' &> /dev/null');
523
	if($conf['ufw']['installed'] == true && $conf['ufw']['init_script'] != '') system($inst->getinitcommand($conf['ufw']['init_script'], 'restart').' &> /dev/null');
524
    if($conf['xmpp']['installed'] == true && $conf['xmpp']['init_script'] != '') system($inst->getinitcommand($conf['xmpp']['init_script'], 'restart').' &> /dev/null');
525

526
} else { //* expert mode
527

latham's avatar
latham committed
528 529 530
	//** 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
531
	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
532
		$conf['mysql']['master_slave_setup'] = 'y';
533

latham's avatar
latham committed
534 535 536
		//** Get MySQL root credentials
		$finished = false;
		do {
Till Brehm's avatar
Till Brehm committed
537 538 539 540
			$tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname'); 
			$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');
541

latham's avatar
latham committed
542 543 544 545 546 547 548 549 550 551 552 553
			//* Initialize the MySQL server connection
			if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
				$conf['mysql']['master_host'] = $tmp_mysql_server_host;
				$conf['mysql']['master_admin_user'] = $tmp_mysql_server_admin_user;
				$conf['mysql']['master_admin_password'] = $tmp_mysql_server_admin_password;
				$conf['mysql']['master_database'] = $tmp_mysql_server_database;
				$finished = true;
			} else {
				swriteln($inst->lng('Unable to connect to mysql server').' '.mysql_error());
			}
		} while ($finished == false);
		unset($finished);
554

latham's avatar
latham committed
555 556 557
		// initialize the connection to the master database
		$inst->dbmaster = new db();
		if($inst->dbmaster->linkId) $inst->dbmaster->closeConn();
558 559
		$inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"]);
		$inst->dbmaster->setDBName($conf['mysql']["master_database"]);
560

latham's avatar
latham committed
561 562 563 564
	} else {
		// the master DB is the same then the slave DB
		$inst->dbmaster = $inst->db;
	}
565

latham's avatar
latham committed
566 567
	//* Create the mysql database
	$inst->configure_database();
568

569 570 571 572 573
	//* 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');
	}
574 575
	//* Configure Webserver - Apache or nginx
	if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) {
Till Brehm's avatar
Till Brehm committed
576
		$http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
577 578
		if($http_server_to_use == 'apache'){
			$conf['nginx']['installed'] = false;
579
			$conf['services']['file'] = true;
580 581 582 583
		} else {
			$conf['apache']['installed'] = false;
		}
	}
584

latham's avatar
latham committed
585 586 587 588 589
	//* 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
590
	if(strtolower($inst->simple_query('Configure Mail', array('y', 'n') , 'y','configure_mail') ) == 'y') {
591

latham's avatar
latham committed
592
		$conf['services']['mail'] = true;
593

594 595 596 597
		//* Configure Postgrey
		$force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey');
		if($force) swriteln('Configuring Postgrey');

latham's avatar
latham committed
598
		//* Configure Postfix
599 600 601 602 603
		$force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix');
		if($force) {
			swriteln('Configuring Postfix');
			$inst->configure_postfix();
		}
604

latham's avatar
latham committed
605
		//* Configure Mailman
606 607 608 609 610
		$force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman');
		if($force) {
			swriteln('Configuring Mailman');
			$inst->configure_mailman();
		}
latham's avatar
latham committed
611

612 613
		//* Check for Dovecot and Courier
		if(!$conf['dovecot']['installed'] && !$conf['courier']['installed']) {
Florian Schaal's avatar
Florian Schaal committed
614 615
			$conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot');
			$conf['courier']['installed'] = $inst->force_configure_app('Courier');
616 617 618 619 620 621 622 623 624 625 626 627
		}
		//* 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
628 629
			swriteln('Configuring Dovecot');
			$inst->configure_dovecot();
630 631 632 633 634
		}
		//* Configure Courier
		if($conf['courier']['installed']) {
			swriteln('Configuring Courier');
			$inst->configure_courier();
latham's avatar
latham committed
635 636 637 638 639 640 641
			swriteln('Configuring SASL');
			$inst->configure_saslauthd();
			swriteln('Configuring PAM');
			$inst->configure_pam();
		}

		//* Configure Spamasassin
642 643 644 645 646 647
		$force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin');
		if($force) {
			swriteln('Configuring Spamassassin');
			$inst->configure_spamassassin();
		}
    
latham's avatar
latham committed
648
		//* Configure Amavis
649 650 651 652 653
		$force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd');
		if($force) {
			swriteln('Configuring Amavisd');
			$inst->configure_amavis();
		}
latham's avatar
latham committed
654 655

		//* Configure Getmail
656 657 658 659 660
		$force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail');
		if($force) {
			swriteln('Configuring Getmail');
			$inst->configure_getmail();
		}
661

662 663 664 665 666 667 668 669 670 671 672 673 674
		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
675
	}
676

677 678 679
	//* Configure Jailkit
	$force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit');
	if($force) {
latham's avatar
latham committed
680 681 682
		swriteln('Configuring Jailkit');
		$inst->configure_jailkit();
	}
683

684 685 686
	//* Configure Pureftpd
	$force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd');
	if($force) {
latham's avatar
latham committed
687 688 689
		swriteln('Configuring Pureftpd');
		$inst->configure_pureftpd();
	}
690

latham's avatar
latham committed
691
	//** Configure DNS
Till Brehm's avatar
Till Brehm committed
692
	if(strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y','configure_dns')) == 'y') {
latham's avatar
latham committed
693
		$conf['services']['dns'] = true;
694 695 696 697 698 699 700 701 702

		//* 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
703 704
			swriteln('Configuring PowerDNS');
			$inst->configure_powerdns();
705 706 707 708
			$conf['services']['dns'] = true;
		}
		//* Configure Bind
		if($conf['bind']['installed']) {
latham's avatar
latham committed
709 710
			swriteln('Configuring BIND');
			$inst->configure_bind();
711 712 713 714
			$conf['services']['dns'] = true;
		}
		//* Configure MyDNS
		if($conf['mydns']['installed']) {
latham's avatar
latham committed
715 716
			swriteln('Configuring MyDNS');
			$inst->configure_mydns();
717
			$conf['services']['dns'] = true;
latham's avatar
latham committed
718
		}
719

latham's avatar
latham committed
720
	}
721

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

725 726
		//* Configure Apache
		if($conf['apache']['installed']){
727 728
			swriteln('Configuring Apache');
			$inst->configure_apache();
729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745
			$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');
			}
*/
746
		}
747 748
		//* Configure nginx
		if($conf['nginx']['installed']){
749 750
			swriteln('Configuring nginx');
			$inst->configure_nginx();
751 752
		}
	}
753

754 755
	if($conf['openvz']['installed'] = true && strtolower($inst->simple_query('Enable Openvz-Server', array('y', 'n'), 'y','configure_openvz')) == 'y')
			$conf['services']['vserver'] = true;
756

757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782
	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;
783
		}
latham's avatar
latham committed
784
	}
785

786 787 788 789 790 791 792
    //* 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;
	}
793

latham's avatar
latham committed
794
	//** Configure ISPConfig :-)
795
	$install_ispconfig_interface_default = ($conf['mysql']['master_slave_setup'] == 'y')?'n':'y';
Till Brehm's avatar
Till Brehm committed
796
	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
797
		swriteln('Installing ISPConfig');
798

latham's avatar
latham committed
799 800 801 802 803 804 805 806 807 808 809 810 811 812 813
		//** 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
814
		$ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
815
		$conf['interface_password'] = $inst->free_query('Admin password', 'admin');
816 817 818 819
		if($conf['interface_password'] != 'admin') {
			$check = false;
			do {
				unset($temp_password);
Marius Cramer's avatar
Marius Cramer committed
820
				$temp_password = $inst->free_query('Re-enter admin password', '');
821
				$check = @($temp_password == $conf['interface_password'])?true:false;
Marius Cramer's avatar
Marius Cramer committed
822
				if(!$check) swriteln('Passwords do not match.');
823 824 825 826
			} while (!$check);
		}
		unset($check);
		unset($temp_password);
827 828 829
		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);
830

Till Brehm's avatar
Till Brehm committed
831
		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
832 833
			$inst->make_ispconfig_ssl_cert();
		}
834

latham's avatar
latham committed
835
		$inst->install_ispconfig_interface = true;
836

latham's avatar
latham committed
837 838 839
	} else {
		$inst->install_ispconfig_interface = false;
	}
840

latham's avatar
latham committed
841
	$inst->install_ispconfig();
842

latham's avatar
latham committed
843 844 845
	//* Configure DBServer
	swriteln('Configuring DBServer');
	$inst->configure_dbserver();
846

latham's avatar
latham committed
847 848 849
	//* Configure ISPConfig
	swriteln('Installing ISPConfig crontab');
	$inst->install_crontab();
850
	if($conf['apache']['installed'] == true && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart'));
851 852
	//* Reload is enough for nginx
	if($conf['nginx']['installed'] == true){
853 854
		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'));
855
	}
856 857 858



latham's avatar
latham committed
859 860
} //* << $install_mode / 'Standard' or Genius

Marius Cramer's avatar
Marius Cramer committed
861 862
$inst->create_mount_script();

Till Brehm's avatar
Till Brehm committed
863 864 865 866 867
//* 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
868 869 870 871

echo "Installation completed.\n";


872
?>