mirror of
https://github.com/nextcloud/server.git
synced 2026-06-27 01:20:37 -04:00
10.6 will be EOL when Nextcloud 35 is released, similar to 10.3 its still somewhat supported for enterprise Ubuntu 22.04. So as we dropped 20.04 support we can increase that exception to 10.6. Now MariaDB is supported with active LTS version 10.11 to 12.3 (new LTS). Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
149 lines
5.5 KiB
PHP
149 lines
5.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
namespace OCA\Settings\SetupChecks;
|
|
|
|
use OCP\IDBConnection;
|
|
use OCP\IL10N;
|
|
use OCP\IURLGenerator;
|
|
use OCP\SetupCheck\ISetupCheck;
|
|
use OCP\SetupCheck\SetupResult;
|
|
|
|
class SupportedDatabase implements ISetupCheck {
|
|
|
|
private const MIN_MARIADB = '10.11';
|
|
private const MAX_MARIADB = '12.3';
|
|
private const MIN_MYSQL = '8.4';
|
|
private const MAX_MYSQL = '9.7';
|
|
private const MIN_POSTGRES = '14';
|
|
private const MAX_POSTGRES = '18';
|
|
private const MIN_ORACLE = '12.2';
|
|
private const MAX_ORACLE = '26';
|
|
|
|
public function __construct(
|
|
private IL10N $l10n,
|
|
private IURLGenerator $urlGenerator,
|
|
private IDBConnection $connection,
|
|
) {
|
|
}
|
|
|
|
#[\Override]
|
|
public function getCategory(): string {
|
|
return 'database';
|
|
}
|
|
|
|
#[\Override]
|
|
public function getName(): string {
|
|
return $this->l10n->t('Database version');
|
|
}
|
|
|
|
#[\Override]
|
|
public function run(): SetupResult {
|
|
$databasePlatform = $this->connection->getDatabaseProvider();
|
|
if ($databasePlatform === IDBConnection::PLATFORM_MYSQL || $databasePlatform === IDBConnection::PLATFORM_MARIADB) {
|
|
$statement = $this->connection->prepare("SHOW VARIABLES LIKE 'version';");
|
|
$result = $statement->execute();
|
|
$row = $result->fetchAssociative();
|
|
$version = $row['Value'];
|
|
$versionlc = strtolower($version);
|
|
// we only care about X.Y not X.Y.Z differences
|
|
[$major, $minor, ] = explode('.', $versionlc);
|
|
$versionConcern = $major . '.' . $minor;
|
|
if (str_contains($versionlc, 'mariadb')) {
|
|
if (version_compare($versionConcern, '10.6', '=')) {
|
|
return SetupResult::info(
|
|
$this->l10n->t(
|
|
'MariaDB version 10.6 detected, this version is end-of-life and only supported as part of Ubuntu 22.04. MariaDB >=%1$s and <=%2$s is suggested for best performance, stability and functionality with this version of Nextcloud.',
|
|
[
|
|
self::MIN_MARIADB,
|
|
self::MAX_MARIADB,
|
|
]
|
|
),
|
|
);
|
|
} elseif (version_compare($versionConcern, self::MIN_MARIADB, '<') || version_compare($versionConcern, self::MAX_MARIADB, '>')) {
|
|
return SetupResult::warning(
|
|
$this->l10n->t(
|
|
'MariaDB version "%1$s" detected. MariaDB >=%2$s and <=%3$s is suggested for best performance, stability and functionality with this version of Nextcloud.',
|
|
[
|
|
$version,
|
|
self::MIN_MARIADB,
|
|
self::MAX_MARIADB,
|
|
],
|
|
),
|
|
);
|
|
}
|
|
} else {
|
|
if (version_compare($versionConcern, self::MIN_MYSQL, '<') || version_compare($versionConcern, self::MAX_MYSQL, '>')) {
|
|
return SetupResult::warning(
|
|
$this->l10n->t(
|
|
'MySQL version "%1$s" detected. MySQL >=%2$s and <=%3$s is suggested for best performance, stability and functionality with this version of Nextcloud.',
|
|
[
|
|
$version,
|
|
self::MIN_MYSQL,
|
|
self::MAX_MYSQL,
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|
|
} elseif ($databasePlatform === IDBConnection::PLATFORM_POSTGRES) {
|
|
$statement = $this->connection->prepare('SHOW server_version;');
|
|
$result = $statement->execute();
|
|
$row = $result->fetchAssociative();
|
|
$version = $row['server_version'];
|
|
$versionlc = strtolower($version);
|
|
// we only care about X not X.Y or X.Y.Z differences
|
|
[$major, ] = explode('.', $versionlc);
|
|
$versionConcern = $major;
|
|
if (version_compare($versionConcern, self::MIN_POSTGRES, '<') || version_compare($versionConcern, self::MAX_POSTGRES, '>')) {
|
|
return SetupResult::warning(
|
|
$this->l10n->t(
|
|
'PostgreSQL version "%1$s" detected. PostgreSQL >=%2$s and <=%3$s is suggested for best performance, stability and functionality with this version of Nextcloud.',
|
|
[
|
|
$version,
|
|
self::MIN_POSTGRES,
|
|
self::MAX_POSTGRES,
|
|
])
|
|
);
|
|
}
|
|
} elseif ($databasePlatform === IDBConnection::PLATFORM_ORACLE) {
|
|
$result = $this->connection->executeQuery('SELECT VERSION FROM PRODUCT_COMPONENT_VERSION');
|
|
$version = $result->fetchOne();
|
|
$result->closeCursor();
|
|
$versionLower = strtolower($version);
|
|
// we only care about X.Y not X.Y.Z differences
|
|
[$major, $minor, ] = explode('.', $versionLower);
|
|
$versionConcern = $major . '.' . $minor;
|
|
if (version_compare($versionConcern, self::MIN_ORACLE, '<') || version_compare($versionConcern, self::MAX_ORACLE, '>')) {
|
|
$extendedWarning = '';
|
|
if (version_compare($versionConcern, self::MIN_ORACLE, '<')) {
|
|
$extendedWarning = "\n" . $this->l10n->t('Nextcloud %d does not support your current version, so be sure to update the database before updating your Nextcloud Server.', [33]);
|
|
}
|
|
return SetupResult::warning(
|
|
$this->l10n->t(
|
|
'Oracle version "%1$s" detected. Oracle >=%2$s and <=%3$s is suggested for best performance, stability and functionality with this version of Nextcloud.',
|
|
[
|
|
$version,
|
|
self::MIN_ORACLE,
|
|
self::MAX_ORACLE,
|
|
])
|
|
. $extendedWarning
|
|
);
|
|
}
|
|
} elseif ($databasePlatform === IDBConnection::PLATFORM_SQLITE) {
|
|
return SetupResult::warning(
|
|
$this->l10n->t('SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend. This is particularly recommended when using the desktop client for file synchronisation. To migrate to another database use the command line tool: "occ db:convert-type".'),
|
|
$this->urlGenerator->linkToDocs('admin-db-conversion')
|
|
);
|
|
} else {
|
|
return SetupResult::error($this->l10n->t('Unknown database platform'));
|
|
}
|
|
return SetupResult::success($version);
|
|
}
|
|
}
|