| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Pull the single-vs-multi-disk and LUKS-vs-no-encryption branching out
of install_btrfs() into five helpers in lib/btrfs.sh:
- btrfs_open_encryption — LUKS open + fill devices array
- btrfs_make_filesystem — create_btrfs_volume dispatch
- btrfs_configure_luks_target — in-chroot LUKS config
- btrfs_install_grub — GRUB primary + multi-disk mirror
- btrfs_close_encryption — LUKS close (cleanup)
Helpers use namerefs (local -n) to take the caller's arrays as locals
instead of promoting them to globals. install_btrfs() drops from ~99
lines of nested if-then-else to a ~45-line flat sequence of named
stages — matching the style of install_zfs().
Behavior preserved — this is pure code movement, no new disk/LUKS
operations. No unit tests added for the new helpers: they all wrap
real LUKS/mkfs.btrfs calls that need block devices and root; VM
integration tests in scripts/test-install.sh remain the source of
truth. .shellcheckrc: disable SC2178 (nameref array heuristic) and
SC2153 (globals from sourced files) — both recurring false positives.
make test: 65/65. shellcheck clean.
|
| |
|
|
|
|
|
|
|
|
|
| |
The catch-all mount-cleanup block called findmnt twice (once as an
existence guard, once in the pipe). Consolidate to a single call
captured to a local, guard with -n test. No behavior change — same
mounts, same order, same lazy-unmount.
Left the explicit known-mount loop alone; it's a faster path for the
deterministic mkarchiso bind mounts, with findmnt as the catch-all
for anything else. Not parallel strategies, just fast path + fallback.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
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).
|
| |
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
| |
- /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.
|
| |
|
|
|
| |
ZFS and Btrfs tested on bare metal. Fixed archzfs repo URL, LUKS pbkdf2
for GRUB, no-color default, and missing inetutils. Tagged v0.8.
|
| |
|
|
| |
Provides hostname, ping, and other networking basics on the target system.
|
| |
|
|
|
| |
GRUB's LUKS2 support only handles pbkdf2. When /boot is inside the
encrypted volume, argon2id causes GRUB to reject the correct password.
|
| |
|
|
| |
Keeps logs and SSH output clean. Use archangel --color for colored output.
|
| |
|
|
|
| |
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.
|
| |
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
Add vm, vm-multi, vm-multi3, vm-boot, and vm-clean targets. Update
README to reference make targets instead of raw script invocations.
|
| | |
|
| |
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
- 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
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
review comments
|
| | |
|
| |
|
|
|
|
|
|
| |
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.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
- 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 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
|
| |
|
|
|
|
| |
Configure shellcheck to ignore false positives from sourced file
patterns (SC2034), intentional word splitting (SC2086), and other
stylistic warnings that don't represent bugs.
|
| |
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
Remove outdated "btrfs coming soon" note, add LUKS_PASSPHRASE option
for btrfs installs, and simplify encryption skip documentation to
cover both filesystem types.
|
| |
|
|
|
|
| |
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).
|
| |
|
|
|
|
| |
Enable undefined variable checking (set -u) and pipefail across
standalone scripts. Guard SUDO_USER references with ${SUDO_USER:-}
for set -u compatibility.
|
| |
|
|
|
| |
Declare and assign local variables separately to avoid masking
return values from command substitutions.
|
| |
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
- 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)
|
| |
|
|
|
|
|
| |
- 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
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
| |
- 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
|