X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FConsole%2FAutomaticInstallation.php;h=33b6f8303fa05498e2f114e2665079c0b7ee2d9b;hb=d4a5a8051ad34a7be72238967afb3e6b140afdc8;hp=401d9c292c87cc758712c7e43a91932b9deb6154;hpb=0b97b32a591241bb693dd4cc3584f704bb14aa60;p=friendica.git diff --git a/src/Console/AutomaticInstallation.php b/src/Console/AutomaticInstallation.php index 401d9c292c..33b6f8303f 100644 --- a/src/Console/AutomaticInstallation.php +++ b/src/Console/AutomaticInstallation.php @@ -1,19 +1,48 @@ . + * + */ namespace Friendica\Console; use Asika\SimpleConsole\Console; -use Friendica\BaseObject; -use Friendica\Core\Config; +use Friendica\App; +use Friendica\App\BaseURL; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\Config\ValueObject\Cache; use Friendica\Core\Installer; use Friendica\Core\Theme; +use Friendica\Database\Database; use Friendica\Util\BasePath; -use Friendica\Util\BaseURL; -use Friendica\Util\ConfigFileLoader; use RuntimeException; class AutomaticInstallation extends Console { + /** @var App\Mode */ + private $appMode; + /** @var \Friendica\Core\Config\ValueObject\Cache */ + private $configCache; + /** @var IManageConfigValues */ + private $config; + /** @var Database */ + private $dba; + protected function getHelp() { return << The host of the mysql/mariadb database (env MYSQL_HOST) -p|--dbport The port of the mysql/mariadb database (env MYSQL_PORT) + -s|--dbsocket The socket of the mysql/mariadb database (env MYSQL_SOCKET) -d|--dbdata The name of the mysql/mariadb database (env MYSQL_DATABASE) - -U|--dbuser The username of the mysql/mariadb database login (env MYSQL_USER or MYSQL_USERNAME) + -u|--dbuser The username of the mysql/mariadb database login (env MYSQL_USER or MYSQL_USERNAME) -P|--dbpass The password of the mysql/mariadb database login (env MYSQL_PASSWORD) -U|--url The full base URL of Friendica - f.e. 'https://friendica.local/sub' (env FRIENDICA_URL) -B|--phppath The path of the PHP binary (env FRIENDICA_PHP_PATH) @@ -47,6 +77,7 @@ Options Environment variables MYSQL_HOST The host of the mysql/mariadb database (mandatory if mysql and environment is used) MYSQL_PORT The port of the mysql/mariadb database + MYSQL_SOCKET The socket of the mysql/mariadb database MYSQL_USERNAME|MYSQL_USER The username of the mysql/mariadb database login (MYSQL_USERNAME is for mysql, MYSQL_USER for mariadb) MYSQL_PASSWORD The password of the mysql/mariadb database login MYSQL_DATABASE The name of the mysql/mariadb database @@ -64,27 +95,37 @@ Examples bin/console autoinstall --savedb Installs Friendica with environment variables and saves them to the 'config/local.config.php' file - bin/console autoinstall -h localhost -p 3365 -U user -P passwort1234 -d friendica + bin/console autoinstall -H localhost -p 3365 -u user -P password1234 -d friendica -U https://friendica.fqdn Installs Friendica with a local mysql database with credentials HELP; } - protected function doExecute() + public function __construct(App\Mode $appMode, Cache $configCache, IManageConfigValues $config, Database $dba, array $argv = null) { - // Initialise the app - $this->out("Initializing setup...\n"); + parent::__construct($argv); + + $this->appMode = $appMode; + $this->configCache = $configCache; + $this->config = $config; + $this->dba = $dba; + } - $a = BaseObject::getApp(); + protected function doExecute(): int + { + // Initialise the app + $this->out("Initializing setup..."); $installer = new Installer(); - $configCache = $a->getConfigCache(); - $installer->setUpCache($configCache, BasePath::create($a->getBasePath(), $_SERVER)); + $configCache = $this->configCache; + $basePathConf = $configCache->get('system', 'basepath'); + $basepath = new BasePath($basePathConf); + $installer->setUpCache($configCache, $basepath->getPath()); - $this->out(" Complete!\n\n"); + $this->out(" Complete!\n"); // Check Environment - $this->out("Checking environment...\n"); + $this->out("Checking environment..."); $installer->resetChecks(); @@ -93,38 +134,38 @@ HELP; throw new RuntimeException($errorMessage); } - $this->out(" Complete!\n\n"); + $this->out(" Complete!\n"); // if a config file is set, $config_file = $this->getOption(['f', 'file']); if (!empty($config_file)) { - if ($config_file != 'config' . DIRECTORY_SEPARATOR . 'local.config.php') { - // Copy config file - $this->out("Copying config file...\n"); - if (!copy($a->getBasePath() . DIRECTORY_SEPARATOR . $config_file, $a->getBasePath() . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.config.php')) { - throw new RuntimeException("ERROR: Saving config file failed. Please copy '$config_file' to '" . $a->getBasePath() . "'" . DIRECTORY_SEPARATOR . "config" . DIRECTORY_SEPARATOR . "local.config.php' manually.\n"); - } + $this->out("Loading config file '$config_file'..."); + if (!file_exists($config_file)) { + throw new RuntimeException("ERROR: Config file does not exist."); } - //reload the config cache - $loader = new ConfigFileLoader($a->getBasePath(), $a->getMode()); - $loader->setupCache($configCache); - + //append config file to the config cache + $config = include($config_file); + if (!is_array($config)) { + throw new Exception('Error loading config file ' . $config_file); + } + $configCache->load($config, Cache::SOURCE_FILE); } else { // Creating config file - $this->out("Creating config file...\n"); + $this->out("Creating config file..."); $save_db = $this->getOption(['s', 'savedb'], false); $db_host = $this->getOption(['H', 'dbhost'], ($save_db) ? (getenv('MYSQL_HOST')) : Installer::DEFAULT_HOST); $db_port = $this->getOption(['p', 'dbport'], ($save_db) ? getenv('MYSQL_PORT') : null); + $db_socket = $this->getOption(['s', 'dbsocket'], ($save_db) ? getenv('MYSQL_SOCKET') : null); $configCache->set('database', 'hostname', $db_host . (!empty($db_port) ? ':' . $db_port : '')); $configCache->set('database', 'database', $this->getOption(['d', 'dbdata'], ($save_db) ? getenv('MYSQL_DATABASE') : '')); $configCache->set('database', 'username', - $this->getOption(['U', 'dbuser'], + $this->getOption(['u', 'dbuser'], ($save_db) ? getenv('MYSQL_USER') . getenv('MYSQL_USERNAME') : '')); $configCache->set('database', 'password', $this->getOption(['P', 'dbpass'], @@ -158,66 +199,73 @@ HELP; $this->out('The Friendica URL has to be set during CLI installation.'); return 1; } else { - $baseUrl = new BaseURL($a->getConfig(), []); - $baseUrl->saveByURL($url); + $configCache->set('system', 'url', $url); } $installer->createConfig($configCache); } - $this->out(" Complete!\n\n"); + $this->out(" Complete!\n"); // Check database connection - $this->out("Checking database...\n"); + $this->out("Checking database..."); $installer->resetChecks(); - if (!$installer->checkDB($configCache, $a->getProfiler())) { + if (!$installer->checkDB($this->dba)) { $errorMessage = $this->extractErrors($installer->getChecks()); throw new RuntimeException($errorMessage); } - $this->out(" Complete!\n\n"); + $this->out(" Complete!\n"); // Install database $this->out("Inserting data into database...\n"); $installer->resetChecks(); - if (!$installer->installDatabase($a->getBasePath())) { + if (!$installer->installDatabase()) { $errorMessage = $this->extractErrors($installer->getChecks()); throw new RuntimeException($errorMessage); } - $this->out(" Complete!\n\n"); + if (!empty($config_file) && $config_file != 'config' . DIRECTORY_SEPARATOR . 'local.config.php') { + // Copy config file + $this->out("Copying config file..."); + if (!copy($config_file, $basePathConf . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.config.php')) { + throw new RuntimeException("ERROR: Saving config file failed. Please copy '$config_file' to '" . $basePathConf . "'" . DIRECTORY_SEPARATOR . "config" . DIRECTORY_SEPARATOR . "local.config.php' manually.\n"); + } + } + + $this->out(" Complete!\n"); // Install theme - $this->out("Installing theme\n"); - if (!empty(Config::get('system', 'theme'))) { - Theme::install(Config::get('system', 'theme')); - $this->out(" Complete\n\n"); + $this->out("Installing theme"); + if (!empty($this->config->get('system', 'theme'))) { + Theme::install($this->config->get('system', 'theme')); + $this->out(" Complete\n"); } else { - $this->out(" Theme setting is empty. Please check the file 'config/local.config.php'\n\n"); + $this->out(" Theme setting is empty. Please check the file 'config/local.config.php'\n"); } - $this->out("\nInstallation is finished\n"); + $this->out("\nInstallation is finished"); return 0; } /** - * @param Installer $installer The Installer instance - * @param Config\Cache\ConfigCache $configCache The config cache + * @param Installer $installer The Installer instance + * @param \Friendica\Core\Config\ValueObject\Cache $configCache The config cache * * @return bool true if checks were successfully, otherwise false * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - private function runBasicChecks(Installer $installer, Config\Cache\ConfigCache $configCache) + private function runBasicChecks(Installer $installer, Cache $configCache) { $checked = true; $installer->resetChecks(); - if (!$installer->checkFunctions()) { + if (!$installer->checkFunctions()) { $checked = false; } if (!$installer->checkImagick()) { @@ -246,11 +294,12 @@ HELP; /** * @param array $results + * * @return string */ private function extractErrors($results) { - $errorMessage = ''; + $errorMessage = ''; $allChecksRequired = $this->getOption('a') !== null; foreach ($results as $result) {