./configure --with-ldap --with-pam --with-sql --with-solr --with-pgsql --with-sqlite --with-mysql --with-lua
そこで依存関係をdnfでインストールします。Luaはオプションもいずれ使うだろうし、lua-*で全部入れておきます。
dnf install openldap-devel pam-devel expat-devel libpq-devel mariadb-connector-c-devel sqlite-devel lua lua-*
dnf install lua-devel --enablerepo=crb
tar xzf dovecot-2.3.20.tar.gz
cd dovecot-2.3.20/
./configure --with-ldap --with-pam --with-sql --with-solr --with-pgsql --with-sqlite --with-mysql --with-lua
make
make install
# サンプルをコピーするなら
cp -r /usr/local/share/doc/dovecot/example-config/* /usr/local/etc/dovecot/
# すでに動いている/etc/dovecotからコピーするなら
cp -r /etc/dovecot/* /usr/local/etc/dovecot/
mail_plugins = $mail_plugins quota mail_lua notify push_notification push_notification_lua
plugin {
  push_notification_driver = lua:file=/home/vmb/dovecot-push.lua
  push_notification_driver2 = dlog
}
virtualドメインのユーザはvmbで動かしているので、/home/vmbに取り合えずluaファイルを(実行権限を付けて)置きます。
#!/usr/bin/lua
os.execute("/usr/bin/php /home/vmb/dovecot-push.php");
Luaの使えない私は、PHPを呼び出して動くかどうかを見ます。
<?php
$str = print_r($_SERVER, 1);
file_put_contents(__DIR__."/push.log", $str, LOCK_EX);
echo $str;
ここでdovecotを起動・またはリロードします。
# 起動
/usr/local/sbin/dovecot
# リロード
/usr/local/sbin/dovecot reload
RoundCubeでフォルダの購読をオンオフ等してみて、/home/vmb/push.logが出来れば取り合えず動いている事が確認出来ます。出力は以下のようになりました。
Array
(
    [PROCESS_MIN_AVAIL] => 0
    [DOVECOT_CHILD_PROCESS] => 1
    [SOCKET0_SETTINGS] => imap
    [SOCKET_COUNT] => 2
    [LOG_DEBUG] => 
    [STATS_WRITER_SOCKET_PATH] => /usr/local/var/run/dovecot/stats-writer
    [CONFIG_FILE] => /usr/local/var/run/dovecot/config
    [PWD] => /var/spool/mail/vhosts/virtual.localdomain/aikawa
    [LOG_SERVICE] => 1
    [SERVICE_COUNT] => 1
    [GENERATION] => 35
    [PROCESS_LIMIT] => 1024
    [SERVICE_NAME] => imap
    [DOVECOT_HOSTDOMAIN] => localhost
    [CLIENT_LIMIT] => 1
    [IDLE_KILL] => 60
    [RESTRICT_SETEXTRAGROUPS] => 97
    [DOVECOT_HOSTNAME] => localhost.localdomain
    [SHLVL] => 0
    [DOVECOT_VERSION] => 2.3.20
    [SOCKET1_SETTINGS] => imap-master
    [DOVECOT_PRESERVE_ENVS] => TZ CORE_OUTOFMEM CORE_ERROR
    [_] => /usr/bin/php
    [PHP_SELF] => /home/vmb/dovecot-push.php
    [SCRIPT_NAME] => /home/vmb/dovecot-push.php
    [SCRIPT_FILENAME] => /home/vmb/dovecot-push.php
    [PATH_TRANSLATED] => /home/vmb/dovecot-push.php
    [DOCUMENT_ROOT] => 
    [REQUEST_TIME_FLOAT] => 1674196790.2264
    [REQUEST_TIME] => 1674196790
    [argv] => Array
        (
            [0] => /home/vmb/dovecot-push.php
        )
    [argc] => 1
)
タグ: Dovecot