Simplifies the primary path from "build a custom ISO" to "install from git and run one menu", which is what the operator actually asked for. The ISO tooling stays in the tree as a secondary/optional route and is not removed. admin/bf-bootstrap.sh -- one command on Ubuntu: - clones the repo to /opt/blueforce-linux or fast-forwards an existing checkout (a dirty tree is reported and skipped, never reset or stashed) - installs git/curl/ansible-core, links admin/bf-* and scripts/*/bf-* into /usr/local/bin, and finishes with the exact next command - --check is read-only, works without root, and mutates nothing; the piped form (curl ... | sudo -S -p '' bash) is guarded against eating the script admin/bf-menu -- numbered operator console (categories 1-5): - 1 installs THIS device locally; 2 and 5 drive the fleet through the existing 21 Ansible playbooks; 3 prepares and verifies central integration without installing a central server; 4 holds local tools - every operation picks one target: a dealer number or an approved wave group. Scope is derived from the playbook file itself, so a playbook whose declared scope disagrees with the console's table is refused rather than run - the command is always shown before it runs; release-gated operations require a typed wave token, production requires a second token, and "all" runs wave-by-wave, stopping at the first failure - audit log at /var/log/blueforce-console.log (mode 600, falls back to $XDG_STATE_HOME when not writable), recording sanitized target/command/exit only: no playbook output, no secrets admin/bf-creds -- optional credential record, DEFAULT OFF: - a bare run generates nothing and reports what already exists (device id, WireGuard public key, private key path only, RustDesk id) - --generate writes /root/blueforce-credentials.txt (0600) and --fetch delivers it to admin/secrets/<dealer>.txt (0700/0600, git-ignored). The secret never reaches stdout, stderr or argv - this does not change the SSH design: password auth stays off and the blueforce account stays locked, per docs/06. It is a local delivery aid only docs/33-OPERATOR-CONSOLE.md -- step-by-step guide for an operator new to Linux and DevOps: which command to type where, what the screen will ask, both end-to-end sample sessions, the five most common errors, and the security rules. Tests: run-all.sh -> 9/9 pass, exit 0 (adds check-admin-static.sh, 159 checks, with negative controls and mutation-proven non-vacuity).
48 lines
1.3 KiB
Text
48 lines
1.3 KiB
Text
.directory
|
|
|
|
# Local agent/plan state — never committed
|
|
.hermes/
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Field OS build artifacts.
|
|
# These are large, generated, and reproducible from a verified upstream ISO.
|
|
# The upstream ISO itself is NOT stored in git (2.9 GB); its SHA256 is recorded
|
|
# in the release manifest instead. See docs/26 and docs/30.
|
|
# ---------------------------------------------------------------------------
|
|
.build-lab/
|
|
dist/
|
|
*.iso
|
|
*.iso.sha256
|
|
*.iso.boot-report.txt
|
|
|
|
# Offline APT repository output (generated by provisioning/offline-repo)
|
|
provisioning/offline-repo/out/
|
|
provisioning/offline-repo/pool/
|
|
Packages
|
|
Packages.gz
|
|
packages.lock.tsv
|
|
|
|
# Documentation site (generated)
|
|
docs-site/node_modules/
|
|
docs-site/build/
|
|
docs-site/.docusaurus/
|
|
docs-site/docs/
|
|
fetched-logs/
|
|
|
|
# Secrets must never be committed — belt and braces alongside the secret scan
|
|
# in tests/. Any private key, token file, or credential store belongs in a
|
|
# root-owned path on the host, never in this repository.
|
|
*.key
|
|
*.pem
|
|
*.p12
|
|
*.pfx
|
|
id_rsa*
|
|
id_ed25519*
|
|
*credentials*
|
|
*token*
|
|
*.secret
|
|
|
|
# Credential files delivered by `admin/bf-creds --fetch` (<dealer-number>.txt).
|
|
# They live only in the checkout that runs the delivery, are root-owned on the
|
|
# device (mode 0600 inside a mode 0700 directory), and are never committed.
|
|
admin/secrets/
|