Hanns Mattes via dovecot <dovecot@dovecot.org> wrote

> Sorry,
> 
> this was aimed to the german list.

I would have answered in English anyway ;-)

> But feel free to answer - any hint appreciated :-)
> 
> Am 26.01.25 um 16:37 schrieb Hanns Mattes via dovecot:
>> Hei,
>> mit 2.4 verschwindet ja, wenn ich das richtig verstanden habe, die
>> Replication aus dem Werkzeugkasten von Dovecot. Obwohl ich nur ein recht
>> kleines System mit etwa 500 Nutzern betreibe fand ich die Replication
>> als ziemlich beruhigend :-)
>> Meine Frage in die Runde: Wie wollt Ihr die Replikation ersetzen?

How to replace replication?

Yeah, that's what I am currently investigating, and I do have a crude proof of 
concept which needs more thorough testing, though.

BTW: I do have only 5 users ;-)

Concept:

1) every user needs a sieve script starting with:

        require ["vnd.dovecot.execute"]; # add all your other requiries ...
        # replication with doveadm sync …
        execute "_REPLICATE" "test-replication";

2) dovecot.conf:

        # home-brewn replication
        sieve_extensions = +vnd.dovecot.execute
        sieve_plugins = sieve_extprograms
        sieve_execute_bin_dir = /any/path/to/your/script
        sieve_extension_exec_timeout = 1s

3) script /any/path/to/your/script/_REPLICATION (sorry its csh)

        #!/bin/csh

        set LOGGER = "/usr/bin/logger -p mail.info -t replication"

        if ( $#argv != 1 ) then
                echo "missing user in $0" | ${LOGGER}
        exit 1
        endif

        set USER = $argv[1]
        set DOVEADM = "/usr/local/bin/doveadm"
        set DELAY = "1"                         # this will give sieve time to 
finalise before synchronising
        set LOCK = "1"
        set TIMEOUT = "30"
        set PORT = "12345"                      # see doveadm service in 
dovecot.conf
        set DESTINATION = "my.destination.server"

        # immediately spawn this script to let sieve continue ist work and 
store that mail accordingly
        # otherwise synchronisation will come before storage

        ( sleep ${DELAY} ; ${DOVEADM} sync -P -l ${LOCK}  -T ${TIMEOUT} -u 
${USER} tcp:${DESTINATION}:${PORT} ) |& ${LOGGER} &
        exit 0


This will replicate all incoming mails, even those incoming simultaneously at 
both servers. 
(But I haven't tested it with huge numbers of mails, yet)


4) This doesn't trigger modified IMAP flags, deletions, and such. Thus I will 
add a crontab script similar to that above, that will synchronise both servers 
every minute or such.


Remarks:

#) This is FreeBSD. I am running postfix and dovecot in the same service jail

#) Both servers are connected via an ipsec tunnel. Thus I do not need to use 
ssh. But that should be easy to add.

#) I could live with 4) only, but I do now my users ;-)

#) my script needs to become much more bullet proof w.r.t. to locking, checking 
for runaway processes, and such.

#) v2.3 
https://doc.dovecot.org/2.3/configuration_manual/sieve/plugins/extprograms/

#) v2.4 https://doc.dovecot.org/2.4.0/core/plugins/sieve_extprograms.html


I am testing this on both of my servers with active replication with dovecot 
2.3.21.1. 
Thus needed to disable replication for test user "test-replication", though.


Again, this is just an initial concept that needs further testing and 
investigation [1]


HTH and regards,
Michael


[1] how could one tell an listening daemon about modifications of IMAP flags 
... ? 

















_______________________________________________
dovecot mailing list -- dovecot@dovecot.org
To unsubscribe send an email to dovecot-le...@dovecot.org

Reply via email to