From 5c9c418e1388d1c844bdba0a601e0f81e9a6e365 Mon Sep 17 00:00:00 2001 From: Mikhail Sandakov Date: Wed, 25 Oct 2023 14:57:21 +0300 Subject: [PATCH 1/2] Reinstall mariadb only when current version is lover 10.3.38 (Ubuntu 20 default version) --- actions/mariadb.py | 50 ++++++++++++++++++++++++++++++++++++++-------- main.py | 3 ++- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/actions/mariadb.py b/actions/mariadb.py index c809dcf..4348f19 100644 --- a/actions/mariadb.py +++ b/actions/mariadb.py @@ -4,7 +4,17 @@ from common import action, dist, dpkg, files, log, packages, systemd -MARIADB_VERSION_ON_ALMA = "10.3.35" +MARIADB_VERSION_ON_UBUNTU_20 = "10.3.38" + + +def _is_version_larger(left: str, right: str) -> bool: + for pleft, pright in zip(left.split("."), right.split(".")): + if int(pleft) > int(pright): + return True + elif int(pright) > int(pleft): + return False + + return False def _get_mariadb_utilname() -> str: @@ -25,6 +35,13 @@ def _is_mariadb_installed() -> bool: return "MariaDB" in subprocess.check_output([utility, "--version"], universal_newlines=True) +def _get_mariadb_version() -> str: + utility = _get_mariadb_utilname() + out = subprocess.check_output([utility, "--version"], universal_newlines=True) + log.debug("Detected mariadb version is: {version}".format(version=out.split("Distrib ")[1].split(",")[0].split("-")[0])) + return out.split("Distrib ")[1].split(",")[0].split("-")[0] + + def _is_mysql_installed() -> bool: utility = _get_mariadb_utilname() if utility is None or utility == "mariadb": @@ -91,20 +108,37 @@ def estimate_revert_time(self): return 15 -class InstallUbuntu20DatabaseVersion(action.ActiveAction): +class InstallUbuntu20Mariadb(action.ActiveAction): def __init__(self): - self.name = "installing mariadb/mysql from ubuntu 20 official repository" + self.name = "installing mariadb from ubuntu 20 official repository" def _is_required(self) -> bool: - return _is_mariadb_installed() or _is_mysql_installed() + return _is_mariadb_installed() and _is_version_larger(MARIADB_VERSION_ON_UBUNTU_20, _get_mariadb_version()) def _prepare_action(self): dpkg.depconfig_parameter_set("libraries/restart-without-asking", "true") + packages.install_packages(["mariadb-server-10.3"], force_package_config=True) + + def _post_action(self): + dpkg.depconfig_parameter_set("libraries/restart-without-asking", "false") + + def _revert_action(self): + dpkg.depconfig_parameter_set("libraries/restart-without-asking", "false") + + def estimate_prepare_time(self): + return 60 + + +class InstallUbuntu20Mysql(action.ActiveAction): + def __init__(self): + self.name = "installing mysql from ubuntu 20 official repository" + + def _is_required(self) -> bool: + return _is_mysql_installed() - if _is_mariadb_installed(): - packages.install_packages(["mariadb-server-10.3"], force_package_config=True) - elif _is_mysql_installed(): - packages.install_packages(["mysql-server-5.7"], force_package_config=True) + def _prepare_action(self): + dpkg.depconfig_parameter_set("libraries/restart-without-asking", "true") + packages.install_packages(["mysql-server-5.7"], force_package_config=True) def _post_action(self): dpkg.depconfig_parameter_set("libraries/restart-without-asking", "false") diff --git a/main.py b/main.py index 87e21bd..0986241 100644 --- a/main.py +++ b/main.py @@ -154,7 +154,8 @@ def construct_actions(options: typing.Any, stage_flag: Stages) -> typing.Dict[in ], 2: [ actions.InstallNextKernelVersion(), - actions.InstallUbuntu20DatabaseVersion(), + actions.InstallUbuntu20Mariadb(), + actions.InstallUbuntu20Mysql(), actions.InstallUdev(), actions.ReinstallSystemd(), actions.RemoveLXD(), From f8691e0c9c0dd9c1abb47820c632bc88bfd650ce Mon Sep 17 00:00:00 2001 From: Mikhail Sandakov Date: Thu, 26 Oct 2023 14:49:32 +0300 Subject: [PATCH 2/2] Move some of mariadb related dunctions to the common submodule --- actions/mariadb.py | 62 ++++++---------------------------------------- common | 2 +- 2 files changed, 8 insertions(+), 56 deletions(-) diff --git a/actions/mariadb.py b/actions/mariadb.py index 4348f19..fe65130 100644 --- a/actions/mariadb.py +++ b/actions/mariadb.py @@ -1,53 +1,10 @@ # Copyright 1999 - 2023. Plesk International GmbH. All rights reserved. import subprocess -from common import action, dist, dpkg, files, log, packages, systemd +from common import action, dpkg, files, mariadb, packages, systemd -MARIADB_VERSION_ON_UBUNTU_20 = "10.3.38" - - -def _is_version_larger(left: str, right: str) -> bool: - for pleft, pright in zip(left.split("."), right.split(".")): - if int(pleft) > int(pright): - return True - elif int(pright) > int(pleft): - return False - - return False - - -def _get_mariadb_utilname() -> str: - for utility in ("mariadb", "mysql"): - if subprocess.run(["which", utility], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL).returncode == 0: - return utility - - return None - - -def _is_mariadb_installed() -> bool: - utility = _get_mariadb_utilname() - if utility is None: - return False - elif utility == "mariadb": - return True - - return "MariaDB" in subprocess.check_output([utility, "--version"], universal_newlines=True) - - -def _get_mariadb_version() -> str: - utility = _get_mariadb_utilname() - out = subprocess.check_output([utility, "--version"], universal_newlines=True) - log.debug("Detected mariadb version is: {version}".format(version=out.split("Distrib ")[1].split(",")[0].split("-")[0])) - return out.split("Distrib ")[1].split(",")[0].split("-")[0] - - -def _is_mysql_installed() -> bool: - utility = _get_mariadb_utilname() - if utility is None or utility == "mariadb": - return False - - return "MariaDB" not in subprocess.check_output([utility, "--version"], universal_newlines=True) +MARIADB_VERSION_ON_UBUNTU_20 = mariadb.MariaDBVersion("10.3.38") class AddMysqlConnector(action.ActiveAction): @@ -55,7 +12,7 @@ def __init__(self): self.name = "install mysql connector" def _is_required(self) -> bool: - return _is_mysql_installed() + return mariadb.is_mysql_installed() def _prepare_action(self) -> None: pass @@ -68,12 +25,7 @@ def _revert_action(self) -> None: def get_db_server_config_file(): - if dist._is_rhel_based(dist.get_distro()): - return "/etc/my.cnf.d/server.cnf" - - if _is_mysql_installed(): - return "/etc/mysql/my.cnf" - return "/etc/mysql/mariadb.conf.d/50-server.cnf" + return mariadb.get_mysql_config_file_path() if mariadb.is_mysql_installed() else mariadb.get_mariadb_config_file_path() class DisableMariadbInnodbFastShutdown(action.ActiveAction): @@ -81,7 +33,7 @@ def __init__(self): self.name = "disabling mariadb innodb fast shutdown" def _is_required(self) -> bool: - return _is_mariadb_installed() or _is_mysql_installed() + return mariadb.is_mariadb_installed() or mariadb.is_mysql_installed() def _prepare_action(self): target_file = get_db_server_config_file() @@ -113,7 +65,7 @@ def __init__(self): self.name = "installing mariadb from ubuntu 20 official repository" def _is_required(self) -> bool: - return _is_mariadb_installed() and _is_version_larger(MARIADB_VERSION_ON_UBUNTU_20, _get_mariadb_version()) + return mariadb.is_mariadb_installed() and MARIADB_VERSION_ON_UBUNTU_20 > mariadb.get_installed_mariadb_version() def _prepare_action(self): dpkg.depconfig_parameter_set("libraries/restart-without-asking", "true") @@ -134,7 +86,7 @@ def __init__(self): self.name = "installing mysql from ubuntu 20 official repository" def _is_required(self) -> bool: - return _is_mysql_installed() + return mariadb.is_mysql_installed() def _prepare_action(self): dpkg.depconfig_parameter_set("libraries/restart-without-asking", "true") diff --git a/common b/common index 006c0af..cc3aed0 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit 006c0af69d23ecb73bf8bdcf6e727ea81cbb4dcc +Subproject commit cc3aed07c5d504ce72f343b2b3ca93baa7e0ccd1