From 7ff27228bdf12d4f5f6c303cf95d01aac9cb291e Mon Sep 17 00:00:00 2001 From: tbrehm <t.brehm@ispconfig.org> Date: Fri, 26 Dec 2008 05:21:45 -0500 Subject: [PATCH] - Updated Ubuntu installation text. - Installer recognizes 5.0 and lenny/sid as suppoertde debian release --- install/lib/installer_base.lib.php | 326 +++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 258 insertions(+), 68 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index c28947a..1933336 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -35,6 +35,7 @@ var $db; public $conf; public $install_ispconfig_interface = true; + public $is_update = false; // true if it is an update, falsi if it is a new install public function __construct() @@ -111,35 +112,58 @@ } */ - /** Create the database for ISPConfig */ - public function configure_database() - { + //** Detect installed applications + public function find_installed_apps() { global $conf; - $cf = $conf['mysql']; // make $conf['mysql'] more accessible + + if(is_installed('mysql') || is_installed('mysqld')) $conf['mysql']['installed'] = true; + if(is_installed('postfix')) $conf['postfix']['installed'] = true; + if(is_installed('apache') || is_installed('apache2') || is_installed('httpd')) $conf['apache']['installed'] = true; + if(is_installed('getmail')) $conf['getmail']['installed'] = true; + if(is_installed('couriertcpd')) $conf['courier']['installed'] = true; + if(is_installed('saslsauthd')) $conf['saslauthd']['installed'] = true; + if(is_installed('amavisd-new')) $conf['amavis']['installed'] = true; + if(is_installed('clamdscan')) $conf['clamav']['installed'] = true; + if(is_installed('pure-ftpd') || is_installed('pure-ftpd-wrapper')) $conf['pureftpd']['installed'] = true; + if(is_installed('mydns') || is_installed('mydns-ng')) $conf['mydns']['installed'] = true; + if(is_installed('jk_chrootsh')) $conf['jailkit']['installed'] = true; + + + } + + /** Create the database for ISPConfig */ + public function configure_database() { + global $conf; + //** Create the database - if(!$this->db->query('CREATE DATABASE IF NOT EXISTS '.$cf['database'])) { - $this->error('Unable to create MySQL database: '.$cf['database'].'.'); + if(!$this->db->query('CREATE DATABASE IF NOT EXISTS '.$conf['mysql']['database'].' DEFAULT CHARACTER SET '.$conf['mysql']['charset'])) { + $this->error('Unable to create MySQL database: '.$conf['mysql']['database'].'.'); } //* Set the database name in the DB library - $this->db->dbName = $cf['database']; + $this->db->dbName = $conf['mysql']['database']; //* Load the database dump into the database, if database contains no tables $db_tables = $this->db->getTables(); if(count($db_tables) > 0) { $this->error('Stopped: Database already contains some tables.'); } else { - if($cf['admin_password'] == '') { - caselog("mysql -h '".$cf['host']."' -u '".$cf['admin_user']."' '".$cf['database']."' < 'sql/ispconfig3.sql' &> /dev/null", + if($conf['mysql']['admin_password'] == '') { + caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' '".$conf['mysql']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/ispconfig3.sql' &> /dev/null", __FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql'); } else { - caselog("mysql -h '".$cf['host']."' -u '".$cf['admin_user']."' -p'".$cf['admin_password']."' '".$cf['database']."' < 'sql/ispconfig3.sql' &> /dev/null", + caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' '".$conf['mysql']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/ispconfig3.sql' &> /dev/null", __FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql'); } $db_tables = $this->db->getTables(); if(count($db_tables) == 0) { $this->error('Unable to load SQL-Dump into database table.'); } + + //* Load system.ini into the sys_ini table + $system_ini = $this->db->quote(rf('tpl/system.ini.master')); + $this->db->query("UPDATE sys_ini SET config = '$system_ini' WHERE sysini_id = 1"); + } } @@ -147,41 +171,102 @@ public function add_database_server_record() { global $conf; - $cf = $conf['mysql']; // make $conf['mysql'] more accessible - if($cf['host'] == 'localhost') { + if($conf['mysql']['host'] == 'localhost') { $from_host = 'localhost'; } else { $from_host = $conf['hostname']; } - //* Create the ISPConfig database user - $query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$cf['database'].".* " - ."TO '".$cf['ispconfig_user']."'@'".$from_host."' " - ."IDENTIFIED BY '".$cf['ispconfig_password']."';"; + // Delete ISPConfig user in the local database, in case that it exists + $this->db->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['ispconfig_user']."' AND Host = '".$from_host."';"); + $this->db->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['database']."' AND Host = '".$from_host."';"); + $this->db->query('FLUSH PRIVILEGES;'); + + //* Create the ISPConfig database user in the local database + $query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$conf['mysql']['database'].".* " + ."TO '".$conf['mysql']['ispconfig_user']."'@'".$from_host."' " + ."IDENTIFIED BY '".$conf['mysql']['ispconfig_password']."';"; if(!$this->db->query($query)) { - $this->error('Unable to create database user: '.$cf['ispconfig_user']); + $this->error('Unable to create database user: '.$conf['mysql']['ispconfig_user'].' Error: '.$this->db->errorMessage); } //* Reload database privelages $this->db->query('FLUSH PRIVILEGES;'); //* Set the database name in the DB library - $this->db->dbName = $cf['database']; + $this->db->dbName = $conf['mysql']['database']; - $server_ini_content = rf("tpl/server.ini.master"); - $server_ini_content = addslashes($server_ini_content); + $tpl_ini_array = ini_to_array(rf('tpl/server.ini.master')); - $sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES (1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', 1, 1, 1, 1, 1, 1, '$server_ini_content', 0, 1);"; - $this->db->query($sql); - $conf['server_id'] = $this->db->insertID(); - $conf['server_id'] = $conf['server_id']; + // TODO: Update further distribution specific parameters for server config here + $tpl_ini_array['web']['vhost_conf_dir'] = $conf['apache']['vhost_conf_dir']; + $tpl_ini_array['web']['vhost_conf_enabled_dir'] = $conf['apache']['vhost_conf_enabled_dir']; + + $server_ini_content = array_to_ini($tpl_ini_array); + $server_ini_content = mysql_real_escape_string($server_ini_content); + + $mail_server_enabled = ($conf['services']['mail'])?1:0; + $web_server_enabled = ($conf['services']['web'])?1:0; + $dns_server_enabled = ($conf['services']['dns'])?1:0; + $file_server_enabled = ($conf['services']['file'])?1:0; + $db_server_enabled = ($conf['services']['db'])?1:0; + $vserver_server_enabled = ($conf['services']['vserver'])?1:0; + + if($conf['mysql']['master_slave_setup'] == 'y') { + + //* Insert the server record in master DB + $sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES (1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1);"; + $this->dbmaster->query($sql); + $conf['server_id'] = $this->dbmaster->insertID(); + $conf['server_id'] = $conf['server_id']; + + //* Insert the same record in the local DB + $sql = "INSERT INTO `server` (`server_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES ('".$conf['server_id']."',1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1);"; + $this->db->query($sql); + + //* insert the ispconfig user in the remote server + $from_host = $conf['hostname']; + $from_ip = gethostbyname($conf['hostname']); + + //* username for the ispconfig user + $conf['mysql']['master_ispconfig_user'] = 'ispconfigserver'.$conf['server_id']; + + //* Delete ISPConfig user in the master database, in case that it exists + $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_host."';"); + $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_host."';"); + $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_ip."';"); + $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_ip."';"); + $this->dbmaster->query('FLUSH PRIVILEGES;'); + + //* Create the ISPConfig database user in the local database + $query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$conf['mysql']['master_database'].".* " + ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$from_host."' " + ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';"; + $query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$conf['mysql']['master_database'].".* " + ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$from_ip."' " + ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';"; + if(!$this->dbmaster->query($query)) { + $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage); + } + + } else { + //* Insert the server, if its not a mster / slave setup + $sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES (1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1);"; + $this->db->query($sql); + $conf['server_id'] = $this->db->insertID(); + $conf['server_id'] = $conf['server_id']; + } + + } //** writes postfix configuration files - private function process_postfix_config($configfile) - { + public function process_postfix_config($configfile) + { + global $conf; + $config_dir = $conf['postfix']['config_dir'].'/'; $full_file_name = $config_dir.$configfile; //* Backup exiting file @@ -199,7 +284,9 @@ public function configure_jailkit() { - $cf = $conf['jailkit']; + global $conf; + + $cf = $conf['jailkit']; $config_dir = $cf['config_dir']; $jk_init = $cf['jk_init']; $jk_chrootsh = $cf['jk_chrootsh']; @@ -260,10 +347,10 @@ //* Creating virtual mail user and group $command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname']; - caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + if(!is_group($cf['vmail_groupname'])) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); $command = 'useradd -g '.$cf['vmail_groupname'].' -u '.$cf['vmail_userid'].' '.$cf['vmail_username'].' -d '.$cf['vmail_mailbox_base'].' -m'; - caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + if(!is_user($cf['vmail_username'])) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); $postconf_commands = array ( 'myhostname = '.$conf['hostname'], @@ -280,6 +367,7 @@ 'broken_sasl_auth_clients = yes', 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:'.$config_dir.'/mysql-virtual_recipient.cf, reject_unauth_destination', 'smtpd_use_tls = yes', + 'smtpd_tls_security_level = may', 'smtpd_tls_cert_file = '.$config_dir.'/smtpd.cert', 'smtpd_tls_key_file = '.$config_dir.'/smtpd.key', 'transport_maps = proxy:mysql:'.$config_dir.'/mysql-virtual_transports.cf', @@ -318,17 +406,10 @@ caselog($command." &> /dev/null", __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command); } - // TODO: Change the master.cf file - /* - Add: - maildrop unix - n n - - pipe - flags=R user=vmail argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender} - */ if(!stristr($options,'dont-create-certs')) { //* Create the SSL certificate $command = 'cd '.$config_dir.'; ' - .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout ' - .'smtpd.key -keyform PEM -days 365 -x509'; + .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509'; exec($command); $command = 'chmod o= '.$config_dir.'/smtpd.key'; @@ -363,8 +444,10 @@ wf($cf['vmail_mailbox_base'].'/.'.$configfile, $content); //* Create the directory for the custom mailfilters - $command = 'mkdir '.$cf['vmail_mailbox_base'].'/mailfilters'; - caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + if(!is_dir($cf['vmail_mailbox_base'].'/mailfilters')) { + $command = 'mkdir '.$cf['vmail_mailbox_base'].'/mailfilters'; + caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + } //* Chmod and chown the .mailfilter file $command = 'chown -R '.$cf['vmail_username'].':'.$cf['vmail_groupname'].' '.$cf['vmail_mailbox_base'].'/.mailfilter'; @@ -375,7 +458,7 @@ } - function configure_saslauthd() { + public function configure_saslauthd() { global $conf; @@ -402,7 +485,10 @@ if(is_file($configfile.'~')) exec('chmod 400 '.$configfile.'~'); $content = rf($configfile); $content = str_replace('START=no','START=yes',$content); + // Debian $content = str_replace('OPTIONS="-c"','OPTIONS="-m /var/spool/postfix/var/run/saslauthd -r"',$content); + // Ubuntu + $content = str_replace('OPTIONS="-c -m /var/run/saslauthd"','OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"',$content); wf($configfile,$content); // Edit the file /etc/init.d/saslauthd @@ -410,6 +496,9 @@ $content = rf($configfile); $content = str_replace('PIDFILE=$RUN_DIR/saslauthd.pid','PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"',$content); wf($configfile,$content); + + // add the postfix user to the sasl group (at least nescessary for ubuntu 8.04 and most likely debian lenny too. + exec('adduser postfix sasl'); } @@ -467,7 +556,7 @@ wf($configfile, $content); } - function configure_amavis() { + public function configure_amavis() { global $conf; // amavisd user config file @@ -502,11 +591,14 @@ // Append the configuration for amavisd to the master.cf file if(is_file($conf["postfix"]["config_dir"].'/master.cf')) copy($conf["postfix"]["config_dir"].'/master.cf',$conf["postfix"]["config_dir"].'/master.cf~'); - $content = rf("tpl/master_cf_amavis.master"); + $content = rf($conf["postfix"]["config_dir"].'/master.cf'); // Only add the content if we had not addded it before - if(!stristr("127.0.0.1:10025 inet n - - - - smtpd",$content)) { + if(!stristr($content,"127.0.0.1:10025")) { + unset($content); + $content = rf("tpl/master_cf_amavis.master"); af($conf["postfix"]["config_dir"].'/master.cf',$content); } + unset($content); // Add the clamav user to the amavis group exec('adduser clamav amavis'); @@ -530,12 +622,14 @@ public function configure_getmail() { + global $conf; + $config_dir = $conf['getmail']['config_dir']; if(!is_dir($config_dir)) exec("mkdir -p ".escapeshellcmd($config_dir)); $command = "useradd -d $config_dir getmail"; - caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + if(!is_user('getmail')) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); $command = "chown -R getmail $config_dir"; caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); @@ -595,8 +689,24 @@ public function configure_apache() { + global $conf; + //* Create the logging directory for the vhost logfiles exec('mkdir -p /var/log/ispconfig/httpd'); + + if(is_file('/etc/suphp/suphp.conf')) { + replaceLine('/etc/suphp/suphp.conf','php=php:/usr/bin','x-httpd-suphp=php:/usr/bin/php-cgi',0); + replaceLine('/etc/suphp/suphp.conf','docroot=','docroot=/var/clients',0); + } + + //* Copy the ISPConfig configuration include + $vhost_conf_dir = $conf['apache']['vhost_conf_dir']; + $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir']; + + copy('tpl/apache_ispconfig.conf.master',$vhost_conf_dir.'/ispconfig.conf'); + if(!@is_link($vhost_conf_enabled_dir."/000-ispconfig.conf")) { + exec("ln -s ".$vhost_conf_dir."/ispconfig.conf ".$vhost_conf_enabled_dir."/000-ispconfig.conf"); + } } @@ -606,6 +716,7 @@ $dist_init_scripts = $conf['init_scripts']; + if(is_dir("/etc/Bastille.backup")) caselog("rm -rf /etc/Bastille.backup", __FILE__, __LINE__); if(is_dir("/etc/Bastille")) caselog("mv -f /etc/Bastille /etc/Bastille.backup", __FILE__, __LINE__); @mkdir("/etc/Bastille", octdec($directory_mode)); if(is_dir("/etc/Bastille.backup/firewall.d")) caselog("cp -pfr /etc/Bastille.backup/firewall.d /etc/Bastille/", __FILE__, __LINE__); @@ -623,9 +734,15 @@ $tcp_public_services = trim(str_replace(',',' ',$row["tcp_port"])); $udp_public_services = trim(str_replace(',',' ',$row["udp_port"])); } else { - $tcp_public_services = '21 22 25 53 80 110 443 8080 10000'; + $tcp_public_services = '21 22 25 53 80 110 443 3306 8080 10000'; $udp_public_services = '53'; } + + if(!stristr($tcp_public_services, $conf['apache']['vhost_port'])) { + $tcp_public_services .= ' '.intval($conf['apache']['vhost_port']); + if($row["tcp_port"] != '') $this->db->query("UPDATE firewall SET tcp_port = tcp_port + ',".intval($conf['apache']['vhost_port'])."' WHERE server_id = ".intval($conf['server_id'])); + } + $content = str_replace("{TCP_PUBLIC_SERVICES}", $tcp_public_services, $content); $content = str_replace("{UDP_PUBLIC_SERVICES}", $udp_public_services, $content); @@ -669,10 +786,10 @@ //* Create a ISPConfig user and group $command = 'groupadd ispconfig'; - if(!is_group('vacp')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + if(!is_group('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); $command = "useradd -g ispconfig -d $install_dir ispconfig"; - if(!is_user('vacp')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + if(!is_user('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); //* copy the ISPConfig interface part $command = "cp -rf ../interface $install_dir"; @@ -697,6 +814,12 @@ $content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['ispconfig_password'], $content); $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content); $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content); + + $content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content); + $content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content); + $content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content); + $content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content); + $content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content); wf("$install_dir/interface/lib/$configfile", $content); @@ -710,6 +833,12 @@ $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content); $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content); $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content); + + $content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content); + $content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content); + $content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content); + $content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content); + $content = str_replace('{server_id}', $conf['server_id'], $content); $content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content); wf("$install_dir/server/lib/$configfile", $content); @@ -721,8 +850,17 @@ if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { - if($file != '.' && $file != '..') { - if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file); + if($file != '.' && $file != '..' && substr($file,-8,8) == '.inc.php') { + include_once($install_dir.'/server/mods-available/'.$file); + $module_name = substr($file,0,-8); + $tmp = new $module_name; + if($tmp->onInstall()) { + if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file); + if (strpos($file, '_core_module') !== false) { + if(!@is_link($install_dir.'/server/mods-core/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-core/'.$file); + } + } + unset($tmp); } } closedir($dh); @@ -733,13 +871,39 @@ if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { - if($file != '.' && $file != '..') { - if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file); + if($file != '.' && $file != '..' && substr($file,-8,8) == '.inc.php') { + include_once($install_dir.'/server/plugins-available/'.$file); + $plugin_name = substr($file,0,-8); + $tmp = new $plugin_name; + if(method_exists($tmp,'onInstall') && $tmp->onInstall()) { + if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file); + if (strpos($file, '_core_plugin') !== false) { + if(!@is_link($install_dir.'/server/plugins-core/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file); + } + } + unset($tmp); } } closedir($dh); } } + + // Update the server config + $mail_server_enabled = ($conf['services']['mail'])?1:0; + $web_server_enabled = ($conf['services']['web'])?1:0; + $dns_server_enabled = ($conf['services']['dns'])?1:0; + $file_server_enabled = ($conf['services']['file'])?1:0; + $db_server_enabled = ($conf['services']['db'])?1:0; + $vserver_server_enabled = ($conf['services']['vserver'])?1:0; + $sql = "UPDATE `server` SET mail_server = '$mail_server_enabled', web_server = '$web_server_enabled', dns_server = '$dns_server_enabled', file_server = '$file_server_enabled', db_server = '$db_server_enabled', vserver_server = '$vserver_server_enabled' WHERE server_id = ".intval($conf['server_id']); + + if($conf['mysql']['master_slave_setup'] == 'y') { + $this->dbmaster->query($sql); + $this->db->query($sql); + } else { + $this->db->query($sql); + } + //* Chmod the files $command = "chmod -R 750 $install_dir"; @@ -790,22 +954,29 @@ caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); //* Copy the ISPConfig vhost for the controlpanel - // TODO: These are missing! should they be "vhost_dist_*_dir" ? $vhost_conf_dir = $conf['apache']['vhost_conf_dir']; $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir']; // Dont just copy over the virtualhost template but add some custom settings - $content = rf("tpl/apache_ispconfig.vhost.master"); $content = str_replace('{vhost_port}', $conf['apache']['vhost_port'], $content); + + // comment out the listen directive if port is 80 or 443 + if($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) { + $content = str_replace('{vhost_port_listen}', '#', $content); + } else { + $content = str_replace('{vhost_port_listen}', '', $content); + } + wf("$vhost_conf_dir/ispconfig.vhost", $content); //copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost"); //* and create the symlink - if($this->install_ispconfig_interface == true) { - if(!@is_link("$vhost_conf_enabled_dir/ispconfig.vhost")) { - exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/ispconfig.vhost"); + if($this->install_ispconfig_interface == true && $this->is_update == false) { + if(@is_link("$vhost_conf_enabled_dir/ispconfig.vhost")) unlink("$vhost_conf_enabled_dir/ispconfig.vhost"); + if(!@is_link("$vhost_conf_enabled_dir/000-ispconfig.vhost")) { + exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/000-ispconfig.vhost"); } } @@ -826,6 +997,10 @@ if(@is_file('/var/log/mail.warn')) exec('chmod +r /var/log/mail.warn'); if(@is_file('/var/log/mail.err')) exec('chmod +r /var/log/mail.err'); if(@is_file('/var/log/messages')) exec('chmod +r /var/log/messages'); + + //* Create the ispconfig log directory + if(!is_dir('/var/log/ispconfig')) mkdir('/var/log/ispconfig'); + if(!is_file('/var/log/ispconfig/ispconfig.log')) exec('touch /var/log/ispconfig/ispconfig.log'); } @@ -862,9 +1037,14 @@ exec('crontab -u root -l > crontab.txt'); $existing_root_cron_jobs = file('crontab.txt'); + // remove existing ispconfig cronjobs, in case the syntax has changed + foreach($existing_root_cron_jobs as $key => $val) { + if(stristr($val,'/usr/local/ispconfig')) unset($existing_root_cron_jobs[$key]); + } + $root_cron_jobs = array( - '* * * * * /usr/local/ispconfig/server/server.sh &> /dev/null', - '30 00 * * * /usr/local/ispconfig/server/cron_daily.sh &> /dev/null' + '* * * * * /usr/local/ispconfig/server/server.sh > /dev/null 2>> /var/log/ispconfig/cron.log', + '30 00 * * * /usr/local/ispconfig/server/cron_daily.sh > /dev/null 2>> /var/log/ispconfig/cron.log' ); foreach($root_cron_jobs as $cron_job) { if(!in_array($cron_job."\n", $existing_root_cron_jobs)) { @@ -876,19 +1056,29 @@ unlink('crontab.txt'); //* Getmail crontab - $cf = $conf['getmail']; - exec('crontab -u getmail -l > crontab.txt'); - $existing_cron_jobs = file('crontab.txt'); + if(is_user('getmail')) { + $cf = $conf['getmail']; + exec('crontab -u getmail -l > crontab.txt'); + $existing_cron_jobs = file('crontab.txt'); - $cron_jobs = array('*/5 * * * * '.$cf['program'].' -g '.$cf['config_dir'].' -r '.$cf['config_dir'].'/*.conf &> /dev/null'); - foreach($cron_jobs as $cron_job) { - if(!in_array($cron_job."\n", $existing_cron_jobs)) { - $existing_cron_jobs[] = $cron_job."\n"; + $cron_jobs = array( + '*/5 * * * * '.$cf['program'].' -g '.$cf['config_dir'].' -r '.$cf['config_dir'].'/*.conf > /dev/null 2>> /var/log/ispconfig/cron.log' + ); + + // remove existing ispconfig cronjobs, in case the syntax has changed + foreach($cron_jobs as $key => $val) { + if(stristr($val,$cf['program'])) unset($cron_jobs[$key]); } + + foreach($cron_jobs as $cron_job) { + if(!in_array($cron_job."\n", $existing_cron_jobs)) { + $existing_cron_jobs[] = $cron_job."\n"; + } + } + file_put_contents('crontab.txt', $existing_cron_jobs); + exec('crontab -u getmail crontab.txt &> /dev/null'); + unlink('crontab.txt'); } - file_put_contents('crontab.txt', $existing_cron_jobs); - exec('crontab -u getmail crontab.txt &> /dev/null'); - unlink('crontab.txt'); } } -- Gitblit v1.9.1