aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2017-02-28 21:12:47 +0100
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2017-02-28 21:12:47 +0100
commit17296f99d26ef3eb5a2e73428e3d67e418846ab7 (patch)
treec117adeace6196d11c257385bc5f92de230a9b14
parent777fb7125fa8eb2915f4382b2c2faa0caeee3b57 (diff)
Fix CLI install bug with SQLite
And improve requirements check https://github.com/FreshRSS/FreshRSS/issues/1443
-rwxr-xr-xcli/do-install.php41
-rw-r--r--lib/lib_install.php35
2 files changed, 53 insertions, 23 deletions
diff --git a/cli/do-install.php b/cli/do-install.php
index c2f5b286d..16d03daaf 100755
--- a/cli/do-install.php
+++ b/cli/do-install.php
@@ -37,25 +37,6 @@ if (empty($options['default_user'])) {
fwrite(STDERR, 'FreshRSS install…' . "\n");
-$requirements = checkRequirements();
-if ($requirements['all'] !== 'ok') {
- $message = 'FreshRSS install failed requirements:' . "\n";
- foreach ($requirements as $requirement => $check) {
- if ($check !== 'ok' && $requirement !== 'all') {
- $message .= '• ' . $requirement . "\n";
- }
- }
- fail($message);
-}
-
-if (!FreshRSS_user_Controller::checkUsername($options['default_user'])) {
- fail('FreshRSS invalid default username (must be ASCII alphanumeric): ' . $options['default_user']);
-}
-
-if (isset($options['auth_type']) && !in_array($options['auth_type'], array('form', 'http_auth', 'none'))) {
- fail('FreshRSS invalid authentication method (auth_type must be one of { form, http_auth, none }: ' . $options['auth_type']);
-}
-
$config = array(
'salt' => generateSalt(),
'db' => FreshRSS_Context::$system_conf->db,
@@ -80,6 +61,28 @@ foreach ($dBparams as $dBparam) {
}
}
+$requirements = checkRequirements($config['db']['type']);
+if ($requirements['all'] !== 'ok') {
+ $message = 'FreshRSS install failed requirements:' . "\n";
+ foreach ($requirements as $requirement => $check) {
+ if ($check !== 'ok' && !in_array($requirement, array('all', 'pdo', 'message'))) {
+ $message .= '• ' . $requirement . "\n";
+ }
+ }
+ if (!empty($requirements['message'])) {
+ $message .= '• ' . $requirements['message'] . "\n";
+ }
+ fail($message);
+}
+
+if (!FreshRSS_user_Controller::checkUsername($options['default_user'])) {
+ fail('FreshRSS invalid default username (must be ASCII alphanumeric): ' . $options['default_user']);
+}
+
+if (isset($options['auth_type']) && !in_array($options['auth_type'], array('form', 'http_auth', 'none'))) {
+ fail('FreshRSS invalid authentication method (auth_type must be one of { form, http_auth, none }: ' . $options['auth_type']);
+}
+
if (file_put_contents(join_path(DATA_PATH, 'config.php'), "<?php\n return " . var_export($config, true) . ";\n") === false) {
fail('FreshRSS could not write configuration file!: ' . join_path(DATA_PATH, 'config.php'));
}
diff --git a/lib/lib_install.php b/lib/lib_install.php
index c5cae4293..76871c98a 100644
--- a/lib/lib_install.php
+++ b/lib/lib_install.php
@@ -5,14 +5,36 @@ define('BCRYPT_COST', 9);
Minz_Configuration::register('default_system', join_path(DATA_PATH, 'config.default.php'));
Minz_Configuration::register('default_user', join_path(USERS_PATH, '_', 'config.default.php'));
-function checkRequirements() {
+function checkRequirements($dbType = '') {
$php = version_compare(PHP_VERSION, '5.3.3') >= 0;
$minz = file_exists(join_path(LIB_PATH, 'Minz'));
$curl = extension_loaded('curl');
$pdo_mysql = extension_loaded('pdo_mysql');
$pdo_sqlite = extension_loaded('pdo_sqlite');
$pdo_pgsql = extension_loaded('pdo_pgsql');
- $pdo = $pdo_mysql || $pdo_sqlite || $pdo_pgsql;
+ $message = '';
+ switch ($dbType) {
+ case 'mysql':
+ $pdo_sqlite = $pdo_pgsql = true;
+ $pdo = $pdo_mysql;
+ break;
+ case 'sqlite':
+ $pdo_mysql = $pdo_pgsql = true;
+ $pdo = $pdo_sqlite;
+ break;
+ case 'pgsql':
+ $pdo_mysql = $pdo_sqlite = true;
+ $pdo = $pdo_pgsql;
+ break;
+ case '':
+ $pdo = $pdo_mysql || $pdo_sqlite || $pdo_pgsql;
+ break;
+ default:
+ $pdo_mysql = $pdo_sqlite = $pdo_pgsql = true;
+ $pdo = false;
+ $message = 'Invalid database type!';
+ break;
+ }
$pcre = extension_loaded('pcre');
$ctype = extension_loaded('ctype');
$fileinfo = extension_loaded('fileinfo');
@@ -44,8 +66,9 @@ function checkRequirements() {
'users' => $users ? 'ok' : 'ko',
'favicons' => $favicons ? 'ok' : 'ko',
'http_referer' => $http_referer ? 'ok' : 'ko',
+ 'message' => $message ?: 'ok',
'all' => $php && $minz && $curl && $pdo && $pcre && $ctype && $fileinfo && $dom && $xml &&
- $data && $cache && $users && $favicons && $http_referer ?
+ $data && $cache && $users && $favicons && $http_referer && $message == '' ?
'ok' : 'ko'
);
}
@@ -77,7 +100,11 @@ function checkDb(&$dbOptions) {
break;
case 'sqlite':
include_once(APP_PATH . '/SQL/install.sql.sqlite.php');
- $dsn = 'sqlite:' . join_path(USERS_PATH, $dbOptions['default_user'], 'db.sqlite');
+ $path = join_path(USERS_PATH, $dbOptions['default_user']);
+ if (!is_dir($path)) {
+ mkdir($path);
+ }
+ $dsn = 'sqlite:' . join_path($path, 'db.sqlite');
$driver_options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
);