gromox — overview of the Gromox groupware server
Gromox is a groupware server capable of serving as a replacement for Microsoft Exchange. Connectivity options include RPC/HTTP (Outlook Anywhere), IMAP, POP3, an SMTP-speaking LDA, and a PHP module with a Z-MAPI function subset.
Gromox relies on other components to provide a sensibly complete mail system, such as Postfix as a mail transfer agent, and grommunio-admin for user management. A web interface is available with grommunio-web. The grommunio distribution ships these essentials and has a ready-to-run installation of Gromox. system.
Program configuration files reside within /etc/gromox. Most of the programs have a config_file_path directive with which the search path for further config files can be specified. For example, http(8gx) defaults to config_file_path=/etc/gromox/http:/etc/gromox, so the mysql_adaptor(4gx) plugin as loaded by http will first try /etc/gromox/http/mysql_adaptor.cfg, then /etc/gromox/mysql_adaptor.cfg. This allows having one file that is shared between multiple programs as well as being able to override on a per program-basis.
User information is held in a MariaDB/MySQL database. This database can be accessed by multiple Gromox servers, and so enables distributed Gromox operation. The MariaDB system itself provides the necessary utilities for distributing or replicating this database.
Per-user e-mail messages are stored in a SQLite database (e.g. /var/lib/gromox/user/m1/1/1/exchange.sqlite3), as is a message index (e.g. /var/lib/gromox/user/m1/1/1/midb.sqlite3). These are normally only used by one system, but can be shared through network filesystems provided that file locking is properly implemented in the filesystem driver. Normal file mechanisms can be used to backup or transfer the database to another Gromox host.
mapi(7gx) — Definition for “Messaging Application Programming Interface”
autodiscover(4gx) — Autodiscover HTTP Service Protocol handler
exchange_emsmdb(4gx) — http(8gx) processing plugin for the Wire Format Protocol (Outlook/Exchange RPCs).
exchange_nsp(4gx) — http(8gx) processing plugin for the Exchange Server Name Service Provider Interface Protocol.
exchange_rfr(4gx) — http(8gx) processing plugin for the Address Book Name Service Provider Interface Referral Protocol.
exmdb_provider(4gx) — http(8gx) service plugin for exmdb connections
freebusy(8gx) — Helper program for the EWS Freebusy mechanism
mod_cache(4gx) — http(8gx) processing plugin for serving objects from a local filesystem
mod_fastcgi(4gx) — http(8gx) processing plugin for proxying requests to FastCGI servers
mod_rewrite(4gx) — http(8gx) processing plugin for altering HTTP request URIs before processing
mh_emsmdb(4gx) — MAPI-HTTP processor for EMSMDB
mh_nsp(4gx) — MAPI-HTTP processor for NSPI
timer(8gx) — deferred command executor
rtf2html(1gx) — C++ helper program for the mapi(4gx) mapi_decompressrtf function
zcore(8gx) — Bridge for PHP-MAPI requests
Mail retrieval agent subsystem¶
imap(8gx) — IMAP server
midb_agent(4gx) — Service plugin for conversing with midb(8gx)
pop3(8gx) — POP3 server
Local delivery agent¶
alias_translator(4gx) — Alias resolution plugin for delivery(8gx)
delivery(8gx) — Backend for local delivery
delivery-queue(8gx) — LMTP/SMTP frontend for local delivery
domain_list(4gx) — instance of str_table(4gx)
message_enqueue(4gx) — Message enqueueing flusher plugin for delivery-queue(8gx)
str_table(4gx) — string table match plugin
user_filter(4gx) — Service plugin for application of user login limits
pam_gromox(8gx) — a PAM plugin to authenticate with Gromox
rtf2html(1gx) — C++ helper for php_mapi’s mapi_decompressrtf function
adaptor(8gx) — SQL data cache generator
event(8gx) — Folder change notification daemon
midb(8gx) — Message Index database daemon
gromox-abktconv(8gx) — Utility for converting between ABKT and JSON
gromox-abktpull(8gx) — Utility to extract ABKT templates from LDIF
gromox-dbop(8gx) — Database maintenance utility
gromox-kdb2mt(8gx) — Utility for analysis of Kopano databases
gromox-mailq(8gx) — SMTP queue lister
gromox-mt2exm(8gx) — Utility for bulk-importing mail items into a Gromox store
gromox-pff2mt(8gx) — Utility for analysis of PFF/PST/OST files
mkmidb(8gx) — Tool for creating a blank message index database
mkprivate(8gx) — Tool for creating a blank private store
mkpublic(8gx) — Tool for creating a blank public store
rebuild(8gx) — Tool for rebuilding a message store
sa.cfg(5gx) — configuration file for system administration CGI programs
at_client(4gx) — Service plugin for deferred command execution with at(1)
authmgr(4gx) — Demultiplexer for authentication requests
ip6_container(4gx) — trivial source connection counter
ldap_adaptor(4gx) — LDAP connector for authentication
logthru(4gx) — service plugin for a stdout/file logger
mysql_adaptor(4gx) — MySQL/MariaDB connector for user metadata and authentication
textmaps(4gx) — Service plugin for various data maps
timer_agent(4gx) — Service plugin for deferred command execution with timer(8gx)
Past commands that have been removed¶
The following is a list of programs that no longer exist. It is inteded solely to capture keyword searches within the documentation for said obsolete/removed commands.
gromox-pffimport — replaced by gromox-pff2mt and gromox-mt2exm.
mapi(4gx) — PHP module providing MAPI functions
/run/gromox/zcore.sock — zcore(8gx)
*:24 — delivery-queue(8gx) LMTP/SMTP service (when Postfix is on 25)
:*25 — Normally, your own MTA (postfix(1), exim(8), whatever the case may be). delivery-queue(8gx) will only be on 25 in developer setups that wish to cut and skip Postfix/etc. to get a simpler test setup.
*:80 — http(8gx) HTTP service
*:110 — pop3(8gx) POP3 service
*:143 — imap(8gx) IMAP service
*:443 — http(8gx) HTTP over implicit TLS
*:993 — imap(8gx) IMAP over implicit TLS
*:995 — pop3(8gx) POP3 over implicit TLS
[::1]:3344 — zcore(8gx) management console
[::1]:4455 — imap(8gx) management console
[::1]:5000 — exmdb_provider(4gx) plugin inside http(8gx)
[::1]:5555 — midb(8gx) service
[::1]:5566 — delivery-queue(8gx) management console
[::1]:6666 — timer(8gx) service
[::1]:7788 — pop3(8gx) management console
[::1]:8899 — http(8gx) management console
[::1]:9900 — midb(8gx) management console
[::1]:22222 — pad(8gx) service
[::1]:33333 — event(8gx) service
The exact paths depend on the options used when Gromox’s build was configured. Especially the path for libraries, represented in this documentation as /usr/lib/gromox, may for example actually be /usr/lib64/gromox or /usr/lib/riscv64-linux-gnu, depending on the platform.
/usr/lib/gromox/libgxf_*.so: flusher plugins for delivery-queue(8gx)
/usr/lib/gromox/libgxh_*.so: HTTP processing plugins for http(8gx)
/usr/lib/gromox/libgxm_*.so: hook plugins for delivery(8gx)
/usr/lib/gromox/libgxp_*.so: PDU processing plugins for http(8gx)
/usr/lib/gromox/libgxs_*.so: service plugins
/var/lib/gromox/user: directory hierarchy for private mailboxes
- /var/lib/gromox/domain: directory hierarchy for public mailboxes (public folders)It is presently not possible to use a single directory for both mailbox types, since exmdb_list.txt uses the infix to determine the mode of access.
- …/user/account@domain: individual mailbox containerThe directory name has no required form. It is entirely dependent upon the users.maildir column in MySQL. Some implementations of user management use a 2-level hierarchy, e.g. /user/1/0.
…/a@d/exmdb/exchange.sqlite3: mail store with almost everything (no mail bodies)
…/a@d/cid/: attachments and message bodies (PR_BODY, PR_HTML, PR_RTF_COMPRESSED).
- …/a@d/eml/mid_string: RFC 5322 representation for a message.mid_string has no required form. Typically, there is timestamp.seqid.hostname which represents EMLs captured by delivery(8gx) on ingestion, and timestamp.seqid.midb for EMLs generated by midb(8gx) out of MAPI messages.
- …/a@d/ext/mid_string: Digest for the RFC 5322 file.This JSON-encoded file contains e.g. indexing information for individual MIME parts of the RFC 5322 representation. Generated by midb(8gx).