From 5496f0caefe7f3f7324bca72fe63fb1ff857491e Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Fri, 6 Nov 2015 09:45:05 +0100 Subject: [PATCH] Few fixes. Ubuntu installation (fix #4) Generate map files when all shortcut is used (see #8) Fix freshclam execution on Ubuntu --- README.rst | 2 +- installer.cfg | 2 +- modoboa_installer/database.py | 12 ++++-------- modoboa_installer/scripts/clamav.py | 8 +++++++- modoboa_installer/scripts/dovecot.py | 7 +++++++ modoboa_installer/scripts/postfix.py | 13 ++++++++----- modoboa_installer/utils.py | 13 +++++++++++++ 7 files changed, 41 insertions(+), 16 deletions(-) diff --git a/README.rst b/README.rst index ed504d3..73e9b55 100644 --- a/README.rst +++ b/README.rst @@ -6,7 +6,7 @@ An installer which deploy a complete mail server based on Modoboa. .. warning:: This tool is still in beta stage, it has been tested on Debian - Jessie (8) only. + Jessie (8) and Ubuntu Trusty (14.04) only. .. warning:: diff --git a/installer.cfg b/installer.cfg index 0b181d6..945537d 100644 --- a/installer.cfg +++ b/installer.cfg @@ -26,7 +26,7 @@ timezone = Europe/Paris dbname = modoboa dbuser = modoboa dbpassword = password -# Extensions to install (you can use the 'all' shortcut) +# Extensions to install (to install all of them, use: all) extensions = modoboa-admin modoboa-admin-relaydomains modoboa-admin-limits modoboa-amavis modoboa-pdfcredentials modoboa-postfix-autoreply modoboa-sievefilters modoboa-stats modoboa-webmail [amavis] diff --git a/modoboa_installer/database.py b/modoboa_installer/database.py index f325617..df49739 100644 --- a/modoboa_installer/database.py +++ b/modoboa_installer/database.py @@ -109,14 +109,10 @@ class MySQL(Database): def install_package(self): """Preseed package installation.""" - cfg = ( - "mysql-server mysql-server/root_password password {}" - .format(self.dbpassword)) - utils.exec_cmd("echo '{}' | debconf-set-selections".format(cfg)) - cfg = ( - "mysql-server mysql-server/root_password_again password {}" - .format(self.dbpassword)) - utils.exec_cmd("echo '{}' | debconf-set-selections".format(cfg)) + utils.preconfigure_package( + "mysql-server", "root_password", "password", self.dbpassword) + utils.preconfigure_package( + "mysql-server", "root_password_again", "password", self.dbpassword) super(MySQL, self).install_package() def _exec_query(self, query, dbname=None, dbuser=None, dbpassword=None): diff --git a/modoboa_installer/scripts/clamav.py b/modoboa_installer/scripts/clamav.py index 167a647..8148811 100644 --- a/modoboa_installer/scripts/clamav.py +++ b/modoboa_installer/scripts/clamav.py @@ -20,4 +20,10 @@ class Clamav(base.Installer): system.add_user_to_group( user, self.config.get("amavis", "user") ) - utils.exec_cmd("freshclam", sudo_user=user) + if utils.dist_name == "ubuntu": + # Stop freshclam daemon to allow manual download + utils.exec_cmd("service clamav-freshclam stop") + utils.exec_cmd("freshclam", sudo_user=user) + utils.exec_cmd("service clamav-freshclam start") + else: + utils.exec_cmd("freshclam", sudo_user=user) diff --git a/modoboa_installer/scripts/dovecot.py b/modoboa_installer/scripts/dovecot.py index 3cfab68..7e957f3 100644 --- a/modoboa_installer/scripts/dovecot.py +++ b/modoboa_installer/scripts/dovecot.py @@ -33,6 +33,13 @@ class Dovecot(base.Installer): """Additional packages.""" return self.packages + ["dovecot-{}".format(self.db_driver)] + def install_packages(self): + """Preconfigure Dovecot if needed.""" + if utils.dist_name() == "ubuntu": + utils.preconfigure_package( + "dovecot-core", "create-ssl-cert", "boolean", "false") + super(Dovecot, self).install_packages() + def get_template_context(self): """Additional variables.""" context = super(Dovecot, self).get_template_context() diff --git a/modoboa_installer/scripts/postfix.py b/modoboa_installer/scripts/postfix.py index 382a19f..f6a3899 100644 --- a/modoboa_installer/scripts/postfix.py +++ b/modoboa_installer/scripts/postfix.py @@ -21,8 +21,8 @@ class Postfix(base.Installer): def install_packages(self): """Preconfigure postfix package installation.""" - cfg = "postfix postfix/main_mailer_type select No configuration" - utils.exec_cmd("echo '{}' | debconf-set-selections".format(cfg)) + utils.preconfigure_package( + "postfix", "main_mailer_type", "select", "No configuration") super(Postfix, self).install_packages() def get_template_context(self): @@ -51,9 +51,12 @@ class Postfix(base.Installer): extensions = self.config.get("modoboa", "extensions") exts_with_maps = ["modoboa-admin", "modoboa-admin-relaydomains", "modoboa-postfix-autoreply"] - extensions = [ext for ext in exts_with_maps if ext in extensions] - if not extensions: - return + if extensions == "all": + extensions = exts_with_maps + else: + extensions = [ext for ext in exts_with_maps if ext in extensions] + if not extensions: + return cmd = ( "{} {} postfix_maps --dbtype {} --extensions {} --dburl {} {}" .format(python_path, script_path, self.dbengine, diff --git a/modoboa_installer/utils.py b/modoboa_installer/utils.py index 6050041..7f6be90 100644 --- a/modoboa_installer/utils.py +++ b/modoboa_installer/utils.py @@ -4,6 +4,7 @@ import contextlib import datetime import glob import os +import platform import shutil import string import subprocess @@ -66,6 +67,18 @@ def exec_cmd(cmd, sudo_user=None, pinput=None, **kwargs): return process.returncode, output +def dist_name(): + """Try to guess the distribution name.""" + name, version, _id = platform.linux_distribution() + return "unknown" if not name else name.lower() + + +def preconfigure_package(name, question, qtype, answer): + """Pre-configure a package before installation.""" + line = "{0} {0}/{1} {2} {3}".format(name, question, qtype, answer) + exec_cmd("echo '{}' | debconf-set-selections".format(line)) + + def install_system_package(name, update=False): """Install a package system-wide.""" if update: