diff --git a/install/lib/class.FroxlorInstall.php b/install/lib/class.FroxlorInstall.php
index 33dc8434..b9ab4dc0 100644
--- a/install/lib/class.FroxlorInstall.php
+++ b/install/lib/class.FroxlorInstall.php
@@ -159,6 +159,7 @@ class FroxlorInstall
$this->_guessServerName();
$this->_guessServerIP();
$this->_guessWebserver();
+ $this->_guessDistribution();
$this->_getPostField('mysql_host', '127.0.0.1');
$this->_getPostField('mysql_database', 'froxlor');
@@ -504,6 +505,17 @@ class FroxlorInstall
$this->_updateSetting($upd_stmt, 'error', 'system', 'errorlog_level');
}
+ $distros = glob(\Froxlor\FileDir::makeCorrectDir(\Froxlor\Froxlor::getInstallDir() . '/lib/configfiles/') . '*.xml');
+ foreach ($distros as $_distribution) {
+ if($this->_data['distribution'] == str_replace(".xml", "", strtolower(basename($_distribution)))) {
+ $dist = new \Froxlor\Config\ConfigParser($_distribution);
+ $defaults = $dist->getDefaults();
+ foreach ($defaults->property as $property) {
+ $this->_updateSetting($upd_stmt, $property->value, $property->settinggroup, $property->varname);
+ }
+ }
+ }
+
$this->_updateSetting($upd_stmt, $this->_data['activate_newsfeed'], 'admin', 'show_news_feed');
$this->_updateSetting($upd_stmt, dirname(dirname(dirname(__FILE__))), 'system', 'letsencryptchallengepath');
@@ -840,6 +852,32 @@ class FroxlorInstall
*/
$section = $this->_lng['install']['serversettings'];
eval("\$formdata .= \"" . $this->_getTemplate("datasection") . "\";");
+ // distribution
+ if (! empty($_POST['installstep']) && $this->_data['distribution'] == '') {
+ $diststyle = 'color:red;';
+ } else {
+ $diststyle = '';
+ }
+
+ // show list of available distro's
+ $distros = glob(\Froxlor\FileDir::makeCorrectDir(\Froxlor\Froxlor::getInstallDir() . '/lib/configfiles/') . '*.xml');
+ foreach ($distros as $_distribution) {
+ $dist = new \Froxlor\Config\ConfigParser($_distribution);
+ $dist_display = $dist->distributionName." ".$dist->distributionCodename." (" . $dist->distributionVersion . ")";
+ $distributions_select_data[$dist_display] .= str_replace(".xml", "", strtolower(basename($_distribution)));
+ }
+
+ // sort by distribution name
+ ksort($distributions_select_data);
+
+ foreach ($distributions_select_data as $dist_display => $dist_index) {
+ // create select-box-option
+ $distributions_select .= \Froxlor\UI\HTML::makeoption($dist_display, $dist_index, $this->_data['distribution']);
+ //$this->_data['distribution']
+ }
+
+ $formdata .= $this->_getSectionItemSelectbox('distribution', $distributions_select, $diststyle);
+
// servername
if (! empty($_POST['installstep']) && $this->_data['servername'] == '') {
$style = 'color:red;';
@@ -861,12 +899,12 @@ class FroxlorInstall
$websrvstyle = '';
}
// apache
- $formdata .= $this->_getSectionItemCheckbox('apache2', ($this->_data['webserver'] == 'apache2'), $websrvstyle);
- $formdata .= $this->_getSectionItemCheckbox('apache24', ($this->_data['webserver'] == 'apache24'), $websrvstyle);
+ $formdata .= $this->_getSectionItemCheckbox('webserver', 'apache2', ($this->_data['webserver'] == 'apache2'), $websrvstyle);
+ $formdata .= $this->_getSectionItemCheckbox('webserver', 'apache24', ($this->_data['webserver'] == 'apache24'), $websrvstyle);
// lighttpd
- $formdata .= $this->_getSectionItemCheckbox('lighttpd', ($this->_data['webserver'] == 'lighttpd'), $websrvstyle);
+ $formdata .= $this->_getSectionItemCheckbox('webserver', 'lighttpd', ($this->_data['webserver'] == 'lighttpd'), $websrvstyle);
// nginx
- $formdata .= $this->_getSectionItemCheckbox('nginx', ($this->_data['webserver'] == 'nginx'), $websrvstyle);
+ $formdata .= $this->_getSectionItemCheckbox('webserver', 'nginx', ($this->_data['webserver'] == 'nginx'), $websrvstyle);
// webserver-user
if (! empty($_POST['installstep']) && $this->_data['httpuser'] == '') {
$style = 'color:red;';
@@ -918,7 +956,7 @@ class FroxlorInstall
}
/**
- * generate form radio field for webserver-selection
+ * generate form radio field
*
* @param string $fieldname
* @param boolean $checked
@@ -926,8 +964,9 @@ class FroxlorInstall
*
* @return string
*/
- private function _getSectionItemCheckbox($fieldname = null, $checked = false, $style = "")
+ private function _getSectionItemCheckbox($groupname = null, $fieldname = null, $checked = false, $style = "")
{
+ $groupname = $this->_lng['install'][$groupname];
$fieldlabel = $this->_lng['install'][$fieldname];
if ($checked) {
$checked = 'checked="checked"';
@@ -937,6 +976,25 @@ class FroxlorInstall
return $sectionitem;
}
+ /**
+ * generate form selectbox
+ *
+ * @param string $fieldname
+ * @param boolean $options
+ * @param string $style
+ *
+ * @return string
+ */
+ private function _getSectionItemSelectbox($fieldname = null, $options = null, $style = "")
+ {
+ $groupname = $this->_lng['install'][$groupname];
+ $fieldlabel = $this->_lng['install'][$fieldname];
+
+ $sectionitem = "";
+ eval("\$sectionitem .= \"" . $this->_getTemplate("dataitemselect") . "\";");
+ return $sectionitem;
+ }
+
/**
* generate form checkbox field
*
@@ -1273,6 +1331,30 @@ class FroxlorInstall
}
}
+
+ /**
+ * get/guess linux distribution
+ */
+ private function _guessDistribution()
+ {
+ // post
+ if (! empty($_POST['distribution'])) {
+ $this->_data['distribution'] = $_POST['distribution'];
+ } else {
+ $os_dist = parse_ini_file('/etc/os-release', false);
+ $os_version = explode('.',$os_version['VERSION_ID'])[0];
+
+ $distros = glob(\Froxlor\FileDir::makeCorrectDir(\Froxlor\Froxlor::getInstallDir() . '/lib/configfiles/') . '*.xml');
+ foreach ($distros as $_distribution) {
+ $dist = new \Froxlor\Config\ConfigParser($_distribution);
+ $ver = explode('.', $dist->distributionVersion)[0];
+ if (strtolower($os_dist['ID']) == strtolower($dist->distributionName) && $os_version = $ver) {
+ $this->_data['distribution'] = str_replace(".xml", "", strtolower(basename($_distribution)));
+ }
+ }
+ }
+ }
+
/**
* check if POST field is set and get value for the
* internal data array, if not set use either '' or $default if != null
diff --git a/install/lng/english.lng.php b/install/lng/english.lng.php
index e5e6b9cb..69c06ced 100644
--- a/install/lng/english.lng.php
+++ b/install/lng/english.lng.php
@@ -63,6 +63,7 @@ $lng['install']['admin_pass1'] = 'Administrator Password';
$lng['install']['admin_pass2'] = 'Administrator-Password (confirm)';
$lng['install']['activate_newsfeed'] = 'Enable the official newsfeed
(https://inside.froxlor.org/news/)';
$lng['install']['serversettings'] = 'Server settings';
+$lng['install']['distribution'] = 'Distribution';
$lng['install']['servername'] = 'Server name (FQDN, no ip-address)';
$lng['install']['serverip'] = 'Server IP';
$lng['install']['webserver'] = 'Webserver';
diff --git a/install/lng/french.lng.php b/install/lng/french.lng.php
index 42ab1d7b..a3aacc6a 100644
--- a/install/lng/french.lng.php
+++ b/install/lng/french.lng.php
@@ -53,6 +53,7 @@ $lng['install']['admin_user'] = 'Nom d\'utilisateur administrateur';
$lng['install']['admin_pass1'] = 'Mot de passe administrateur';
$lng['install']['admin_pass2'] = 'Mot de passe administrateur (confirmez)';
$lng['install']['serversettings'] = 'Réglages serveur';
+$lng['install']['distribution'] = 'Distribution';
$lng['install']['servername'] = 'Nom du serveur (FQDN, pas d\'adresse IP)';
$lng['install']['serverip'] = 'Adresse IP du serveur';
$lng['install']['webserver'] = 'Serveur Web';
diff --git a/install/lng/german.lng.php b/install/lng/german.lng.php
index 64b462b4..4c0aaf68 100644
--- a/install/lng/german.lng.php
+++ b/install/lng/german.lng.php
@@ -63,6 +63,7 @@ $lng['install']['admin_pass1'] = 'Administrator-Passwort';
$lng['install']['admin_pass2'] = 'Administrator-Passwort (Bestätigung)';
$lng['install']['activate_newsfeed'] = 'Aktiviere das offizielle Newsfeed
(https://inside.froxlor.org/news/)';
$lng['install']['serversettings'] = 'Servereinstellungen';
+$lng['install']['distribution'] = 'Distribution';
$lng['install']['servername'] = 'Servername (FQDN, keine IP-Adresse)';
$lng['install']['serverip'] = 'Server-IP';
$lng['install']['webserver'] = 'Webserver';
diff --git a/install/templates/dataitemchk.tpl b/install/templates/dataitemchk.tpl
index 30279bfa..46c90d1c 100644
--- a/install/templates/dataitemchk.tpl
+++ b/install/templates/dataitemchk.tpl
@@ -1,4 +1,4 @@
- - {$fieldlabel} + + {$fieldlabel}
diff --git a/install/templates/dataitemselect.tpl b/install/templates/dataitemselect.tpl new file mode 100644 index 00000000..91701bc6 --- /dev/null +++ b/install/templates/dataitemselect.tpl @@ -0,0 +1,6 @@ ++ + +
diff --git a/lib/Froxlor/Config/ConfigParser.php b/lib/Froxlor/Config/ConfigParser.php index ca995d7c..c881bcdd 100644 --- a/lib/Froxlor/Config/ConfigParser.php +++ b/lib/Froxlor/Config/ConfigParser.php @@ -39,6 +39,13 @@ class ConfigParser */ private $services = array(); + /** + * Holding the available defaults in the XML + * + * @var array + */ + private $defaults = array(); + /** * Store the parsed SimpleXMLElement for usage * @@ -147,7 +154,7 @@ class ConfigParser * * @return bool */ - private function parse() + private function parseServices() { // We only want to parse the stuff one time if ($this->isparsed == true) { @@ -174,6 +181,29 @@ class ConfigParser return true; } + /** + * Parse the XML and populate $this->services + * + * @return bool + */ + private function parseDefaults() + { + // We only want to parse the stuff one time + if ($this->isparsed == true) { + return true; + } + + // Get all defaults + $defaults = $this->xml->xpath('//defaults'); + foreach ($defaults as $default) { + $this->defaults = $default; + } + + // Switch flag to indicate we parsed our data + $this->isparsed = true; + return true; + } + /** * Return all services defined by the XML * @@ -184,9 +214,25 @@ class ConfigParser public function getServices() { // Let's parse this shit(!) - $this->parse(); + $this->parseServices(); // Return our carefully searched for services return $this->services; } + + /** + * Return all defaults defined by the XML + * + * The array will hold ConfigDefaults - Objects for further handling + * + * @return array + */ + public function getDefaults() + { + // Let's parse this shit(!) + $this->parseDefaults(); + + // Return our carefully searched for defaults + return $this->defaults; + } } diff --git a/lib/configfiles/rhel7.xml b/lib/configfiles/rhel7.xml index 29c92104..833ab185 100644 --- a/lib/configfiles/rhel7.xml +++ b/lib/configfiles/rhel7.xml @@ -1,7 +1,39 @@