install.php 12.4 KB
Newer Older
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
33
34
<?php

/*
Copyright (c) 2007, 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.
*/

35
//** Check for existing installation
tbrehm's avatar
tbrehm committed
36
37
//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.');

38
39
error_reporting(E_ALL|E_STRICT);

40
41
42
43
44
45
46
47
48
49
//** The banner on the command line
echo "\n\n".str_repeat('-',80)."\n";
echo " _____ ___________   _____              __ _       
|_   _/  ___| ___ \ /  __ \            / _(_)      
  | | \ `--.| |_/ / | /  \/ ___  _ __ | |_ _  __ _ 
  | |  `--. \  __/  | |    / _ \| '_ \|  _| |/ _` |
 _| |_/\__/ / |     | \__/\ (_) | | | | | | | (_| |
 \___/\____/\_|      \____/\___/|_| |_|_| |_|\__, |
                                              __/ |
                                             |___/ ";
pedro_morgan's avatar
pedro_morgan committed
50
51
echo "\n".str_repeat('-',80)."\n";
echo "\n\n>> Initial configuration  \n\n";
tbrehm's avatar
tbrehm committed
52

53
//** Include the library with the basic installer functions
54
55
require_once('lib/install.lib.php');

56
//** Include the base class of the installer class
57
58
require_once('lib/installer_base.lib.php');

oliver's avatar
oliver committed
59
//** Get distribution identifier
tbrehm's avatar
tbrehm committed
60
$dist = get_distname();
61

tbrehm's avatar
tbrehm committed
62
if($dist['id'] == '') die('Linux Dustribution or Version not recognized.');
tbrehm's avatar
tbrehm committed
63

oliver's avatar
oliver committed
64
//** Include the distribution specific installer class library and configuration
tbrehm's avatar
tbrehm committed
65
66
67
if(is_file('dist/lib/'.strtolower($dist['name']).'.lib.php')) include_once('dist/lib/'.strtolower($dist['name']).'.lib.php');
include_once('dist/lib/'.$dist['id'].'.lib.php');
include_once('dist/conf/'.$dist['id'].'.conf.php');
oliver's avatar
oliver committed
68
69

//** Install logfile
70
71
define('ISPC_LOG_FILE', '/var/log/ispconfig_install.log');

72
73
74
//****************************************************************************************************
//** Installer Interface 
//****************************************************************************************************
75
$inst = new installer();
pedro_morgan's avatar
pedro_morgan committed
76
swriteln($inst->lng('    Following will be a few questions for primary configuration so be careful.'));
77
78
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"));
79

80
//** Check log file is writable (probably not root or sudo)
oliver's avatar
oliver committed
81
82
if(!is_writable(dirname(ISPC_LOG_FILE))){
    die("ERROR: Cannot write to the directory ".dirname(ISPC_LOG_FILE).". Are you root or sudo ?\n\n");
83
84
}

85
86
87
88
if(is_dir('/root/ispconfig') || is_dir('/home/admispconfig')) {
	die('This software can not be installed on a server wich runs ISPConfig 2.x.');
}

89
90
//** Select the language
$conf['language'] = $inst->simple_query('Select language', array('en','de'), 'en');
91

92
93
//** Select installation mode
$install_mode = $inst->simple_query('Installation mode', array('Standard','Expert'), 'Standard');
94

95

96
//** Get the hostname
tbrehm's avatar
tbrehm committed
97
$tmp_out = array();
98
exec('hostname -f', $tmp_out);
99
$conf['hostname'] = $inst->free_query('Full qualified hostname (FQDN) of the server, eg foo.example.com ', $tmp_out[0]);
tbrehm's avatar
tbrehm committed
100
unset($tmp_out);
101

102
//** Get MySQL root credentials
tbrehm's avatar
tbrehm committed
103
104
$finished = false;
do {
105
106
107
	$tmp_mysql_server_host = $inst->free_query('MySQL server hostname', $conf['mysql']['host']);
	$tmp_mysql_server_admin_user = $inst->free_query('MySQL root username', $conf['mysql']['admin_user']);
	$tmp_mysql_server_admin_password = $inst->free_query('MySQL root password', $conf['mysql']['admin_password']);
pedro_morgan's avatar
pedro_morgan committed
108
    $tmp_mysql_server_database = $inst->free_query('MySQL database to create', $conf['mysql']['database']);
tbrehm's avatar
tbrehm committed
109
	
110
	//* Initialize the MySQL server connection
tbrehm's avatar
tbrehm committed
111
	if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
112
113
114
		$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;
pedro_morgan's avatar
pedro_morgan committed
115
        $conf['mysql']['database'] = $tmp_mysql_server_database;
tbrehm's avatar
tbrehm committed
116
		$finished = true;
tbrehm's avatar
tbrehm committed
117
	} else {
118
		swriteln($inst->lng('Unable to connect to mysql server').' '.mysql_error());
tbrehm's avatar
tbrehm committed
119
120
	}
} while ($finished == false);
tbrehm's avatar
tbrehm committed
121
unset($finished);
tbrehm's avatar
tbrehm committed
122

123
124
125
126
// Resolve the IP address of the mysql hostname.
if(!$conf['mysql']['ip'] = gethostbyname($conf['mysql']['host'])) die('Unable to resolve hostname'.$conf['mysql']['host']);


127
//** initializing database connection
tbrehm's avatar
tbrehm committed
128
129
include_once('lib/mysql.lib.php');
$inst->db = new db();
tbrehm's avatar
tbrehm committed
130

131
//** Begin with standard or expert installation
tbrehm's avatar
tbrehm committed
132
133
if($install_mode == 'Standard') {
	
134
	//* Create the mysql database
tbrehm's avatar
tbrehm committed
135
	$inst->configure_database();
136
137
138
	
	//* Insert the Server record into the database
	$inst->add_database_server_record();
tbrehm's avatar
tbrehm committed
139

140
	//* Configure postfix
tbrehm's avatar
tbrehm committed
141
	$inst->configure_postfix();
142
143
144
145
	
	//* Configure postfix
	swriteln('Configuring Jailkit');
	$inst->configure_jailkit();
tbrehm's avatar
tbrehm committed
146

147
	//* Configure saslauthd
tbrehm's avatar
tbrehm committed
148
149
150
	swriteln('Configuring SASL');
	$inst->configure_saslauthd();

151
	//* Configure PAM
tbrehm's avatar
tbrehm committed
152
153
154
	swriteln('Configuring PAM');
	$inst->configure_pam();

155
	//* Configure courier
tbrehm's avatar
tbrehm committed
156
157
158
	swriteln('Configuring Courier');
	$inst->configure_courier();

159
	//* Configure Spamasassin
tbrehm's avatar
tbrehm committed
160
161
162
	swriteln('Configuring Spamassassin');
	$inst->configure_spamassassin();

163
	//* Configure Amavis
tbrehm's avatar
tbrehm committed
164
165
166
	swriteln('Configuring Amavisd');
	$inst->configure_amavis();

167
	//* Configure Getmail
tbrehm's avatar
tbrehm committed
168
169
170
171
	swriteln('Configuring Getmail');
	$inst->configure_getmail();
	

172
	//* Configure Pureftpd
tbrehm's avatar
tbrehm committed
173
174
175
	swriteln('Configuring Pureftpd');
	$inst->configure_pureftpd();

176
	//* Configure MyDNS
tbrehm's avatar
tbrehm committed
177
178
	swriteln('Configuring MyDNS');
	$inst->configure_mydns();
179
	
180
	//* Configure Apache
181
182
	swriteln('Configuring Apache');
	$inst->configure_apache();
tbrehm's avatar
tbrehm committed
183
184
185
186
	
	//* Configure Firewall
	swriteln('Configuring Firewall');
	$inst->configure_firewall();
tbrehm's avatar
tbrehm committed
187

188
	//* Configure ISPConfig
tbrehm's avatar
tbrehm committed
189
	swriteln('Installing ISPConfig');
daniel's avatar
daniel committed
190
191
	
	//** Customise the port ISPConfig runs on
192
	$conf['apache']['vhost_port'] = $inst->free_query('ISPConfig Port', '8080');
daniel's avatar
daniel committed
193

tbrehm's avatar
tbrehm committed
194
	$inst->install_ispconfig();
tbrehm's avatar
tbrehm committed
195
196
197
198
	
	//* Configure DBServer
	swriteln('Configuring DBServer');
	$inst->configure_dbserver();
tbrehm's avatar
tbrehm committed
199

200
	//* Configure ISPConfig
tbrehm's avatar
tbrehm committed
201
202
203
204
	swriteln('Installing Crontab');
	$inst->install_crontab();
	
	swriteln('Restarting services ...');
oliver's avatar
oliver committed
205
206
207
208
209
210
211
212
213
214
215
216
	system($conf['init_scripts'].'/'.$conf['mysql']['init_script'].' restart');
	system($conf['init_scripts'].'/'.$conf['postfix']['init_script'].' restart');
	system($conf['init_scripts'].'/'.$conf['saslauthd']['init_script'].' restart');
	system($conf['init_scripts'].'/'.$conf['amavis']['init_script'].' restart');
	system($conf['init_scripts'].'/'.$conf['clamav']['init_script'].' restart');
	system($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'].' restart');
	system($conf['init_scripts'].'/'.$conf['courier']['courier-imap'].' restart');
	system($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'].' restart');
	system($conf['init_scripts'].'/'.$conf['courier']['courier-pop'].' restart');
	system($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'].' restart');
	system($conf['init_scripts'].'/'.$conf['apache']['init_script'].' restart');
	system($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'].' restart');
tbrehm's avatar
tbrehm committed
217
	system($conf['init_scripts'].'/'.$conf['mydns']['init_script'].' restart &> /dev/null');
tbrehm's avatar
tbrehm committed
218
	
219
220
221
}else{

	//** Get Server ID
222
223
	// $conf['server_id'] = $inst->free_query('Unique Numeric ID of the server','1');
	// Server ID is an autoInc value of the mysql database now
tbrehm's avatar
tbrehm committed
224
	
225
	if(strtolower($inst->simple_query('Create a new database? (We do not want to join a existing ISPConfig server setup)',array('y','n'),'y')) == 'y') {
226
		//* Create the mysql database
tbrehm's avatar
tbrehm committed
227
		$inst->configure_database();
228
		//system('/etc/init.d/mysql restart');
tbrehm's avatar
tbrehm committed
229
	}
230
231
		
	//* Insert the Server record into the database
tbrehm's avatar
tbrehm committed
232
	swriteln('Adding ISPConfig server record to database.');
233
	swriteln('');
234
235
	$inst->add_database_server_record();

tbrehm's avatar
tbrehm committed
236
	
237
	if(strtolower($inst->simple_query('Configure Mail', array('y','n') ,'y') ) == 'y') {
tbrehm's avatar
tbrehm committed
238
		
239
		//* Configure Postfix
tbrehm's avatar
tbrehm committed
240
241
242
		swriteln('Configuring Postfix');
		$inst->configure_postfix();
		
243
		//* Configure PAM
tbrehm's avatar
tbrehm committed
244
245
246
		swriteln('Configuring PAM');
		$inst->configure_pam();

247
		//* Configure courier
tbrehm's avatar
tbrehm committed
248
249
250
		swriteln('Configuring Courier');
		$inst->configure_courier();

251
		//* Configure Spamasassin
tbrehm's avatar
tbrehm committed
252
253
254
		swriteln('Configuring Spamassassin');
		$inst->configure_spamassassin();

255
		//* Configure Amavis
tbrehm's avatar
tbrehm committed
256
257
258
		swriteln('Configuring Amavisd');
		$inst->configure_amavis();

259
		//* Configure Getmail
tbrehm's avatar
tbrehm committed
260
261
262
		swriteln('Configuring Getmail');
		$inst->configure_getmail();
		
oliver's avatar
oliver committed
263
264
265
266
267
268
269
270
271
		system($conf['init_scripts'].'/'.$conf['postfix']['init_script'].' restart');
		system($conf['init_scripts'].'/'.$conf['saslauthd']['init_script'].' restart');
		system($conf['init_scripts'].'/'.$conf['amavis']['init_script'].' restart');
		system($conf['init_scripts'].'/'.$conf['clamav']['init_script'].' restart');
		system($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'].' restart');
		system($conf['init_scripts'].'/'.$conf['courier']['courier-imap'].' restart');
		system($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'].' restart');
		system($conf['init_scripts'].'/'.$conf['courier']['courier-pop'].' restart');
		system($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'].' restart');
tbrehm's avatar
tbrehm committed
272
273
	}
	
274
275
	//** Configure Pureftpd
	if(strtolower($inst->simple_query('Configure FTP Server', array('y','n'),'y') ) == 'y') {	
tbrehm's avatar
tbrehm committed
276
277
		swriteln('Configuring Pureftpd');
		$inst->configure_pureftpd();
oliver's avatar
oliver committed
278
		system($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'].' restart');
tbrehm's avatar
tbrehm committed
279
280
	}
	
281
	//** Configure MyDNS
tbrehm's avatar
tbrehm committed
282
283
284
	if(strtolower($inst->simple_query('Configure DNS Server',array('y','n'),'y')) == 'y') {
		swriteln('Configuring MyDNS');
		$inst->configure_mydns();
oliver's avatar
oliver committed
285
		system($conf['init_scripts'].'/'.$conf['mydns']['init_script'].' restart');
tbrehm's avatar
tbrehm committed
286
287
	}
	
288
289
	//** Configure Apache
	if(strtolower($inst->simple_query('Configure Apache Server',array('y','n'),'y')) == 'y') {	
290
291
292
293
		swriteln('Configuring Apache');
		$inst->configure_apache();
	}
	
tbrehm's avatar
tbrehm committed
294
295
296
297
298
299
	//** Configure Firewall
	if(strtolower($inst->simple_query('Configure Firewall Server',array('y','n'),'y')) == 'y') {	
		swriteln('Configuring Firewall');
		$inst->configure_firewall();
	}
	
300
	//** Configure ISPConfig :-)
tbrehm's avatar
tbrehm committed
301
	if(strtolower($inst->simple_query('Install ISPConfig Web-Interface',array('y','n'),'y')) == 'y') {
tbrehm's avatar
tbrehm committed
302
		swriteln('Installing ISPConfig');
303
304
		
		//** We want to check if the server is a module or cgi based php enabled server
tbrehm's avatar
tbrehm committed
305
306
		//** TODO: Don't always ask for this somehow ?
		/*
307
308
309
310
311
		$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');
312
	 		$conf['apache']['vhost_cgi_alias'] = sprintf('ScriptAlias %s %s', $alias, $path);
313
		} else {
314
	 		$conf['apache']['vhost_cgi_alias'] = "";
315
		}
tbrehm's avatar
tbrehm committed
316
		*/
317
318

		//** Customise the port ISPConfig runs on
319
		$conf['apache']['vhost_port'] = $inst->free_query('ISPConfig Port', '8080');
320
		
tbrehm's avatar
tbrehm committed
321
322
323
324
		$inst->install_ispconfig_interface = true;
			
	} else {
		$inst->install_ispconfig_interface = false;
tbrehm's avatar
tbrehm committed
325
326
	}
	
tbrehm's avatar
tbrehm committed
327
	$inst->install_ispconfig();
tbrehm's avatar
tbrehm committed
328
329
330
331
	
	//* Configure DBServer
	swriteln('Configuring DBServer');
	$inst->configure_dbserver();
tbrehm's avatar
tbrehm committed
332
333
334
335
336
337
338
339
		
	//* Configure ISPConfig
	swriteln('Installing Crontab');
	$inst->install_crontab();
	system($conf['init_scripts'].'/'.$conf['apache']['init_script'].' restart');
	
	
	
340
} //* << $install_mode / 'Standard' or Genius
341
342


343
echo "Installation completed.\n";
344
345


346
?>