Files
bongo/docs/directory-layout.md
Mario Fetka d297844207
Debian Trixie package bundle / packages (push) Successful in 22m14s
config: make alias sources Store authoritative
2026-07-27 21:56:27 +02:00

95 lines
4.7 KiB
Markdown

# Directory layout
Bongo follows FHS-style paths for distribution installs. Configure a package
build with `CMAKE_INSTALL_PREFIX=/usr`; CMake then deliberately keeps host
configuration under `/etc`, not `/usr/etc`.
## Distribution installation
| Path | Contents |
| --- | --- |
| `/etc/bongo` | Administrator-managed configuration and protected key directories. |
| `/etc/bongo/config.d` | Suffixless JSON mirrors for every operative Store configuration document. |
| `/etc/bongo/aliases.d` | Editable mirror of the Store-authoritative, mergeable suffixless alias and virtual-domain fragments. |
| `/etc/bongo/ssl.d` | TLS certificates and private keys managed by setup or an ACME deploy hook. |
| `/etc/bongo/dkim.d` | Per-domain DKIM keys and related material. |
| `/etc/bongo/dmarc.d` | DMARC setup state and report-processing policy. |
| `/etc/bongo/acme.d` | Root-owned ACME DNS-provider credentials and policy. |
| `/etc/bongo/migration-backup` | Files consumed by an explicit one-time legacy migration. |
| `/var/lib/bongo` | Persistent Bongo state. |
| `/var/lib/bongo/users` | Per-user stores and message documents. |
| `/var/lib/bongo/system` | System Store and Store configuration documents. |
| `/var/lib/bongo/spool` | Queue spool. |
| `/var/lib/bongo/dbf` | Account database, random seed, protocol parameters, and runtime credentials. |
| `/var/lib/bongo/web` | Web session, task, and identity databases. |
| `/var/lib/bongo/work` | Persistent diagnostics, traces, and recovery data. |
| `/var/lib/bongo/cache` | Regenerable caches. |
| `/var/spool/bongo/maildrop` | Protected setgid hand-off for unprivileged local mail submission. |
| `/run/bongo` | Volatile PID and agent recovery files. |
| `/usr/sbin` | Server agents and administration programs. |
| `/usr/libexec/bongo` | Private administration helpers. |
| `/usr/share/bongo` | Web assets, providers, zone snapshot, templates, and examples. |
| `/usr/share/man` | Manual pages. |
| `/usr/lib/systemd/system` | systemd service unit. |
| `/usr/lib/tmpfiles.d` | Runtime-directory declaration. |
| `/usr/lib/sysusers.d` | Distribution-neutral service account declaration. |
| `/etc/fail2ban` | Bongo filter and disabled jail template, when enabled at build time. |
Distribution packaging may override the systemd, tmpfiles, sysusers, and
Fail2ban destinations with the documented CMake cache variables.
## Other prefixes
A self-contained install with `CMAKE_INSTALL_PREFIX=/usr/local` uses
`/usr/local/etc/bongo`. Executables, data, and libraries follow the selected
prefix, while persistent state remains `/var/lib/bongo` unless
`BONGO_STATE_DIR` is explicitly changed.
Useful configure-time overrides include:
```sh
cmake -S . -B build \
-DCMAKE_INSTALL_PREFIX=/opt/bongo \
-DSYSCONF_INSTALL_DIR=/etc \
-DBONGO_CONFIG_DIR=/etc/bongo \
-DBONGO_STATE_DIR=/srv/bongo \
-DBONGO_RUNTIME_DIR=/run/bongo \
-DBONGO_MAILDROP_DIR=/var/spool/bongo/maildrop
```
Absolute paths are compiled into agents and generated service/configuration
files. Do not move an installed state tree without reconfiguring and rebuilding
or supplying matching package overrides.
## Runtime directories
Packages should not ship a populated `/var/run` or `/run` tree.
systemd-tmpfiles or the service script creates `/run/bongo` at boot.
Persistent empty directories below `/var/lib/bongo` and the protected local
submission path below `/var/spool/bongo` are created during setup or package
installation with the appropriate owner.
TLS, DKIM, DMARC and SRS material below `/etc/bongo` must be included in backup
and permission reviews. ACME deployments may point configuration at paths
managed by their deploy hook instead. Runtime credentials required to access
the Store remain protected state below `/var/lib/bongo`.
## Package removal and upgrades
Distribution upgrades and same-version reinstalls preserve all
administrator-created configuration and key material below `/etc/bongo` and
all persistent mail, Store, queue, account, Web, and worker state below
`/var/lib/bongo`. Accepted local submissions below `/var/spool/bongo` are
preserved as well.
On Debian, a normal package removal deletes Bongo programs and service units
but retains package-owned conffiles as well as both Bongo trees. A purge also
deletes the package-owned Fail2ban filter and disabled jail template. It still
does **not** delete `/etc/bongo` or `/var/lib/bongo`: destroying keys, server
configuration, queued messages, or user mail as a side effect of package
removal would be unsafe. The same rule applies to `/var/spool/bongo`. Remove
these trees explicitly only after making and verifying any required backup.
`/run/bongo` contains no persistent state. Its contents can remain until the
next boot after a package removal and must never be relied upon for recovery.