From 6f2ed24c1a0de25ef0f08fcc2648997812ae23b5 Mon Sep 17 00:00:00 2001 From: Spitap Date: Sun, 7 Jan 2024 11:46:54 +0100 Subject: [PATCH 1/4] Prevent installation of incompatible extensions --- modoboa_installer/compatibility_matrix.py | 11 ++++++----- modoboa_installer/scripts/modoboa.py | 10 ++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/modoboa_installer/compatibility_matrix.py b/modoboa_installer/compatibility_matrix.py index f610124..f1db5f9 100644 --- a/modoboa_installer/compatibility_matrix.py +++ b/modoboa_installer/compatibility_matrix.py @@ -21,13 +21,14 @@ COMPATIBILITY_MATRIX = { "modoboa-sievefilters": ">=1.1.1", "modoboa-webmail": ">=1.2.0", }, - "2.1.0": { - "modoboa-pdfcredentials": None, - "modoboa-dmarc": None, - "modoboa-imap-migration": None, - }, } EXTENSIONS_AVAILABILITY = { "modoboa-contacts": "1.7.4", } + +REMOVED_EXTENSIONS = { + "modoboa-pdfcredentials": "2.1.0", + "modoboa-dmarc": "2.1.0", + "modoboa-imap-migration": "2.1.0" +} diff --git a/modoboa_installer/scripts/modoboa.py b/modoboa_installer/scripts/modoboa.py index a2eab3a..a76b920 100644 --- a/modoboa_installer/scripts/modoboa.py +++ b/modoboa_installer/scripts/modoboa.py @@ -99,6 +99,16 @@ class Modoboa(base.Installer): if sys.version_info.major == 2 and sys.version_info.micro < 9: # Add extra packages to fix the SNI issue packages += ["pyOpenSSL"] + for extension in list(self.extensions): + if extension in compatibility_matrix.REMOVED_EXTENSIONS.keys(): + modoboa_version = self.config.get("modoboa", "version") + if modoboa_version != "latest": + max_version = utils.convert_version_to_int( + compatibility_matrix.REMOVED_EXTENSIONS[extension]) + modoboa_v_int = utils.convert_version_to_int(modoboa_version) + if modoboa_v_int < max_version: + continue + self.extensions.remove(extension) python.install_packages( packages, self.venv_path, upgrade=self.upgrade, From 2df9fcfd865b7e7df7dc338dab715e898a9e72ca Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 24 Apr 2024 07:52:02 +0200 Subject: [PATCH 2/4] Moved code --- modoboa_installer/scripts/modoboa.py | 33 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/modoboa_installer/scripts/modoboa.py b/modoboa_installer/scripts/modoboa.py index a76b920..0e52caa 100644 --- a/modoboa_installer/scripts/modoboa.py +++ b/modoboa_installer/scripts/modoboa.py @@ -65,12 +65,16 @@ class Modoboa(base.Installer): def is_extension_ok_for_version(self, extension, version): """Check if extension can be installed with this modo version.""" - if extension not in compatibility_matrix.EXTENSIONS_AVAILABILITY: - return True - version = utils.convert_version_to_int(version) - min_version = compatibility_matrix.EXTENSIONS_AVAILABILITY[extension] - min_version = utils.convert_version_to_int(min_version) - return version >= min_version + if extension in compatibility_matrix.EXTENSIONS_AVAILABILITY: + version = utils.convert_version_to_int(version) + min_version = compatibility_matrix.EXTENSIONS_AVAILABILITY[extension] + min_version = utils.convert_version_to_int(min_version) + return version >= min_version + if extension in compatibility_matrix.REMOVED_EXTENSIONS: + max_version = compatibility_matrix.REMOVED_EXTENSIONS[extension] + max_version = utils.convert_version_to_int(max_version) + return version < max_version + return True def _setup_venv(self): """Prepare a dedicated virtualenv.""" @@ -80,6 +84,13 @@ class Modoboa(base.Installer): version = self.config.get("modoboa", "version") if version == "latest": packages += ["modoboa"] + self.extensions + for extension in list(self.extensions): + if extension in compatibility_matrix.REMOVED_EXTENSIONS.keys(): + self.extensions.remove(extension) + self.extensions = [ + extension for extension in self.extensions + if extension not in compatibility_matrix.REMOVED_EXTENSIONS + ] else: matrix = compatibility_matrix.COMPATIBILITY_MATRIX[version] packages.append("modoboa=={}".format(version)) @@ -99,16 +110,6 @@ class Modoboa(base.Installer): if sys.version_info.major == 2 and sys.version_info.micro < 9: # Add extra packages to fix the SNI issue packages += ["pyOpenSSL"] - for extension in list(self.extensions): - if extension in compatibility_matrix.REMOVED_EXTENSIONS.keys(): - modoboa_version = self.config.get("modoboa", "version") - if modoboa_version != "latest": - max_version = utils.convert_version_to_int( - compatibility_matrix.REMOVED_EXTENSIONS[extension]) - modoboa_v_int = utils.convert_version_to_int(modoboa_version) - if modoboa_v_int < max_version: - continue - self.extensions.remove(extension) python.install_packages( packages, self.venv_path, upgrade=self.upgrade, From d0d19b920bd80cf25ed93457052d2a03e6ce098c Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 24 Apr 2024 07:53:38 +0200 Subject: [PATCH 3/4] Moved version conversion upper --- modoboa_installer/scripts/modoboa.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modoboa_installer/scripts/modoboa.py b/modoboa_installer/scripts/modoboa.py index 0e52caa..bc721de 100644 --- a/modoboa_installer/scripts/modoboa.py +++ b/modoboa_installer/scripts/modoboa.py @@ -65,8 +65,8 @@ class Modoboa(base.Installer): def is_extension_ok_for_version(self, extension, version): """Check if extension can be installed with this modo version.""" + version = utils.convert_version_to_int(version) if extension in compatibility_matrix.EXTENSIONS_AVAILABILITY: - version = utils.convert_version_to_int(version) min_version = compatibility_matrix.EXTENSIONS_AVAILABILITY[extension] min_version = utils.convert_version_to_int(min_version) return version >= min_version From c069f7e6eb0c99cb3f3154958e1f34f7f0f1fb88 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 24 Apr 2024 08:03:30 +0200 Subject: [PATCH 4/4] updated doc --- README.rst | 9 ++++----- run.py | 8 +++++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/README.rst b/README.rst index 5fa04ed..0a5577e 100644 --- a/README.rst +++ b/README.rst @@ -9,12 +9,11 @@ An installer which deploy a complete mail server based on Modoboa. This tool is still in beta stage, it has been tested on: - * Debian Buster (10) / Bullseye (11) + * Debian 10 and upper * Ubuntu Bionic Beaver (18.04) and upper - * CentOS 7 .. warning:: - + ``/tmp`` partition must be mounted without the ``noexec`` option. .. note:: @@ -92,8 +91,8 @@ You can activate it as follows:: It will automatically install latest versions of modoboa and its plugins. -Backup mode ------------- +Backup mode +----------- An experimental backup mode is available. diff --git a/run.py b/run.py index d643fc8..6ba87ae 100755 --- a/run.py +++ b/run.py @@ -37,6 +37,12 @@ PRIMARY_APPS = [ def installation_disclaimer(args, config): """Display installation disclaimer.""" hostname = config.get("general", "hostname") + utils.printcolor( + "Notice:\n" + "It is recommanded to run this installer on a FRESHLY installed server.\n" + "(ie. with nothing special already installed on it)\n", + utils.CYAN + ) utils.printcolor( "Warning:\n" "Before you start the installation, please make sure the following " @@ -47,7 +53,7 @@ def installation_disclaimer(args, config): hostname.replace(".{}".format(args.domain), ""), hostname ), - utils.CYAN + utils.YELLOW ) utils.printcolor( "Your mail server will be installed with the following components:",