The guard exists so a stranger's install is never pointed at the maintainer's forge — a property of what an install executes and ships (bootstrap.sh, firstboot.sh, configs/, iso/), not of documentation. Grep only those paths, so README/docs may link to the canonical forge (fixes the red master from the build-status badge).
3.3 KiB
3.3 KiB
Changelog
All notable changes to arch-turnkey are documented here. Format: Keep a Changelog; versioning: SemVer.
[Unreleased]
Changed
- The private-infrastructure lint guard is scoped to the build and source (
bootstrap.sh,firstboot.sh,configs/,iso/) instead of the whole tree. The guarantee it enforces is that nothing an install executes or ships points at the maintainer's infrastructure; docs and the README may now link there (e.g. a build-status badge for the canonical forge's CI).
Added
site.env— personal provisioning is now opt-in and out of the repo. The install runs in two phases: a generic base (LUKS + btrfs subvolumes + snapper + yay) that works from a fresh clone with no configuration, and a personal phase (vault unlock → register the new machine's SSH key with your forge → clone your dotfiles →yadm bootstrap) driven by a gitignoredsite.env. With nosite.env, firstboot reports what it is skipping and leaves a complete system. See docs/SITE.md andconfigs/site.env.example.iso/build.shbakessite.envinto a custom ISO, so an unattended personal install stays a single boot with no extra typing. Without one it builds a generic installer ISO.ARCH_TURNKEY_BASE— one fetch root feedsbootstrap.sh, the archinstallcustom-commands(via an@@BASE@@placeholder) and the ISO autorun. Defaults to the public GitHub mirror; set it to install from your own forge instead.- GitHub CI: shellcheck +
bash -non every script,archinstall.jsonJSON validation, a check that no@@BASE@@placeholder survives substitution, and a guard that fails the build if private infrastructure is ever referenced from this public repo. - MIT
LICENSE. Without one, an "install script for everyone" was legally unusable by anyone.
Fixed
- The installer only worked for its author.
bootstrap.shand the archinstallcustom-commandsfetched from one specific private Gitea, andfirstboot.shcloned a private dotfiles repo from it. Anyone else cloning this got an installer that could not work and that pointed them at a repository they cannot read. - The README advertised ISO downloads from a Releases page that did not, and could not, exist.
It now tells you to build the ISO with
iso/build.shand explains why no prebuilt image is published.
Security
bootstrap.shnow verifies the fetchedarchinstall.jsonbefore running it. Its custom-commands execute as root during install, so a config poisoned by a compromised mirror was root RCE at install time — TLS authenticates the transport, not the upstream. The config is checked against a SHA-256 pinned in the script by default;ARCH_TURNKEY_CONFIG_SHA256overrides it (=skipopts out), andARCH_TURNKEY_PUBKEYswitches to detached GPG-signature verification (configs/archinstall.json.sig), the only mode that resists a fully compromised upstream.- Docs no longer reference the maintainer's forge, private dotfiles, or personal username:
docs/CI.mduses a generic forge URL,docs/nginx-redirect.confis an explicit template,docs/INSTALL.mdno longer hardcodes a user or point at a private recovery doc, and the ISO publisher metadata matches the identity the repo is actually published under.