Skip to content

Carry the .fogsettings key rename into the docs, and clear the pre-rename PR backlog - #132

Merged
darksidemilk merged 3 commits into
masterfrom
claude/fogsettings-key-rename-docs-b1i2vg
Aug 23, 2026
Merged

Carry the .fogsettings key rename into the docs, and clear the pre-rename PR backlog#132
darksidemilk merged 3 commits into
masterfrom
claude/fogsettings-key-rename-docs-b1i2vg

Conversation

@darksidemilk

Copy link
Copy Markdown
Member

FOG 1.6 (GH-1120) renamed all 79 managed .fogsettings keys to CATEGORY_lower_snake_case, leaving 66 — six retired, nine absorbed, two promoted. That change deliberately left the admin-facing docs alone ("The admin-facing fog-docs pages, and the still-stale command-line-options.md, remain a separate change"). This is that change.

Key names, flag list and behaviour all come from the shipped working-1.6 code — managedKeys/deprecatedKeys in lib/common/functions.sh, the option handlers in bin/installfog.sh — not from the plan. The plan's own Outcome section records where the two diverged.

The two pages that were asked for

docs/management/server/install-fogsettings.md — rewritten to the nine-category model. All 66 keys documented by category, each tagged preference / record / hand-set / inferred preference. That taxonomy was previously implicit; it is now explicit and stated once up front, because it is the thing that tells a reader whether a hand edit survives the next installer run. Includes why a preference and a record can never share one key, using the BOOT_url_proto bug as the worked example.

docs/installation/server/command-line-options.md — regenerated; it was still showing the pre-1.6 option list. --install-mode (with the four presets), --netboot-proto, --public-web-cert and --rebuild-ipxe-with-my-ca are all covered.

The full option block is now rendered from the installer's own --help output rather than transcribed by hand. That is what caught --no-ca-trust and --no-sb-name-constraints, both removed in 1.6 with the settings behind them, and picked up help text the page predated: -C implying --recreate-keys, -K's warning that every registered fog-client must be re-pinned, and --no-secure-boot now declining enrolment rather than signing.

Two corrections that are not renames

Some pages did not merely name retired settings — they told readers to set them, and following them now breaks a server.

The ACME instructions inverted. external-ca-lets-encrypt.md had the ACME client install certificates straight to FOG's canonical leaf paths and then set acmeLeaf=yes. Under 1.6 that produces the exact failure it was written to prevent: _externallyManagedLeaf() decides ownership by asking whether PKI_web_vhost_cert resolves outside _pkiZoneDir web, so a real file at that path reads as FOG's own and gets re-issued from the stored CSR while the ACME private key sits beside it — a mismatched pair and a web server that will not start, silently, under -y. The client now owns its own directory and the canonical paths are symlinked at it.

Relocating a certificate by editing the path. pki-zones.md did this with sed on .fogsettings. Canonical paths are recomputed every run, so that edit moves nothing.

PR backlog

Five PRs predated the rename and overlapped it.

Neither #125's nor #128's kb/how-tos/index.md was usable: both branched before #129 and would have deleted the Secure Boot section it added. The one new entry is added by hand instead.

Each closed PR carries a comment explaining what moved and why.

Verification

  • cd quartz && npm i && npm run docs:build — clean, no warnings (110 files, 954 emitted).
  • All 66/66 managed keys present, with no invented names (cross-checked against managedKeys).
  • Every internal wikilink and in-page anchor on the changed pages resolves; the deep anchors into external-ca-lets-encrypt still land.
  • Literal [[ in the built HTML held at 12, all pre-existing and unrelated — 9 are shell [[ -z $var ]] inside code blocks, 3 are old MediaWiki links in pages not touched here.
  • Retired-key sweep: every remaining hit is either a deliberate "this was renamed/removed" table row, a labelled FOG 1.5 mention, or the storage-node sslpath CSV field that ADR 0024 explicitly excludes (it is that endpoint's own field name mapping to a storageNode column).

One trap worth knowing

A wikilink inside a table cell needs its pipe escaped[[target\|Text]]. Unescaped, the | is read as a column separator and the link renders literally as [[page, and the build does not warn. This bit the change once before being caught in the built HTML. The check is grep -rnE '^\|.*\[\[[^]]*[^\\]\|' docs --include=*.md, and it may be worth adding to CLAUDE.md alongside the existing newline-wrapped-wikilink warning.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Gj9EW4NNDT8JHHghG3pZDt


Generated by Claude Code

darksidemilk and others added 3 commits August 23, 2026 10:39
.fogsettings renamed all 79 managed keys to CATEGORY_lower_snake_case in
nine categories, leaving 66: six retired, nine absorbed into settings that
already existed, and two promoted from internal variables.

install-fogsettings.md now documents all 66 by category, marking each with
its kind, and makes the preference/record/hand-set/inferred taxonomy
explicit rather than implied -- which is what tells a reader whether a hand
edit will survive the next run. Adds the canonical-path model that retires
acmeLeaf: a PKI_ path is fixed and the admin makes it resolve to their file,
so "is this leaf mine?" is a filesystem question rather than a flag that
could disagree with the vhost.

command-line-options.md was showing the pre-1.6 option list. Its full
option block is now rendered from the shipped installer's own help output
rather than transcribed, so --install-mode, --netboot-proto,
--public-web-cert and --rebuild-ipxe-with-my-ca are covered along with the
four install-mode presets. Drops --no-ca-trust and --no-sb-name-constraints,
which were removed with the settings behind them, and says so rather than
leaving readers to find out by passing them.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gj9EW4NNDT8JHHghG3pZDt
Eight pages still named settings that the 1.6 rename retired. Swept per hit
rather than mechanically: the storage-node `sslpath` CSV field in
csv_import_export.md is deliberately left alone, because it is that
endpoint's own field name mapping to a storageNode column, not a key in
this file.

Two are behaviour corrections rather than renames, because the setting they
told the reader to set no longer exists:

- external-ca-lets-encrypt.md told the ACME client to install straight to
  FOG's canonical leaf paths and then set acmeLeaf=yes. Under 1.6 that is
  the failure it was written to prevent -- FOG decides a leaf is its own by
  where the canonical path resolves, so a real file sitting at that path
  reads as FOG's and gets re-issued from the stored request while the ACME
  key sits beside it. The client now owns its own directory and the
  canonical paths are symlinked at it.
- pki-zones.md relocated a certificate by sed-ing the path in
  .fogsettings. Canonical paths are recomputed every run, so that edit
  moves nothing; the path has to resolve elsewhere instead.

Also drops the two retired flags where pages still recommended them
(--no-sb-name-constraints in pki-zones.md and
secure-boot-setup-mode-enrollment.md), and fixes wikilinks inside table
cells in the settings reference: an unescaped pipe there is read as a
column separator, so the link rendered literally as [[page with no warning
from the build.

Verified with npm run docs:build -- clean, and every internal link and
in-page anchor on both rewritten pages resolves.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gj9EW4NNDT8JHHghG3pZDt
Both PRs predate the .fogsettings rename and each had one file that master
has since replaced, so the salvageable content is carried here rather than
merged.

From #125, the substantive correction to secure-boot-signing.md: FOG *does*
sign its own iPXE binaries with this server's Secure Boot key, so the page
no longer claims it cannot. The real tradeoff is whether a custom binary is
worth enrolling a key before the machine can netboot -- not "signed shim or
custom binary". Its local-esp-boot.md is dropped; merged #129 put a newer
version of that page on master.

From #128, the Let's Encrypt walkthrough, with step 2 rewritten. As written
it set acmeLeaf=yes and repointed the certificate paths, and under 1.6 that
is the failure it was written to prevent: acmeLeaf is retired, repointing a
canonical path moves nothing because the installer recomputes it, and a real
file at the canonical path sits inside FOG's own web zone -- so FOG concludes
the leaf is its and re-issues it. The page now symlinks the canonical paths
at the ACME files and sets PKI_web_cert_publicly_trusted, and separates the
two questions FOG answers differently: who renews the leaf is derived from
the filesystem, what it chains to is the one thing that must be declared.

Neither PR's kb/how-tos/index.md is used -- both branched before #129 added
the Secure Boot section and would have removed it. The one new entry is
added by hand instead.

Also drops a dev branch name that had leaked into admin-facing text in
migrating-fog-server.md, where --external-ca was described as the
working-1.6 spelling; both spellings ship and work.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gj9EW4NNDT8JHHghG3pZDt
@darksidemilk
darksidemilk force-pushed the claude/fogsettings-key-rename-docs-b1i2vg branch from d37d196 to fb75986 Compare August 23, 2026 10:39
@darksidemilk
darksidemilk merged commit 6ca673d into master Aug 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant