aboutsummaryrefslogtreecommitdiffstats
path: root/docs/CONFIG.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/CONFIG.md')
-rw-r--r--docs/CONFIG.md49
1 files changed, 36 insertions, 13 deletions
diff --git a/docs/CONFIG.md b/docs/CONFIG.md
index bdc5b02..252e34d 100644
--- a/docs/CONFIG.md
+++ b/docs/CONFIG.md
@@ -3,41 +3,49 @@
This document defines the main configuration file and per-jail TOML schema.
## Main Config
+
Default locations (first found wins):
+
- `/usr/local/etc/jprov.conf`
- `/etc/jprov.conf`
Schema (TOML):
+
```toml
base_dir = "/usr/local/jails"
+jail_conf_dir = "/etc/jail.conf.d"
+log_dir = "/var/log/jprov"
[datasets]
templates_prefix = "zroot/jails/templates/"
containers_prefix = "zroot/jails/containers/"
-
-jail_conf_dir = "/etc/jail.conf.d"
-log_dir = "/var/log/jprov"
```
Notes:
+
- `base_dir` contains `templates/` and `defs/`.
- `templates_prefix` and `containers_prefix` are ZFS dataset name prefixes (must end with `/`).
- `log_dir` is where per-run logs are written.
## Per-jail Config
+
Location:
+
- `base_dir/defs/<jailname>/jprov.conf`
Schema (TOML):
+
```toml
# Required
# Relative to datasets.templates_prefix
-# Example: "RELEASE-15.0-p3" resolves to "zroot/jails/templates/RELEASE-15.0-p3"
-template = "RELEASE-15.0-p3"
+# Example: "RELEASE-15.0-p3@base" resolves to "zroot/jails/templates/RELEASE-15.0-p3@base"
+# Note: ZFS clone requires a snapshot (e.g., "@base") in the template name.
+template = "RELEASE-15.0-p3@base"
-# Required
-# Command executed inside the jail via: jexec <jailname> <cmd>
-cmd = "/bin/sh /usr/local/sbin/provision.sh"
+# Required/optional commands
+[cmds]
+# Command executed inside the jail via: jexec <jailname> <cmds.provision>
+provision = "/bin/sh /usr/local/sbin/provision.sh"
# Optional
# Overlay defaults to base_dir/defs/<jailname>/overlay/
@@ -47,10 +55,20 @@ overlay = "overlay"
[env]
FOO = "bar"
-# Optional: append raw jail.conf content
-extra_jail_conf = """
-allow.raw_sockets = 1;
-"""
+# Optional: structured jail.conf entries
+[jailconf]
+vnet = true
+persist = true
+exec.clean = true
+mount.devfs = true
+devfs_ruleset = 4
+allow.raw_sockets = 1
+
+# Optional: jail lifecycle scripts (become exec.* entries)
+# These are prefixed with env variables from [env] when emitted.
+prestart = "/usr/local/jails/scripts/prestart.sh"
+poststart = "/usr/local/jails/scripts/poststart.sh"
+poststop = "/usr/local/jails/scripts/poststop.sh"
# Optional: nullfs mounts
[[mounts]]
@@ -60,6 +78,11 @@ readonly = false
```
Notes:
-- `cmd` is executed as a direct command (no implicit shell wrapping); jprov only checks its exit code.
+
+- `cmds.provision` is executed as a direct command (no implicit shell wrapping); jprov only checks its exit code.
+- `[jailconf]` maps key/value pairs directly into `jail.conf` entries (no `+=` support).
+- `true` values emit `key;` (no `=`). `false` values are omitted.
+- Dotted keys are supported via TOML nesting (e.g., `exec.prestart` becomes a nested table).
+- `cmds.*` entries are emitted as `exec.*` entries and are prefixed with `env KEY=VAL` for all variables in `[env]` (unless the command already starts with `env `).
- `overlay` is copied into the jail root after it is created.
- All `mounts[*].host` paths must exist on the host and are mounted via `nullfs`.