* @license GPLv2 http://files.syscp.org/misc/COPYING.txt * @package System * @version $Id: install.php 2724 2009-06-07 14:18:02Z flo $ */ /** * Most elements are taken from the phpBB (www.phpbb.com) * installer, (c) 1999 - 2004 phpBB Group. */ if(file_exists('../lib/userdata.inc.php')) { /** * Includes the Usersettings eg. MySQL-Username/Passwort etc. to test if SysCP is already installed */ require ('../lib/userdata.inc.php'); if(isset($sql) && is_array($sql)) { die('Sorry, SysCP is already configured...'); } } /** * Include the functions */ require ('../lib/functions.php'); /** * Include the MySQL-Table-Definitions */ require ('../lib/tables.inc.php'); /** * Language Managament */ $languages = Array( 'german' => 'Deutsch', 'english' => 'English', 'french' => 'Francais' ); $standardlanguage = 'english'; if(isset($_GET['language']) && isset($languages[$_GET['language']])) { $language = $_GET['language']; } elseif(isset($_POST['language']) && isset($languages[$_POST['language']])) { $language = $_POST['language']; } else { $language = $standardlanguage; } if(file_exists('./lng/' . $language . '.lng.php')) { /** * Includes file /lng/$language.lng.php if it exists */ require ('./lng/' . $language . '.lng.php'); } /** * BEGIN FUNCTIONS ----------------------------------------------- */ function page_header() { ?> SysCP
 


\n\t\t\t$text"; } else { echo " $text\n\t\t\n"; } } /** * END FUNCTIONS --------------------------------------------------- */ /** * BEGIN VARIABLES --------------------------------------------------- */ //guess Servername if(!empty($_POST['servername'])) { $servername = $_POST['servername']; } else { if(!empty($_SERVER['SERVER_NAME'])) { if(validate_ip($_SERVER['SERVER_NAME'], true) == false) { $servername = $_SERVER['SERVER_NAME']; } else { $servername = ''; } } else { $servername = ''; } } //guess serverip if(!empty($_POST['serverip'])) { $serverip = $_POST['serverip']; } else { if(!empty($_SERVER['SERVER_ADDR'])) { $serverip = $_SERVER['SERVER_ADDR']; } else { $serverip = ''; } } if(!empty($_POST['mysql_host'])) { $mysql_host = $_POST['mysql_host']; } else { $mysql_host = '127.0.0.1'; } if(!empty($_POST['mysql_database'])) { $mysql_database = $_POST['mysql_database']; } else { $mysql_database = 'syscp'; } if(!empty($_POST['mysql_unpriv_user'])) { $mysql_unpriv_user = $_POST['mysql_unpriv_user']; } else { $mysql_unpriv_user = 'syscp'; } if(!empty($_POST['mysql_unpriv_pass'])) { $mysql_unpriv_pass = $_POST['mysql_unpriv_pass']; } else { $mysql_unpriv_pass = ''; } if(!empty($_POST['mysql_root_user'])) { $mysql_root_user = $_POST['mysql_root_user']; } else { $mysql_root_user = 'root'; } if(!empty($_POST['mysql_root_pass'])) { $mysql_root_pass = $_POST['mysql_root_pass']; } else { $mysql_root_pass = ''; } if(!empty($_POST['admin_user'])) { $admin_user = $_POST['admin_user']; } else { $admin_user = 'admin'; } if(!empty($_POST['admin_pass1'])) { $admin_pass1 = $_POST['admin_pass1']; } else { $admin_pass1 = ''; } if(!empty($_POST['admin_pass2'])) { $admin_pass2 = $_POST['admin_pass2']; } else { $admin_pass2 = ''; } if($mysql_host == 'localhost' || $mysql_host == '127.0.0.1') { $mysql_access_host = $mysql_host; } else { $mysql_access_host = $serverip; } // gues http software if(!empty($_POST['webserver'])) { $webserver = $_POST['webserver']; } else { if(strtoupper(@php_sapi_name()) == "APACHE2HANDLER" || stristr($_SERVER[SERVER_SOFTWARE], "apache/2")) { $webserver = 'apache2'; } elseif(substr(strtoupper(@php_sapi_name()), 0, 8) == "LIGHTTPD" || stristr($_SERVER[SERVER_SOFTWARE], "lighttpd")) { $webserver = 'lighttpd'; } else { // we don't need to bail out, since unknown does not affect any critical installation routines $webserver = 'unknown'; } } if(!empty($_POST['httpuser'])) { $httpuser = $_POST['httpuser']; } else { $httpuser = ''; } if(!empty($_POST['httpgroup'])) { $httpgroup = $_POST['httpgroup']; } else { $httpgroup = ''; } /** * END VARIABLES --------------------------------------------------- */ /** * BEGIN INSTALL --------------------------------------------------- */ if(isset($_POST['installstep']) && $_POST['installstep'] == '1' && $admin_pass1 == $admin_pass2 && $admin_pass1 != '' && $admin_pass2 != '' && $mysql_unpriv_pass != '' && $mysql_root_pass != '' && $servername != '' && $serverip != '' && $httpuser != '' && $httpgroup != '' && $mysql_unpriv_user != $mysql_root_user) { page_header(); ?> ' . $lng['install']['bcmathdescription']); $_die = false; } else { status_message('green', 'OK'); } status_message('begin', $lng['install']['openbasedir']); $php_ob = @ini_get("open_basedir"); if(!empty($php_ob) && $php_ob != '') { status_message('orange', $lng['install']['openbasedirenabled']); $_die = false; } else { status_message('green', 'OK'); } if($_die) { status_message('begin', $lng['install']['diedbecauseofextensions']); die(); } //first test if we can access the database server with the given root user and password status_message('begin', $lng['install']['testing_mysql']); $db_root = new db($mysql_host, $mysql_root_user, $mysql_root_pass, ''); //ok, if we are here, the database class is build up (otherwise it would have already die'd this script) status_message('green', 'OK'); //first we make a backup of the old DB if it exists status_message('begin', $lng['install']['backup_old_db']); $result = mysql_list_tables($mysql_database); if($result) { $filename = "/tmp/syscp_backup_" . date(YmdHi) . ".sql"; if(is_file("/usr/bin/mysqldump")) { $command = "/usr/bin/mysqldump " . $mysql_database . " -u " . $mysql_root_user . " --password='" . $mysql_root_pass . "' --result-file=" . $filename; $output = exec($command); if(stristr($output, "error")) { status_message('red', $lng['install']['backing_up_failed']); } else { status_message('green', 'OK'); } } else { status_message('red', $lng['install']['backing_up_binary_missing']); } } //so first we have to delete the database and the user given for the unpriv-user if they exit status_message('begin', $lng['install']['erasing_old_db']); $db_root->query("DELETE FROM `mysql`.`user` WHERE `User` = '" . $db_root->escape($mysql_unpriv_user) . "' AND `Host` = '" . $db_root->escape($mysql_access_host) . "'"); $db_root->query("DELETE FROM `mysql`.`db` WHERE `User` = '" . $db_root->escape($mysql_unpriv_user) . "' AND `Host` = '" . $db_root->escape($mysql_access_host) . "'"); $db_root->query("DELETE FROM `mysql`.`tables_priv` WHERE `User` = '" . $db_root->escape($mysql_unpriv_user) . "' AND `Host` = '" . $db_root->escape($mysql_access_host) . "'"); $db_root->query("DELETE FROM `mysql`.`columns_priv` WHERE `User` = '" . $db_root->escape($mysql_unpriv_user) . "' AND `Host` = '" . $db_root->escape($mysql_access_host) . "'"); $db_root->query("DROP DATABASE IF EXISTS `" . $db_root->escape(str_replace('`', '', $mysql_database)) . "` ;"); $db_root->query("FLUSH PRIVILEGES;"); status_message('green', 'OK'); //then we have to create a new user and database for the syscp unprivileged mysql access status_message('begin', $lng['install']['create_mysqluser_and_db']); $db_root->query("CREATE DATABASE `" . $db_root->escape(str_replace('`', '', $mysql_database)) . "`"); $mysql_access_host_array = array_map('trim', explode(',', $mysql_access_host)); if(in_array('127.0.0.1', $mysql_access_host_array) && !in_array('localhost', $mysql_access_host_array)) { $mysql_access_host_array[] = 'localhost'; } if(!in_array('127.0.0.1', $mysql_access_host_array) && in_array('localhost', $mysql_access_host_array)) { $mysql_access_host_array[] = '127.0.0.1'; } $mysql_access_host_array[] = $serverip; foreach($mysql_access_host_array as $mysql_access_host) { $db_root->query("GRANT ALL PRIVILEGES ON `" . $db_root->escape(str_replace('`', '', $mysql_database)) . "`.* TO '" . $db_root->escape($mysql_unpriv_user) . "'@'" . $db_root->escape($mysql_access_host) . "' IDENTIFIED BY 'password'"); $db_root->query("SET PASSWORD FOR '" . $db_root->escape($mysql_unpriv_user) . "'@'" . $db_root->escape($mysql_access_host) . "' = PASSWORD('" . $db_root->escape($mysql_unpriv_pass) . "')"); } $db_root->query("FLUSH PRIVILEGES;"); $mysql_access_host = implode(',', $mysql_access_host_array); status_message('green', 'OK'); //now a new database and the new syscp-unprivileged-mysql-account have been created and we can fill it now with the data. status_message('begin', $lng['install']['testing_new_db']); $db = new db($mysql_host, $mysql_unpriv_user, $mysql_unpriv_pass, $mysql_database); status_message('green', 'OK'); status_message('begin', $lng['install']['importing_data']); $db_schema = './syscp.sql'; $sql_query = @file_get_contents($db_schema, 'r'); $sql_query = remove_remarks($sql_query); $sql_query = split_sql_file($sql_query, ';'); for ($i = 0;$i < sizeof($sql_query);$i++) { if(trim($sql_query[$i]) != '') { $result = $db->query($sql_query[$i]); } } status_message('green', 'OK'); status_message('begin', 'System Servername...'); if(validate_ip($_SERVER['SERVER_NAME'], true) !== false) { status_message('red', $lng['install']['servername_should_be_fqdn']); } else { status_message('green', 'OK'); } //now let's change the settings in our settings-table status_message('begin', $lng['install']['changing_data']); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = 'admin@" . $db->escape($servername) . "' WHERE `settinggroup` = 'panel' AND `varname` = 'adminmail'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($serverip) . "' WHERE `settinggroup` = 'system' AND `varname` = 'ipaddress'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($servername) . "' WHERE `settinggroup` = 'system' AND `varname` = 'hostname'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($version) . "' WHERE `settinggroup` = 'panel' AND `varname` = 'version'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($languages[$language]) . "' WHERE `settinggroup` = 'panel' AND `varname` = 'standardlanguage'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($mysql_access_host) . "' WHERE `settinggroup` = 'system' AND `varname` = 'mysql_access_host'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($webserver) . "' WHERE `settinggroup` = 'system' AND `varname` = 'webserver'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($webserver) . "' WHERE `settinggroup` = 'system' AND `varname` = 'webserver'"); //FIXME $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($httpuser) . "' WHERE `settinggroup` = 'system' AND `varname` = 'httpuser'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($httpgroup) . "' WHERE `settinggroup` = 'system' AND `varname` = 'httpgroup'"); if($webserver == "apache2") { $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/apache2/sites-enabled/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_vhost'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/apache2/sites-enabled/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_diroptions'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/apache2/syscp-htpasswd/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_htpasswddir'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/init.d/apache2 reload' WHERE `settinggroup` = 'system' AND `varname` = 'apachereload_command'"); } elseif($webserver == "lighttpd") { $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/lighttpd/conf-enabled/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_vhost'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/lighttpd/syscp-diroptions/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_diroptions'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/lighttpd/syscp-htpasswd/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_htpasswddir'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/init.d/lighttpd reload' WHERE `settinggroup` = 'system' AND `varname` = 'apachereload_command'"); $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/lighttpd/lighttpd.pem' WHERE `settinggroup` = 'system' AND `varname` = 'ssl_cert_file'"); } // insert the lastcronrun to be the installation date $query = 'UPDATE `%s` SET `value` = UNIX_TIMESTAMP() WHERE `settinggroup` = \'system\' AND `varname` = \'lastcronrun\''; $query = sprintf($query, TABLE_PANEL_SETTINGS); $db->query($query); // and lets insert the default ip and port $query = 'INSERT INTO `%s` SET `ip` = \'%s\', `port` = \'80\' '; $query = sprintf($query, TABLE_PANEL_IPSANDPORTS, $db->escape($serverip)); $db->query($query); $defaultip = $db->insert_id(); // insert the defaultip $query = 'UPDATE `%s` SET `value` = \'%s\' WHERE `settinggroup` = \'system\' AND `varname` = \'defaultip\''; $query = sprintf($query, TABLE_PANEL_SETTINGS, $db->escape($defaultip)); $db->query($query); status_message('green', 'OK'); //last but not least create the main admin status_message('begin', $lng['install']['adding_admin_user']); $db->query("INSERT INTO `" . TABLE_PANEL_ADMINS . "` SET `loginname` = '" . $db->escape($admin_user) . "', `password` = '" . md5($admin_pass1) . "', `name` = 'Siteadmin', `email` = 'admin@" . $db->escape($servername) . "', `customers` = -1, `customers_used` = 0, `customers_see_all` = 1, `caneditphpsettings` = 1, `domains` = -1, `domains_used` = 0, `domains_see_all` = 1, `change_serversettings` = 1, `edit_billingdata` = 1, `diskspace` = -1024, `diskspace_used` = 0, `mysqls` = -1, `mysqls_used` = 0, `emails` = -1, `emails_used` = 0, `email_accounts` = -1, `email_accounts_used` = 0, `email_forwarders` = -1, `email_forwarders_used` = 0, `email_quota` = -1, `email_quota_used` = 0, `ftps` = -1, `ftps_used` = 0, `tickets` = -1, `tickets_used` = 0, `subdomains` = -1, `subdomains_used` = 0, `traffic` = -1048576, `traffic_used` = 0, `deactivated` = 0, `aps_packages` = -1"); status_message('green', 'OK'); //now we create the userdata.inc.php with the mysql-accounts status_message('begin', $lng['install']['creating_configfile']); $userdata = ""; //we test now if we can store the userdata.inc.php in ../lib if($fp = @fopen('../lib/userdata.inc.php', 'w')) { $result = @fputs($fp, $userdata, strlen($userdata)); @fclose($fp); status_message('green', $lng['install']['creating_configfile_succ']); chmod('../lib/userdata.inc.php', 0440); } elseif($fp = @fopen('/tmp/userdata.inc.php', 'w')) { $result = @fputs($fp, $userdata, strlen($userdata)); @fclose($fp); status_message('orange', $lng['install']['creating_configfile_temp']); chmod('/tmp/userdata.inc.php', 0440); } else { status_message('red', $lng['install']['creating_configfile_failed']); echo "\t\t\n\t\t\t\n\t\t\n"; } ?>
 SysCP Installation

" . nl2br(htmlspecialchars($userdata)) . "




 
:

 
:
:
>:
>:
>:
>:
 
:
>:
>:
 
>:
>:
>: />Apache2 
/>Lighttpd
>:
>: