From 1fa390513dbcba4c355458e5e6a9f17f64e409de Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 15 Sep 2020 11:14:23 +0200 Subject: [PATCH] Python 3.8 fixes. --- README.rst | 11 +++++++++++ modoboa_installer/database.py | 3 +-- modoboa_installer/scripts/postfix.py | 4 ++-- modoboa_installer/utils.py | 21 +++++++++++++++------ run.py | 4 ++-- 5 files changed, 31 insertions(+), 12 deletions(-) diff --git a/README.rst b/README.rst index 0a345f1..a945510 100644 --- a/README.rst +++ b/README.rst @@ -30,6 +30,17 @@ Usage:: $ cd modoboa-installer $ sudo ./run.py +.. note:: + + On some systems (Ubuntu 20.04 for example), you might encounter the + following issue:: + + /usr/bin/env: 'python': No such file or directory + + If so, try to run the command like this:: + + $ sudo python3 run.py + A configuration file will be automatically generated the first time you run the installer, please don't copy the ``installer.cfg.template`` file manually. diff --git a/modoboa_installer/database.py b/modoboa_installer/database.py index 16cdb5e..7db206d 100644 --- a/modoboa_installer/database.py +++ b/modoboa_installer/database.py @@ -1,7 +1,6 @@ """Database related tools.""" import os -import platform import pwd import stat @@ -143,7 +142,7 @@ class MySQL(Database): def install_package(self): """Preseed package installation.""" - name, version, _id = platform.linux_distribution() + name, version, _id = utils.dist_info() name = name.lower() if name == "debian": mysql_name = "mysql" if version.startswith("8") else "mariadb" diff --git a/modoboa_installer/scripts/postfix.py b/modoboa_installer/scripts/postfix.py index d264100..607a905 100644 --- a/modoboa_installer/scripts/postfix.py +++ b/modoboa_installer/scripts/postfix.py @@ -35,9 +35,9 @@ class Postfix(base.Installer): def install_packages(self): """Preconfigure postfix package installation.""" if "centos" in utils.dist_name(): - config = configparser.SafeConfigParser() + config = configparser.ConfigParser() with open("/etc/yum.repos.d/CentOS-Base.repo") as fp: - config.readfp(fp) + config.read_file(fp) config.set("centosplus", "enabled", "1") config.set("centosplus", "includepkgs", "postfix-*") config.set("base", "exclude", "postfix-*") diff --git a/modoboa_installer/utils.py b/modoboa_installer/utils.py index 4ed7916..fcd8b57 100644 --- a/modoboa_installer/utils.py +++ b/modoboa_installer/utils.py @@ -73,17 +73,26 @@ def exec_cmd(cmd, sudo_user=None, pinput=None, login=True, **kwargs): return process.returncode, output -def dist_name(): - """Try to guess the distribution name.""" +def dist_info(): + """Try to return information about the system we're running on.""" try: # Python 3.8 and up way import distro - name, version, _id = distro.linux_distribution() - except ImportError as e: + return distro.linux_distribution() + except ImportError: # Python 3.7 and down way import platform - name, version, _id = platform.linux_distribution() - return "unknown" if not name else name.lower() + return platform.linux_distribution() + printcolor( + "Failed to retrieve information about your system, aborting.", + RED) + sys.exit(1) + + +def dist_name(): + """Try to guess the distribution name.""" + name, version, _id = dist_info() + return name.lower() def mkdir(path, mode, uid, gid): diff --git a/run.py b/run.py index e2bde9c..da9727f 100755 --- a/run.py +++ b/run.py @@ -79,9 +79,9 @@ def main(input_args): utils.check_config_file(args.configfile, args.interactive, args.upgrade) if args.stop_after_configfile_check: return - config = configparser.SafeConfigParser() + config = configparser.ConfigParser() with open(args.configfile) as fp: - config.readfp(fp) + config.read_file(fp) if not config.has_section("general"): config.add_section("general") config.set("general", "domain", args.domain)