Few fixes

This commit is contained in:
Antoine Nguyen
2022-11-08 17:19:23 +01:00
parent 2b5edae5d5
commit 8b1d60ee59
5 changed files with 29 additions and 19 deletions

View File

@@ -102,7 +102,7 @@ class Amavis(base.Installer):
if os.path.isfile(amavis_custom): if os.path.isfile(amavis_custom):
utils.copy_file(amavis_custom, path) utils.copy_file(amavis_custom, path)
utils.success("Amavis custom configuration saved!") utils.success("Amavis custom configuration saved!")
backup("spamassassin", path) backup("spamassassin", self.config, os.path.dirname(path))
def restore(self): def restore(self):
"""Restore custom config files.""" """Restore custom config files."""

View File

@@ -161,6 +161,10 @@ class Installer(object):
custom_backup_path = os.path.join(path, "custom") custom_backup_path = os.path.join(path, "custom")
self.custom_backup(custom_backup_path) self.custom_backup(custom_backup_path)
def custom_backup(self, path):
"""Override this method in subscripts to add custom backup content."""
pass
def restore(self): def restore(self):
"""Restore from a previous backup.""" """Restore from a previous backup."""
pass pass

View File

@@ -137,28 +137,30 @@ class Dovecot(base.Installer):
def backup(self, path): def backup(self, path):
"""Backup emails.""" """Backup emails."""
home_dir = self.config.get("dovecot", "home_dir")
utils.printcolor("Backing up mails", utils.MAGENTA) utils.printcolor("Backing up mails", utils.MAGENTA)
if not os.path.exists(self.home_dir) or os.path.isfile(self.home_dir): if not os.path.exists(home_dir) or os.path.isfile(home_dir):
utils.printcolor("Error backing up emails, provided path " utils.error("Error backing up emails, provided path "
f" ({self.home_dir}) seems not right...", utils.RED) f" ({home_dir}) seems not right...")
return return
dst = os.path.join(path, "mails/") dst = os.path.join(path, "mails/")
if os.path.exists(dst): if os.path.exists(dst):
shutil.rmtree(dst) shutil.rmtree(dst)
shutil.copytree(self.home_dir, dst) shutil.copytree(home_dir, dst)
utils.printcolor("Mail backup complete!", utils.GREEN) utils.success("Mail backup complete!")
def restore(self): def restore(self):
"""Restore emails.""" """Restore emails."""
home_dir = self.config.get("dovecot", "home_dir")
mail_dir = os.path.join(self.restore, "mails/") mail_dir = os.path.join(self.restore, "mails/")
if len(os.listdir(mail_dir)) > 0: if len(os.listdir(mail_dir)) > 0:
utils.success("Copying mail backup over dovecot directory.") utils.success("Copying mail backup over dovecot directory.")
if os.path.exists(self.home_dir): if os.path.exists(home_dir):
shutil.rmtree(self.home_dir) shutil.rmtree(home_dir)
shutil.copytree(mail_dir, self.home_dir) shutil.copytree(mail_dir, home_dir)
# Resetting permission for vmail # Resetting permission for vmail
for dirpath, dirnames, filenames in os.walk(self.home_dir): for dirpath, dirnames, filenames in os.walk(home_dir):
shutil.chown(dirpath, self.user, self.user) shutil.chown(dirpath, self.user, self.user)
for filename in filenames: for filename in filenames:
shutil.chown(os.path.join(dirpath, filename), shutil.chown(os.path.join(dirpath, filename),

View File

@@ -101,4 +101,4 @@ class Postfix(base.Installer):
def backup(self, path): def backup(self, path):
"""Launch postwhite backup.""" """Launch postwhite backup."""
backup("postwhite", path) backup("postwhite", self.config, path)

20
run.py
View File

@@ -64,9 +64,9 @@ def upgrade_disclaimer(config):
def backup_disclaimer(): def backup_disclaimer():
"""Display backup disclamer. """ """Display backup disclamer. """
utils.printcolor( utils.printcolor(
"Your mail server will be backed up (messages and databases) locally." "Your mail server will be backed up locally.\n"
" !! You should really transfer the backup somewhere else..." " !! You should really transfer the backup somewhere else...\n"
" Custom configuration (like to postfix) won't be saved.", utils.BLUE) " !! Custom configuration (like for postfix) won't be saved.", utils.BLUE)
def restore_disclaimer(): def restore_disclaimer():
@@ -91,7 +91,7 @@ def backup_system(config, args):
path = os.path.join(path, f"backup_{date}") path = os.path.join(path, f"backup_{date}")
else: else:
path = args.backup_path path = args.backup_path
backup_path = utils.validate_backup_path(path) backup_path = utils.validate_backup_path(path, args.silent_backup)
if not backup_path: if not backup_path:
utils.printcolor(f"Path provided: {path}", utils.BLUE) utils.printcolor(f"Path provided: {path}", utils.BLUE)
return return
@@ -104,7 +104,9 @@ def backup_system(config, args):
) )
utils.printcolor("CTRL+C to cancel", utils.MAGENTA) utils.printcolor("CTRL+C to cancel", utils.MAGENTA)
user_value = utils.user_input("-> ") user_value = utils.user_input("-> ")
backup_path = utils.validate_backup_path(user_value) if not user_value:
continue
backup_path = utils.validate_backup_path(user_value, args.silent_backup)
# Backup configuration file # Backup configuration file
utils.copy_file(args.configfile, backup_path) utils.copy_file(args.configfile, backup_path)
@@ -119,8 +121,6 @@ def main(input_args):
versions = ( versions = (
["latest"] + list(compatibility_matrix.COMPATIBILITY_MATRIX.keys()) ["latest"] + list(compatibility_matrix.COMPATIBILITY_MATRIX.keys())
) )
parser.add_argument("--backup", action="store_true", default=False,
help="Backing up interactively previously installed instance")
parser.add_argument("--debug", action="store_true", default=False, parser.add_argument("--debug", action="store_true", default=False,
help="Enable debug output") help="Enable debug output")
parser.add_argument("--force", action="store_true", default=False, parser.add_argument("--force", action="store_true", default=False,
@@ -145,6 +145,10 @@ def main(input_args):
parser.add_argument( parser.add_argument(
"--backup-path", type=str, metavar="path", "--backup-path", type=str, metavar="path",
help="To use with --silent-backup, you must provide a valid path") help="To use with --silent-backup, you must provide a valid path")
parser.add_argument(
"--backup", action="store_true", default=False,
help="Backing up interactively previously installed instance"
)
parser.add_argument( parser.add_argument(
"--silent-backup", action="store_true", default=False, "--silent-backup", action="store_true", default=False,
help="For script usage, do not require user interaction " help="For script usage, do not require user interaction "
@@ -176,7 +180,7 @@ def main(input_args):
is_config_file_available = utils.check_config_file( is_config_file_available = utils.check_config_file(
args.configfile, args.interactive, args.upgrade, args.backup, is_restoring) args.configfile, args.interactive, args.upgrade, args.backup, is_restoring)
if is_config_file_available and args.backup: if not is_config_file_available and (args.upgrade or args.backup):
utils.error("No config file found,") utils.error("No config file found,")
return return