Skip to content

Powered by Grav

INI files & precedence

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

TXT
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

TXT
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.

TXT
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) show FALSE in the template but ship a compiled-in runtime default of TRUE in global-ini.inc for backward compatibility, annotated there as slated to flip to FALSE in a later release. The template comment documents the intended default; the live default is what global-ini.inc sets. 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.

© 2026 BOA Documentation. All rights reserved.