aboutsummaryrefslogtreecommitdiff
path: root/README.org
Commit message (Collapse)AuthorAgeFilesLines
* fix(build): drop sanoid from the baked AUR setCraig Jennings2026-06-171-2/+2
| | | | | | sanoid depends on perl-config-inifiles, which is AUR-only. makepkg -s can't resolve it from the official repos, so the build aborts before it produces an ISO. The 2026-06-09 dependency gate checked AUR-RPC existence rather than the official sync dbs, so it wrongly classified perl-config-inifiles as official. A full build caught it. sanoid joins paru and mkinitcpio-firmware as AUR-of-AUR packages deferred to the vNext dependency-resolution work. The v1 baked set is now eight packages. Updated the tests and README to match.
* docs: document baked AUR packages in the READMECraig Jennings2026-06-091-2/+40
| | | | Add a Build Host Requirements subsection covering the baked AUR repo: the v1 package set and audit date, the base-devel/git/sudo build-host needs, the makepkg -s host build-dep mutation, the manifest, and the installed-system disposition (packages installed, repo not retained). Document the --skip-aur toggle and add the AUR build to the build-steps list.
* feat(build): route pacstrap through pacoloco when availableCraig Jennings2026-05-191-0/+16
| | | | | | | | | | | | build.sh now checks for a pacoloco caching proxy on localhost:9129 before mkarchiso runs. When pacoloco is up, build.sh rewrites the build profile's pacman.conf to point [core], [extra], and [archzfs] at the proxy. When it isn't, the build falls back to the upstream mirrors and the GitHub-releases URL it always used. The motivation is the recurring archzfs corruption that's hit ~2 of 3 builds. The earlier cache-hygiene step (db851ff) clears the host's pacman cache so pacstrap can't reuse a corrupted package between builds. Pacoloco is the next layer. It caches successful fetches, so once a known-good copy of zfs-dkms or zfs-utils lands, future builds skip the GitHub roundtrip entirely. Pacoloco doesn't validate checksums itself, so a corrupted upstream fetch still fails the build at pacstrap. Once a clean copy lands, the cache stays clean. Detection uses bash /dev/tcp (no external dependency on nc or netcat). Two sed lines rewrite the URLs in the freshly-copied profile pacman.conf. The fallback prints an info message so the operator knows which mode the build ran in. README's "Build Host Requirements" section now lists pacoloco as an optional dependency with install + enable steps. Pacoloco is from AUR (~yay -S pacoloco~). The config in /etc/pacoloco.yaml needs an archzfs repo entry, documented in the README block. I verified end-to-end: installed pacoloco, configured /etc/pacoloco.yaml for archlinux (host mirrorlist) + archzfs (GitHub releases URL), enabled the systemd service, smoke-tested with curl (archzfs.db and core.db both served 200), then ran a full build. The build completed in ~4 minutes. The info message confirmed pacoloco routing. Pacoloco's cache filled with the freshly-fetched archzfs packages (zfs-dkms-2.4.2-1, zfs-utils-2.4.2-2) plus the Arch packages that weren't already in the host pacman cache. Build log and ISO landed at the expected paired names.
* feat(build): save build logs to out/ alongside the ISOCraig Jennings2026-05-191-1/+3
| | | | | | | | | | Before this commit, mkarchiso's verbose output streamed to the terminal and disappeared. The cleanup trap removed work/ after each build, taking any captured output with it. Failed builds left no log to compare against past failures — including the recurring archzfs cache corruption that hits ~2 of 3 builds. I added a tee on the mkarchiso pipeline that writes to a log file in out/. The log starts as out/build-YYYY-MM-DD-HHMM.log, pre-created and chowned to SUDO_USER. It stays user-readable even when a failed build leaves it under that name. On success, the script renames it to match the ISO's basename so finding the log for a given ISO is a one-step lookup. set -o pipefail was already on at the top of build.sh, so mkarchiso failures still propagate through the pipe and abort the script the way they used to. No exit-code masking. I verified the change end-to-end against a real build that hit archzfs cache corruption (log captured, kept as build-2026-05-19-0325.log, user-readable) followed by a clean retry (log renamed to archangel-2026-05-19-vmlinuz-6.18.29-lts-x86_64.log, paired with the ISO).
* feat: consolidate zfssnapshot and zfsrollback into one subcommand-driven scriptCraig Jennings2026-04-271-8/+10
| | | | | | | | | | | | Problem: zfssnapshot and zfsrollback were two separate scripts with overlapping pre-flight checks (zfs / fzf / root) and parallel UX patterns (description sanitization in one, fzf selection in the other). Users had to remember which script was for which operation, and a "list" view meant typing the raw `zfs list -t snapshot` command. There was no path to destroy individual snapshots short of `zfs destroy` directly, which is dangerous without a confirmation flow. Solution: rewrite zfssnapshot as a single multi-subcommand script (list, create, rollback, delete). Drop installer/zfsrollback. The new script uses a source-guard at the bottom (`if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then main "$@"; fi`) so bats can source it without triggering the install-time pre-flight checks, matching the pattern in installer/archangel. Pure helpers (sanitize_description, validate_description, format_snapshot_name) get extracted as named functions so they're testable in isolation. The destructive flows (rollback, delete) keep the explicit "yes" confirmation prompt, the genesis-snapshot warning, and the recursive-rollback-destroys-newer-snapshots warning. Delete uses fzf --multi so the user can pick several snapshot names at once. Updated build.sh to copy only the consolidated script. Dropped the zfsrollback profiledef permission line. Updated Makefile, README, scripts/sanity-test.sh, and testing-strategy.org to reflect the single-script layout. Bats: 147 → 168 (+21). Coverage spans sanitize_description (normal / boundary / error), validate_description (alphanumerics, hyphens, underscores accepted; spaces, slashes, shell metacharacters, empty rejected), format_snapshot_name (timestamp + description composition), and main subcommand dispatch (list / create / rollback / delete / help / unknown). Lint clean. The zfs-, fzf-, and arch-chroot-shelling subcommand bodies stay VM-tested per testing-strategy.org.
* docs: document bats unit tests + sync stale README bitsCraig Jennings2026-04-131-15/+19
| | | | | | | | | | | | | | | | | testing-strategy.org: - Frame the two test layers (bats unit / VM integration) in Overview - Add 'Unit Tests (bats)' section: what's covered, what's deliberately not, how to run, how to install, and the extract-then-test pattern - Fix stale Makefile Targets table (bats row, test row now lint+bats) README.org: - Rename 'Testing with VMs' to 'Testing' and add the two-layer framing - Surface make test / make bats / make lint in the bulleted list - Project Structure tree: drop zfs.sh (deleted last session), add raid.sh with description, add tests/unit/ entry - Point archzfs link to GitHub Releases (archzfs.com was abandoned mid-2025; url updated in code last session) - Fix #testing-with-vms internal link to match the renamed heading
* docs: reorganize README sections to follow logical user journeyCraig Jennings2026-02-241-161/+131
| | | | | | | | | | | | Eliminate Bare Metal Installation section by redistributing its content: - dd command → Building the ISO > Writing to USB - Secure Boot/boot steps → new Booting the ISO section - SSH/Avahi → SSH Access subsection under Booting the ISO - archangel invocation → Installation intro - ZFS/Btrfs first-boot → new Post-Reboot section Rename sections: Connecting via SSH Server → Booting the ISO, Arch Linux Install Walkthrough → Installation.
* docs: add Running Tests section to testing strategy, link from READMECraig Jennings2026-02-241-1/+3
|
* docs: move Testing with VMs section above Troubleshooting in READMECraig Jennings2026-02-241-49/+49
|
* refactor: rename vm-* Makefile targets to test-* for discoverabilityCraig Jennings2026-02-241-10/+10
|
* feat: add Makefile targets for manual VM testingCraig Jennings2026-02-241-10/+13
| | | | | Add vm, vm-multi, vm-multi3, vm-boot, and vm-clean targets. Update README to reference make targets instead of raw script invocations.
* feat: add preflight checks, rename ISO format, use Makefile targets in docsCraig Jennings2026-02-231-13/+16
| | | | | | | - Add Arch Linux and disk space preflight checks to build.sh - Rename ISO format: archangel-YYYY-MM-DD-vmlinuz-version-lts-x86_64.iso - Update README to use Makefile targets throughout (make build, make clean) - Note preflight checks in Prerequisites section
* docs: fix overview paragraph breaks and missing conjunctionCraig Jennings2026-02-231-1/+5
|
* docs: use inline code for make build in overviewCraig Jennings2026-02-231-7/+1
|
* docs: update README overview wordingCraig Jennings2026-02-231-12/+11
|
* chore: remove default Makefile target, update README overviewCraig Jennings2026-02-231-4/+1
|
* docs: update README subtitle and fix internal linksCraig Jennings2026-02-231-1/+1
|
* docs: fix internal links to use GitHub-compatible anchor formatCraig Jennings2026-02-231-9/+9
|
* docs: expand README with rescue disk, SSH, config example, and address ↵Craig Jennings2026-02-231-44/+134
| | | | review comments
* refactor: rename custom/ to installer/ for clarityCraig Jennings2026-02-231-2/+2
| | | | | | | | The custom/ directory name was an archiso implementation detail. Renamed to installer/ which clearly communicates that this directory contains the installer scripts and utilities that ship on the ISO. Updated all references in build.sh, Makefile, test-install.sh, and README.
* docs: reorganize README features and fix table formattingCraig Jennings2026-02-231-12/+12
|
* docs: update README.org for open-source releaseCraig Jennings2026-02-231-4/+12
| | | | | | | | - Fill in author field - Add SSH security warning for live ISO known password - Update project structure to match current files (add Makefile, RESCUE-GUIDE.txt, test-configs/, full-test.sh, boot-vm.sh) - Remove docs/ from project structure (gitignored)
* refactor: rename archzfs to archangel, simplify build-releaseCraig Jennings2026-01-311-481/+109
| | | | | | | | - Standardize naming: VM names, hostname, passwords, ISO naming - Remove USB, Ventoy, and local deployment from build-release - Add snapper package and Btrfs validation tests to sanity-test - Update README for dual ZFS/Btrfs architecture - Delete obsolete SESSION-CONTEXT.md and download-archzfs-iso.sh
* Add snapshot retention with automatic pruningCraig Jennings2026-01-181-0/+57
| | | | | | | | | | | | | | | | | Implements hybrid retention policy: - Always keep 20 most recent snapshots - Delete snapshots beyond #20 only if older than 180 days - Genesis snapshot is always protected Features: - zfs-snap-prune script with --dry-run, --test, --verbose modes - Comprehensive test suite (22 tests) - Runs automatically after pacman operations - Daily systemd timer for cleanup - Regenerates GRUB menu after pruning This prevents unbounded snapshot growth while preserving recent history and the genesis snapshot.
* Add grub-zfs-snap for ZFS snapshot boot entriesCraig Jennings2026-01-181-1/+61
| | | | | | | | | | Add ability to boot into ZFS snapshots directly from GRUB menu: - grub-zfs-snap: generates GRUB submenu entries for recent snapshots - 40_zfs_snapshots: GRUB generator script installed to /etc/grub.d/ - zz-grub-zfs-snap.hook: pacman hook for automatic GRUB regeneration The GRUB menu automatically updates after kernel/ZFS package changes. Up to 10 most recent snapshots appear in a "ZFS Snapshots" submenu.
* Add kernel update documentation to READMECraig Jennings2026-01-181-4/+73
| | | | | | | | | Explains how kernel updates work with zfs-dkms on installed systems: - Automatic DKMS rebuild process - Why we use DKMS vs prebuilt packages - How to verify ZFS module after update - Recovery steps if something goes wrong - Pre-pacman snapshot rollback instructions
* Update README with config file documentation and ISO namingCraig Jennings2026-01-181-14/+152
| | | | | | | | | - Add comprehensive "Unattended Installation" section - Document all config file options with examples - Include required vs optional fields table - Add example configurations for common scenarios - Update ISO naming format to archzfs-vmlinuz-{version}-lts-{date} - Update project structure to include config example file
* Add config file support for unattended installationsCraig Jennings2026-01-181-0/+399
Features: - --config-file option for automated installs - Example config at /root/install-archzfs.conf.example - Validates required fields before install - Config only used when explicitly specified (safety) Bug fixes: - Fix pacstrap hanging on provider prompts (use yes pipe) - Remove fsck from mkinitcpio HOOKS (ZFS doesn't use fsck) - Add hostid support for ZFS boot - Add spl.spl_hostid to kernel command line Documentation: - Comprehensive README.org with 15 sections - Session context tracking file