diff --git a/cmdeploy/src/cmdeploy/__init__.py b/cmdeploy/src/cmdeploy/__init__.py index 215f3c19..c47a24c4 100644 --- a/cmdeploy/src/cmdeploy/__init__.py +++ b/cmdeploy/src/cmdeploy/__init__.py @@ -371,6 +371,23 @@ def _configure_dovecot(config: Config, debug: bool = False) -> bool: commands=["/usr/bin/sievec /etc/dovecot/default.sieve"], ) + files.template( + src=importlib.resources.files(__package__).joinpath("service/expunge.service.j2"), + dest="/etc/systemd/system/expunge.service", + config={ + "mail_domain": config.mail_domain, + "delete_mails_after": config.delete_mails_after, + }, + **root_owned, + ) + + files.put( + name="Upload expunge.timer", + src=importlib.resources.files(__package__).joinpath("service/expunge.timer"), + dest=f"/etc/systemd/system/metrics.timer", + **root_owned, + ) + files.template( src=importlib.resources.files(__package__).joinpath("dovecot/expunge.cron.j2"), dest="/etc/cron.d/expunge", @@ -542,6 +559,7 @@ def deploy_chatmail(config_path: Path) -> None: "systemctl reset-failed unbound.service", ], ) + systemd.service( name="Start and enable unbound", service="unbound.service", diff --git a/cmdeploy/src/cmdeploy/service/expunge.service.j2 b/cmdeploy/src/cmdeploy/service/expunge.service.j2 new file mode 100644 index 00000000..85d098eb --- /dev/null +++ b/cmdeploy/src/cmdeploy/service/expunge.service.j2 @@ -0,0 +1,15 @@ +[Unit] +Description=Expunge old mails after {{ config.delete_mails_after }} days + +[Service] +# delete all mails after {{ config.delete_mails_after }} days, in the Inbox +ExecStart={{ config.execpath }} /home/vmail/mail/{{ config.mail_domain }} > /var/www/html/metrics +# or in any IMAP subfolder +ExecStart=vmail find /home/vmail/mail/{{ config.mail_domain }} -path '*/.*/cur/*' -mtime +{{ config.delete_mails_after }} -type f -delete +# even if they are unseen +ExecStart=vmail find /home/vmail/mail/{{ config.mail_domain }} -path '*/new/*' -mtime +{{ config.delete_mails_after }} -type f -delete +ExecStart=vmail find /home/vmail/mail/{{ config.mail_domain }} -path '*/new/*' -mtime +{{ config.delete_mails_after }} -type f -delete +# or only temporary (but then they shouldn't be around after {{ config.delete_mails_after }} days anyway). +ExecStart=vmail find /home/vmail/mail/{{ config.mail_domain }} -path '*/tmp/*' -mtime +{{ config.delete_mails_after }} -type f -delete +ExecStart=vmail find /home/vmail/mail/{{ config.mail_domain }} -path '*/.*/tmp/*' -mtime +{{ config.delete_mails_after }} -type f -delete +ExecStart=vmail find /home/vmail/mail/{{ config.mail_domain }} -name 'maildirsize' -type f -delete diff --git a/cmdeploy/src/cmdeploy/service/expunge.timer b/cmdeploy/src/cmdeploy/service/expunge.timer new file mode 100644 index 00000000..4cd53c3e --- /dev/null +++ b/cmdeploy/src/cmdeploy/service/expunge.timer @@ -0,0 +1,9 @@ +[Unit] +Description=Run expunge.service daily + +[Timer] +OnCalendar=weekly +Persistent=true + +[Install] +WantedBy=timers.target diff --git a/cmdeploy/src/cmdeploy/service/metrics.service.j2 b/cmdeploy/src/cmdeploy/service/metrics.service.j2 index ee7b8e37..c555bfe2 100644 --- a/cmdeploy/src/cmdeploy/service/metrics.service.j2 +++ b/cmdeploy/src/cmdeploy/service/metrics.service.j2 @@ -1,5 +1,5 @@ [Unit] -Description=Generate metrics in /var/www/html/metrics every 5 minutes +Description=Generate metrics in /var/www/html/metrics [Service] ExecStart={{ config.execpath }} /home/vmail/mail/{{ config.mail_domain }} > /var/www/html/metrics diff --git a/cmdeploy/src/cmdeploy/service/metrics.timer b/cmdeploy/src/cmdeploy/service/metrics.timer index 99bffe48..4d013a3b 100644 --- a/cmdeploy/src/cmdeploy/service/metrics.timer +++ b/cmdeploy/src/cmdeploy/service/metrics.timer @@ -1,5 +1,5 @@ [Unit] -Description=Generate metrics in /var/www/html/metrics every 5 minutes +Description=Run metrics.service every 5 minutes [Timer] OnBootSec=5min