INI files & precedence
Below the host-level .cnf files sit two INI templates a tenant can edit without
root: the per-platform boa_platform_control.ini and the per-site
boa_site_control.ini. They are parsed by the global PHP includes a Drupal or
Backdrop site's settings.php loads, not sourced as bash: the Backdrop settings
include (global-bd.inc) is a chain head of the same shape as the per-core Drupal
ones and runs the same partials, so every variable a Drupal site honours at request
time is honoured on Backdrop too, with the Backdrop-specific readings noted per
variable below and in the templates. Grav capsules and Textpattern sites and
platforms carry neither file: no Verify, nightly or Solr pass seeds one there, the
tasks and the nightly remove the copies earlier releases left, and their
runtimes never parse one. This page is the precedence reference — who wins when more
than one layer sets the same value.
Where the INI files live
sites/all/modules/boa_platform_control.ini (per Drupal or Backdrop platform)
sites/<domain>/modules/boa_site_control.ini (per Drupal or Backdrop site)
On Drupal and Backdrop you do not have to create either file: the nightly writes both when they are
missing, so a deleted one comes back the next night. The platform file is a full
copy of the shipped template; the site file is a short active INI with one line
per setting, and the documented template is dropped beside it as
default.boa_site_control.ini (the platform template likewise as
default.boa_platform_control.ini). Every line starts commented out except the
few BOA's own module detections switch on (advagg_auto_configuration,
allow_private_file_downloads, auto_detect_domain_access_integration,
auto_detect_facebook_integration). Uncomment the lines you want to change in
the live file. The templates live in the BOA tree at aegir/conf/ini/.
The templates are self-documenting — each settable variable is listed commented out, with its system default shown, so you see what you are overriding before you commit. The platform template exposes 35 settable variables and the site template 34 (the templates are authoritative; read them for the exact current set).
The four layers, narrowest to broadest
1. boa_site_control.ini (per site)
overrides
2. boa_platform_control.ini (per Drupal platform)
overrides
3. /root/.${USER}.octopus.cnf (per Octopus instance)
overrides
4. /root/.barracuda.cnf (host-wide)
Site INI is the narrowest scope (one site) and wins over everything.
barracuda.cnf is the broadest scope and the bedrock — every default ultimately
comes from here, by way of the compiled-in defaults below.
| Layer | File | Who can edit |
|---|---|---|
| Site INI | sites/<domain>/modules/boa_site_control.ini |
Tenant + operator |
| Platform INI | sites/all/modules/boa_platform_control.ini |
Platform owner + operator |
| Octopus cnf | /root/.o1.octopus.cnf etc. |
Root operator only |
| Barracuda cnf | /root/.barracuda.cnf |
Root operator only |
A tenant logged into their Octopus shell can edit site + platform INI for sites
they own; they cannot touch the host-level .cnf files.
Where defaults come from
BOA's compiled-in defaults live in aegir/conf/global/global.inc and
global-ini.inc. For example session_cookie_ttl defaults to 86400 seconds
(24 h) in both global.inc and global-ini.inc; the INI template shows that
default in a comment so you see "the system default is 86400" before deciding
whether to override.
global.inc / global-ini.inc (BOA compiled-in default)
overridden by, if set:
barracuda.cnf / octopus.cnf (host + instance)
overridden by, if set:
boa_platform_control.ini
overridden by, if set:
boa_site_control.ini
Each layer is optional — if boa_platform_control.ini does not exist, the chain
skips it.
Effective compiled-in default vs template comment. A handful of template entries (
auto_detect_domain_access_integration,auto_detect_facebook_integration) showFALSEin the template but ship a compiled-in runtime default ofTRUEinglobal-ini.incfor backward compatibility, annotated there as slated to flip toFALSEin a later release. The template comment documents the intended default; the live default is whatglobal-ini.incsets. Where they differ, the compiled-in value wins until you set the variable explicitly.
Refresh timing
| Layer | Effect picks up |
|---|---|
| barracuda.cnf | On next barracuda upgrade (plus a few read by per-minute cron) |
| octopus.cnf | On next octopus upgrade for this instance |
| Platform INI | ~60 s (opcache TTL), or immediately for .dev. URLs |
| Site INI | ~60 s (opcache TTL), or immediately for .dev. URLs |
INI changes are deliberately fast — they are the layer tenants use for quick
adjustments. .cnf changes need a full upgrade cycle because they affect
host-level behaviour BOA validates holistically.
The _SQL_CONVERT=YES forcing exception
Most of the chain is a plain default-override: the narrower layer supplies a value
only if it is set, otherwise the broader layer's value stands. The DB-conversion
control is the exception. When _SQL_CONVERT=YES (or innodb) is set on the
Octopus instance, the per-platform / per-site sql_conversion_mode INI variable
is ignored entirely and InnoDB conversion is forced regardless. Here the
host-level setting is a forcing override rather than a default — see
octopus.cnf.
Notable INI variables
The templates group their variables into families. A few worth calling out, with their template-documented behaviour:
| Variable | Default | Behaviour |
|---|---|---|
session_cookie_ttl |
86400 |
session.cookie_lifetime in seconds (24 h). |
session_gc_eol |
86400 |
session.gc_maxlifetime in seconds; keep at or below the session_expire module's TTL. |
redis_flush_forced_mode |
TRUE |
Aggressive cache flush mode; Drupal 6/7 and Backdrop — the runtime gates it on $drupal_core < 8 or $backdropcms and applies it via $conf (D8+ ignores it, invalidating by cache tags instead, so no $settings are emitted); on Backdrop only the 24 h cap on permanent entries applies, the Backdrop module having no per-bin flush modes. When active it caps each cache entry at a 24 h TTL (redis_perm_ttl = 86400). Disable with FALSE if a D6/7 module relying on CACHE_PERMANENT entries WSODs on the shortened TTL. |
redis_exclude_bins |
FALSE |
Comma-separated cache bins to keep in MySQL instead of Redis (the template ships FALSE; set a comma-separated bin list to override). On Backdrop name the bins as core does, without the cache_ prefix (form, page); a leading cache_ is accepted and dropped. |
sql_conversion_mode |
NO |
innodb or myisam weekly (Tuesday) auto-conversion target; ignored when _SQL_CONVERT=YES on the Octopus. |
sql_web_max_exec_ms |
30000 |
Cap in milliseconds on a single read-only SELECT during a web request, set as max_execution_time on every web connection; CLI (Drush, cron, migrations, backups) is never capped. 0 disables it. The statement is sent in a form MariaDB ignores, so a site whose database lives on a MariaDB server needs no override; the cap simply does not apply there. |
fix_files_permissions_daily |
TRUE |
Honour the host _PERMISSIONS_FIX=YES; set FALSE to skip permission reset on Git-managed monolithic platforms. |
disable_admin_dos_protection |
FALSE |
At the default FALSE, anonymous requests to /admin* are redirected to the site homepage — admin URLs are never cached and always hit Drupal directly, which blunts DoS attempts. Set TRUE to allow anonymous access to /admin* (showing only the 403 Access Denied page); use this if an expired session/cookie keeps redirecting logged-in users to the homepage. |
allow_anon_node_add |
FALSE |
Allow anonymous access to node/add (also opens node edit); the default FALSE redirects to the homepage. |
The Redis/Valkey cache family is the largest — the platform template carries 15
redis_* variables, including the resilience knobs redis_connect_timeout,
redis_read_timeout, redis_backoff_ttl, redis_probe_retry,
redis_flush_apcu_on_recovery, redis_debug, and redis_debug_header. Even when
the host runs Valkey, all cache-control variables keep the stable redis_
namespace by design — the Valkey/Redis distinction exists only at the
service-binary level.
Related
barracuda.cnf— host-wide.cnflayer.octopus.cnf— per-instance.cnflayer (and the_SQL_CONVERTforcing exception).- Overview — the marker / control-file system above the INI layer.
- Reference appendix — consolidated variable index.