Files
modoboa-installer/modoboa_installer/scripts/amavis.py
2022-07-26 12:07:42 +02:00

109 lines
3.9 KiB
Python

"""Amavis related functions."""
import os
from .. import package
from .. import utils
from . import base
from . import install
class Amavis(base.Installer):
"""Amavis installer."""
appname = "amavis"
packages = {
"deb": [
"libdbi-perl", "amavisd-new", "arc", "arj", "cabextract",
"liblz4-tool", "lrzip", "lzop", "p7zip-full", "rpm2cpio",
"unrar-free",
],
"rpm": [
"amavisd-new", "arj", "lz4", "lzop", "p7zip",
],
}
with_db = True
@property
def config_dir(self):
"""Return appropriate config dir."""
if package.backend.FORMAT == "rpm":
return "/etc/amavisd"
return "/etc/amavis"
def get_daemon_name(self):
"""Return appropriate daemon name."""
if package.backend.FORMAT == "rpm":
return "amavisd"
return "amavis"
def get_config_files(self):
"""Return appropriate config files."""
if package.backend.FORMAT == "deb":
amavisCustomConf = self.restore + "custom/99-custom"
if self.restore and os.path.isfile(amavisCustomConf):
utils.printcolor("Restoring custom Amavis configuration", utils.MAGENTA)
utils.copy_file(amavisCustomConf, self.config_dir)
return [
"conf.d/05-node_id", "conf.d/15-content_filter_mode",
"conf.d/50-user"]
return ["amavisd.conf"]
def get_packages(self):
"""Additional packages."""
packages = super(Amavis, self).get_packages()
if package.backend.FORMAT == "deb":
db_driver = "pg" if self.db_driver == "pgsql" else self.db_driver
return packages + ["libdbd-{}-perl".format(db_driver)]
if self.db_driver == "pgsql":
db_driver = "Pg"
elif self.db_driver == "mysql":
db_driver = "MySQL"
else:
raise NotImplementedError("DB driver not supported")
packages += ["perl-DBD-{}".format(db_driver)]
name, version = utils.dist_info()
if version.startswith('7'):
packages += ["cabextract", "lrzip", "unar", "unzoo"]
elif version.startswith('8'):
packages += ["perl-IO-stringy"]
return packages
def get_sql_schema_path(self):
"""Return schema path."""
if self.restore:
utils.printcolor("Trying to restore amavis database from backup", utils.MAGENTA)
amavisDbBackupPath = self.restore + "databases/amavis.sql"
if os.path.isfile(amavisDbBackupPath):
utils.printcolor("Amavis database backup found ! Restoring...", utils.GREEN)
return amavisDbBackupPath
utils.printcolor("Amavis database backup not found, creating empty database", utils.RED)
version = package.backend.get_installed_version("amavisd-new")
if version is None:
# Fallback to amavis...
version = package.backend.get_installed_version("amavis")
if version is None:
raise utils.FatalError("Amavis is not installed")
path = self.get_file_path(
"amavis_{}_{}.sql".format(self.dbengine, version))
if not os.path.exists(path):
version = ".".join(version.split(".")[:-1]) + ".X"
path = self.get_file_path(
"amavis_{}_{}.sql".format(self.dbengine, version))
if not os.path.exists(path):
raise utils.FatalError("Failed to find amavis database schema")
return path
def pre_run(self):
"""Tasks to run first."""
with open("/etc/mailname", "w") as fp:
fp.write("{}\n".format(self.config.get("general", "hostname")))
def post_run(self):
"""Additional tasks."""
install("spamassassin", self.config, self.upgrade)
install("clamav", self.config, self.upgrade)