aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* refactor: merge install_base and install_base_btrfsCraig Jennings9 days3-69/+106
| | | | | | | | | | | | | | | | Extract the pacstrap package list into pacstrap_packages(filesystem) in lib/common.sh (common + filesystem-specific). install_base() now dispatches on FILESYSTEM for both the archzfs-repo-append and the package list. install_base_btrfs() deleted; install_btrfs() call site updated to invoke install_base. Old: 49 + 38 lines of ~95% copy-paste. New: 32 lines + a 20-line pure helper. 7 bats tests cover: zfs has zfs-dkms/zfs-utils, btrfs has btrfs-progs + grub + grub-btrfs + snapper + snap-pac, each flavor excludes the other's specifics, common packages are in both, unknown filesystem returns status 1, output is one-per-line. make test: 65/65.
* refactor: unify get_{luks,zfs}_passphrase and get_root_passwordCraig Jennings9 days3-54/+70
| | | | | | | | | | | | | | | Extract the prompt/confirm/min-length loop into prompt_password() in lib/common.sh using a nameref for the output variable, so UI output stays on the terminal (no command-substitution capture) and the three callers collapse from ~30 lines each to a single helper call. - get_luks_passphrase() — min 8 chars - get_zfs_passphrase() — min 8 chars - get_root_password() — no min (was unchecked before; preserved) 5 bats tests added: match+min-ok path, length-retry loop, mismatch-retry loop, min_len=0 disables check, empty passphrase when min_len=0. make test: 58/58.
* refactor: drop dead mount_efi and select_raid_level from lib/disk.shCraig Jennings9 days1-41/+0
| | | | | | | lib/disk.sh:mount_efi() was shadowed by installer/archangel:mount_efi() (different signature, no-arg ZFS-specific) and had zero callers. lib/disk.sh:select_raid_level() was superseded by get_raid_level() in archangel and also had zero callers. Both removed.
* refactor: extract pure RAID logic to lib/raid.sh with bats coverageCraig Jennings9 days3-6/+274
| | | | | | | | | | | | | | | | | | | | Peel the testable pieces of get_raid_level() out of the 1600-line installer monolith into installer/lib/raid.sh: - raid_valid_levels_for_count(count) — replaces the inline option-list builder in get_raid_level() - raid_is_valid(level, count) — useful for unattended-config validation - raid_usable_bytes(level, count, smallest, total) — usable-space math - raid_fault_tolerance(level, count) — max tolerable disk failures archangel now sources lib/raid.sh and uses raid_valid_levels_for_count for the fzf option list. Fzf preview subshell still inlines its own usable-bytes arithmetic (calling exported lib functions across preview subshells is fragile; left for a later pass). 30 bats tests in tests/unit/test_raid.bats cover the full enumeration table, every valid/invalid level-vs-count combo from 2 to 5 disks, mixed-size mirror, and unknown-level error paths. make test: 53/53.
* test: add bats unit tests for common.sh and config.shCraig Jennings9 days3-4/+211
| | | | | | | | 23 bats tests covering the pure logic in installer/lib/common.sh (command_exists, require_command, info/warn/error, enable_color, require_root, log) and installer/lib/config.sh (parse_args, load_config, validate_config, check_config). Makefile adds a 'bats' target; 'test' now runs lint + bats (VM integration tests remain under test-install).
* security: gitignore host configs, add .example templatesCraig Jennings9 days3-0/+3
| | | | | | velox-{zfs,btrfs}.conf contain LUKS/ZFS passphrases and root passwords. Untrack them and add velox-*.conf to .gitignore. Committed .example templates show the expected structure with 'welcome' placeholders.
* refactor: remove dead installer/lib/zfs.shCraig Jennings9 days2-378/+8
| | | | | | | | | | | | | The library was sourced but only zfs_preflight was reachable from install_zfs(); the other ten functions either had names that were never called (create_zfs_datasets, configure_zfs_pacman_hook, etc.) or were shadowed by same-named definitions in the monolithic installer/archangel (create_zfs_pool, configure_zfsbootmenu, configure_zfs_services). Inlined zfs_preflight into archangel and dropped the source line. Removes a trap where fixes appear to be "mirrored" but only one copy actually runs.
* fix: drop zroot/tmp dataset and dedup pacman snapshot hookCraig Jennings9 days2-8/+46
| | | | | | | | | | - /tmp on ZFS breaks systemd-tmpfiles-clean (statx ENOLINK on PrivateTmp paths). Use tmpfs via fstab instead; keep zroot/var/tmp. - zfs-pre-snapshot gains a 60s lockfile in /run so burst transactions (archsetup produced 357 snapshots in one run) collapse to one. Both fixes mirrored in installer/archangel and installer/lib/zfs.sh. Already applied and verified on velox.
* session: first bare metal install on velox, multiple fixesCraig Jennings11 days3-0/+540
| | | | | ZFS and Btrfs tested on bare metal. Fixed archzfs repo URL, LUKS pbkdf2 for GRUB, no-color default, and missing inetutils. Tagged v0.8.
* fix: add inetutils to installed system packagesCraig Jennings12 days1-0/+2
| | | | Provides hostname, ping, and other networking basics on the target system.
* fix: use pbkdf2 for LUKS2 containers instead of argon2idCraig Jennings12 days1-2/+5
| | | | | GRUB's LUKS2 support only handles pbkdf2. When /boot is inside the encrypted volume, argon2id causes GRUB to reject the correct password.
* feat: default to no-color output, add --color flag to enableCraig Jennings12 days2-11/+16
| | | | Keeps logs and SSH output clean. Use archangel --color for colored output.
* fix: migrate archzfs repo from stale archzfs.com to GitHub ReleasesCraig Jennings12 days2-4/+4
| | | | | archzfs.com was abandoned mid-2025; latest packages were ZFS 2.3.2 for kernel 6.12.29. The new GitHub-hosted repo has ZFS 2.4.1 for 6.18.21.
* session: add logo candidates and build new ISOCraig Jennings2026-03-283-0/+0
| | | | | | Added three archangel logo candidate images to assets/. Built and distributed archangel-2026-03-28 ISO (linux-lts 6.18.20) to Ventoy USB and TrueNAS.
* 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-242-1/+36
|
* 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-242-21/+21
|
* feat: add Makefile targets for manual VM testingCraig Jennings2026-02-242-17/+53
| | | | | Add vm, vm-multi, vm-multi3, vm-boot, and vm-clean targets. Update README to reference make targets instead of raw script invocations.
* docs: add testing-strategy.org with ZFS encryption notes and test recipeCraig Jennings2026-02-241-0/+287
|
* feat: add ZFS encrypted volume tests (single disk + mirror)Craig Jennings2026-02-243-10/+110
| | | | | | | Add automated tests for ZFS native encryption, matching existing Btrfs LUKS test coverage. ZFS encrypted boot requires two passphrase entries (ZFSBootMenu + mkinitcpio zfs hook), both sent via QEMU monitor sendkey with timed delays since ZFSBootMenu renders to VGA, not serial.
* feat: add preflight checks, rename ISO format, use Makefile targets in docsCraig Jennings2026-02-232-18/+27
| | | | | | | - 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-232-9/+2
|
* 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
* docs: add CONTRIBUTING.md for open-source contributorsCraig Jennings2026-02-231-0/+58
|
* refactor: rename custom/ to installer/ for clarityCraig Jennings2026-02-2316-14/+15
| | | | | | | | 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
|
* chore: add inbox/ to .gitignoreCraig Jennings2026-02-231-0/+1
|
* feat: add LUKS passphrase automation to VM test frameworkCraig Jennings2026-02-231-1/+117
| | | | | | | | | | - Add monitor_sendkeys() to type strings into QEMU via monitor socket - Add send_luks_passphrase() that detects GRUB passphrase prompt in serial log and sends passphrase via sendkey, supporting multi-disk LUKS (one passphrase per encrypted disk) - Add QEMU monitor socket to start_vm_from_disk() for LUKS configs - Auto-detect LUKS configs and handle passphrase entry during reboot test - Add socat dependency check
* fix: support multi-disk LUKS and fix cryptkey format for btrfsCraig Jennings2026-02-231-20/+48
| | | | | | | | | | | | - Fix cryptkey parameter format: use rootfs: prefix so the encrypt hook finds the keyfile embedded in the initramfs (was treating bare path as a device name) - Switch multi-disk LUKS to sd-encrypt hook which reads crypttab.initramfs to open ALL LUKS containers (the traditional encrypt hook only supports a single cryptdevice) - Create crypttab.initramfs during LUKS initramfs setup - Skip cryptdevice/cryptkey cmdline params for multi-disk LUKS since sd-encrypt reads crypttab instead
* chore: add .shellcheckrc to suppress intentional shellcheck warningsCraig Jennings2026-02-231-0/+20
| | | | | | Configure shellcheck to ignore false positives from sourced file patterns (SC2034), intentional word splitting (SC2086), and other stylistic warnings that don't represent bugs.
* fix: resolve remaining SC2155 warnings across all scriptsCraig Jennings2026-02-234-21/+40
| | | | | | Declare and assign local variables separately in custom/archangel, scripts/full-test.sh, scripts/test-install.sh, and remove unused variable in custom/lib/zfs.sh.
* docs: update archangel.conf.example for btrfs supportCraig Jennings2026-02-231-8/+8
| | | | | | Remove outdated "btrfs coming soon" note, add LUKS_PASSPHRASE option for btrfs installs, and simplify encryption skip documentation to cover both filesystem types.
* chore: make OVMF firmware paths configurable via environmentCraig Jennings2026-02-234-12/+12
| | | | | | Allow OVMF_CODE and OVMF_VARS_ORIG to be overridden via environment variables for portability across distros (Fedora, Ubuntu, etc. use different paths for UEFI firmware).
* chore: add set -euo pipefail to scripts for safetyCraig Jennings2026-02-235-8/+8
| | | | | | Enable undefined variable checking (set -u) and pipefail across standalone scripts. Guard SUDO_USER references with ${SUDO_USER:-} for set -u compatibility.
* fix: resolve SC2155 shellcheck warnings in custom/lib/Craig Jennings2026-02-233-9/+18
| | | | | Declare and assign local variables separately to avoid masking return values from command substitutions.
* scrub personal info and make distribution targets configurableCraig Jennings2026-02-236-35/+41
| | | | | | | Remove personal email addresses, hardcoded paths, and infrastructure references to prepare for open-source release. Distribution targets in build-release are now configurable via environment variables, and archsetup inclusion is opt-in.
* fix: change archzfs SigLevel from Optional TrustAll to NeverCraig Jennings2026-02-231-1/+3
| | | | | | Optional TrustAll is misleading — it implies signature checking when none is actually happening. Use Never to match the installer and be explicit. Repo is served over HTTPS; GPG adds no value in build env.
* 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)
* chore: standardize shebangs, fix lint target, add .editorconfigCraig Jennings2026-02-2311-10/+33
| | | | | | | - Change all script shebangs to #!/usr/bin/env bash for portability (heredocs writing to installed systems keep #!/bin/bash) - Remove || true from Makefile lint target so shellcheck errors fail the build - Add .editorconfig for consistent formatting across editors
* fix: support no-ssh test by adding console boot verificationCraig Jennings2026-02-231-30/+73
| | | | | | | | The no-ssh test failed because reboot verification unconditionally used wait_for_ssh, which timed out on systems without SSH. Add wait_for_boot_console() that checks serial log for ZFSBootMenu boot markers, and branch run_test() on ENABLE_SSH to use the appropriate verification path.
* clean personal info and private files from repositoryCraig Jennings2026-02-2210-1925/+5
| | | | | | | | | | - Remove personal hardware specs, machine-specific troubleshooting docs, and video transcript from assets/ - Remove stale PLAN-zfsbootmenu-implementation.org (feature complete) - Remove .stignore (Syncthing config, not project-relevant) - Untrack todo.org (personal task tracker with private infra details) - Make archsetup path configurable via ARCHSETUP_DIR env var in build.sh - Use $REAL_USER instead of hardcoded username in build-release scp
* fix: correct broken shebangs in zfssnapshot and zfsrollbackCraig Jennings2026-02-222-2/+2
| | | | #!/bin/env bash doesn't exist — changed to #!/usr/bin/env bash.
* remove skeleton archsetup-zfs scriptCraig Jennings2026-02-223-444/+1
| | | | | Non-functional stub that printed "this is a skeleton" — worse than not having it. Removed from build.sh, Makefile, and file permissions.
* add GPL-3.0 LICENSE fileCraig Jennings2026-02-221-0/+674
| | | | Required for open-source release, as referenced in README.org.