| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
| |
- RAID1 (mirror) and RAID0 (stripe) for 2+ disks
- Multi-disk LUKS with single passphrase prompt
- EFI redundancy: GRUB installed on all disks
- Pacman hook syncs GRUB updates across EFI partitions
- btrfs initramfs hook for multi-device assembly at boot
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- Fix GRUB cryptodisk: configure_grub() heredoc was overwriting LUKS
settings added by configure_luks_grub(). Moved LUKS GRUB config
(GRUB_ENABLE_CRYPTODISK=y, cryptdevice cmdline) into configure_grub()
after the heredoc writes the base config.
- Fix ISO bloat: archsetup copy was including vm-images (17GB).
Changed from cp -r to rsync with exclusions for vm-images,
test-results, .qcow2, and .iso files. ISO now 2.0GB.
- btrfs-luks VM test now passes.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- Add LUKS functions to btrfs.sh (create/open/close container)
- Add crypttab configuration for boot
- Add encrypt hook to mkinitcpio HOOKS
- Add cryptdevice parameter to GRUB cmdline
- Add get_btrfs_encryption_choice and get_luks_passphrase prompts
- Add LUKS_PASSPHRASE to config variables
- Update show_summary and print_btrfs_summary for encryption status
- Add btrfs-luks.conf test config
VM test pending.
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
- Add GRUB serial console configuration for headless/VM testing
- Add GRUB_BTRFS_OVERRIDE_BOOT_PARTITION_DETECTION for btrfs
- Fix snapper-firstboot script (use echo instead of HEREDOC)
- Add dbus.service dependency to firstboot service
- Remove duplicate rootflags from GRUB_CMDLINE_LINUX
VM test verified: GRUB boots, all subvolumes mount, snapper works.
|
| |
|
|
|
|
|
|
|
|
|
| |
- Fix GRUB config path (remove GRUB_BTRFS_GRUB_DIRNAME, use default)
- Create snapper config manually (D-Bus not available in chroot)
- Create genesis snapshot with btrfs command (not snapper)
- Add btrfs-single.conf test config
- Update test-install.sh to copy lib/ directory
- Update test-install.sh to handle btrfs verification
VM test now passes for btrfs single-disk installation.
|
| |
|
|
|
|
|
|
|
|
|
| |
- Create lib/btrfs.sh with full btrfs installation functions
- Subvolume layout matching ZFS datasets (10 subvols)
- Snapper configuration with timeline policy
- GRUB + grub-btrfs for snapshot boot menu
- Update disk.sh for filesystem-aware partition type
- Update archangel with install_btrfs() path
- Update build.sh to include lib/btrfs.sh
- Update plan with Phase 2.7 (test) and 2.8 (LUKS)
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
- Rename install-archzfs → archangel
- Rename install-archzfs.conf.example → archangel.conf.example
- Update build.sh to use new names
- Update script header with dual-filesystem description
- Update log file names to archangel-*
The installer is now called "archangel" reflecting its expanded
scope: snapshot-based recovery for both ZFS and Btrfs filesystems.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- Add FILESYSTEM variable to config (zfs or btrfs)
- Add select_filesystem() function with fzf support
- Update gather_input() to prompt for filesystem in interactive mode
- Add validation for FILESYSTEM in unattended mode
- Btrfs selection errors with "not yet implemented"
- Update banner to show "Archangel" branding
- Update config example with FILESYSTEM option
Groundwork for btrfs support - filesystem choice is now captured,
installation logic gates on FILESYSTEM variable.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
| |
- Replace [[ ]] && error pattern with if/then/fi
- Pattern causes exit when condition is false with set -e
- Fixed in: common.sh, config.sh, disk.sh, install-archzfs
Discovered during VM testing: the && short-circuit returns exit
code 1 when condition is false, triggering set -e to abort.
|
| |
|
|
|
|
| |
- Copy custom/lib/ to /usr/local/bin/lib/ in airootfs
- Add file permissions for lib/*.sh files
- Required for refactored install-archzfs to work
|
| |
|
|
|
|
|
|
|
|
|
| |
- Add custom/lib/common.sh: output, validation, fzf prompts, disk utils
- Add custom/lib/config.sh: argument parsing, config loading, validation
- Add custom/lib/disk.sh: partitioning, EFI management, disk selection
- Add custom/lib/zfs.sh: pool, datasets, ZFSBootMenu, services, hooks
- Update install-archzfs to source libs
- Remove duplicated output/config functions from main script
Prepares codebase for btrfs filesystem support (Phase 2).
|
| |
|
|
|
|
| |
- Create PLAN-archangel-btrfs.org with 6-phase implementation
- Phases: Refactor, Btrfs, Multi-disk, Testing, CLI tools, Docs
- Add TODO referencing the plan
|
| |
|
|
|
|
|
| |
- Add reboot survival checks (catches misconfigured services)
- Rollback tests must include reboot for full validation
- Document ZFSBootMenu rollback bug (needs filing)
- Expand failure recovery and encryption checks
|
| |
|
|
|
|
|
| |
- Add TODO [#B] for archsetup --chroot mode to enable full workstation
setup during install-archangel chroot phase
- Document required changes: skip systemctl start, ping checks, tmpfs mount
- Update session context with archangel naming decision
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Comprehensive research for expanding project to support both ZFS and Btrfs:
- Feature parity analysis (ZFS vs Btrfs equivalents)
- Btrfs limitations: RAID 5/6 unstable, no native encryption (use LUKS)
- Recommended subvolume layout: @, @home, @snapshots, @var_log, @var_cache
- Snapshot stack: snapper + snap-pac + grub-btrfs + btrfs-assistant
- Multi-disk support: raid1 (mirror), raid10 only
- Installer architecture proposal with modular lib/ structure
- Testing strategy and VM test matrix
- Project rename recommendation: archsnap
Cloned 8 reference repos: grub-btrfs, easy-arch, arch-btrfs-installation,
btrfs-assistant, snap-pac, btrbk, buttermanager, alis
|
| |
|
|
|
|
|
|
|
|
|
| |
- Create docs/project-workflows/code-review.org with comprehensive
code review checklist based on Code Review Pyramid framework
- Add 14 new tasks to todo.org from senior developer code review:
- Priority A: README GRUB refs, missing LICENSE, skeleton script
- Priority B: Stale files, Makefile lint, documentation gaps
- Priority C: Style consistency, .editorconfig, test docs
- Add Makefile targets to todo.org: deps, lint, deploy
- Create docs/session-context.org for session tracking
|
| | |
|
| |
|
|
|
| |
Validated install-archzfs on Framework Desktop with 2-disk NVMe mirror.
ZFSBootMenu installed on both EFI partitions with redundant boot entries.
|
| |
|
|
|
| |
Implemented and tested ZFSBootMenu bootloader replacement. All VM tests
passed (single disk, mirror, raidz1). ISO copied to Ventoy drive.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a major change that replaces the GRUB bootloader with ZFSBootMenu,
providing native ZFS boot environment support.
Key changes:
- EFI partition reduced from 1GB to 512MB (only holds ZFSBootMenu)
- EFI now mounts at /efi instead of /boot
- Kernel and initramfs live on ZFS root (enables snapshot boot with matching kernel)
- Downloads pre-built ZFSBootMenu EFI binary from get.zfsbootmenu.org
- Creates EFI boot entries for all disks in multi-disk configurations
- Syncs ZFSBootMenu to all EFI partitions for redundancy
- Sets org.zfsbootmenu:commandline on zroot/ROOT for kernel cmdline inheritance
- Sets bootfs pool property for default boot environment
- AMD GPU workarounds (pg_mask, cwsr_enable) added to kernel cmdline when AMD detected
Deleted GRUB snapshot tooling (no longer needed):
- custom/grub-zfs-snap
- custom/40_zfs_snapshots
- custom/zz-grub-zfs-snap.hook
- custom/zfs-snap-prune
Updated helper scripts:
- zfssnapshot: removed grub-zfs-snap call, shows ZFSBootMenu tip
- zfsrollback: removed grub-zfs-snap call, notes auto-detection
Tested configurations:
- Single disk installation
- 2-disk mirror (mirror-0)
- 3-disk RAIDZ1 (raidz1-0)
- All boot correctly with ZFSBootMenu
|
| |
|
|
|
|
|
|
| |
- Add instructions for applying pg_mask=0 and cwsr_enable=0 workarounds
- Document that kernel 6.18.x has critical bugs, stay on 6.15.x-6.17.x
- Add session docs, mkinitcpio fixes, and Donato Capitella video transcript
- Add PRINCIPLES.org for behavioral lessons learned
- Update protocols.org from template
|
| | |
|
| | |
|
| |
|
|
|
| |
autodetect during chroot install detects live ISO hardware,
not target machine. Could leave out NVMe/AHCI drivers.
|
| |
|
|
|
| |
Documented boot fix session including firmware requirement, GRUB
configuration, and behavioral principles for future sessions.
|
| |
|
|
|
|
|
|
|
| |
- docs/PRINCIPLES.org: Behavioral lessons from retrospectives
- docs/retrospectives/: Directory for retrospective records
- docs/protocols.org: Add PRINCIPLES.org to session startup reading list
Establishes pattern for learning from problem-solving sessions and
capturing behavioral (not just technical) lessons.
|
| |
|
|
|
|
|
| |
- Created custom GRUB entries for cleaner boot menu
- Set kernel 6.15.2 as default, LTS as fallback
- Pinned linux package in pacman.conf
- Documented UUID gotcha with mirrored NVMe boot partitions
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Root cause: Missing/outdated linux-firmware broke AMD Strix Halo GPU init.
Fixed by installing linux-firmware 20260110-1.
Changes:
- install-archzfs: Fix mkinitcpio config (remove archiso.conf, fix preset)
- todo.org: Add ZFS rollback + /boot mismatch issue, recommend ZFSBootMenu
- docs/2026-01-22-ratio-boot-fix-session.org: Full troubleshooting session
- docs/2026-01-22-mkinitcpio-config-boot-failure.org: Bug report
- assets/: Supporting documentation and video transcript
Key learnings:
- AMD Strix Halo requires linux-firmware 20260110+
- ZFS rollback with /boot on EFI partition can break boot
- zpool import -R can permanently change mountpoints
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Three bugs were preventing installed systems from booting:
1. ZFS package preset (50-zfs.preset) enables zfs-import-cache by default,
overriding our attempt to use zfs-import-scan. Now explicitly disable
zfs-import-cache before enabling zfs-import-scan.
2. zfs-import-scan has ConditionFileNotEmpty=!/etc/zfs/zpool.cache which
prevents it from running if cachefile exists. Now remove cachefile after
setting cachefile=none.
3. GRUB_CMDLINE_LINUX contained root=ZFS=... but grub-mkconfig also
auto-detects ZFS root, causing duplicate root= parameters. Removed
manual root= since grub-mkconfig handles it correctly.
All 22 tests pass (19 sanity + 3 installation configs).
|
| |
|
|
|
|
|
|
|
| |
- Move all tasks to same level (no nested headers)
- Add "Idea from:" attribution for external sources
- Sort tasks by priority (A, B, C, D)
- Expand build logging task with archsetup UX reference
- Clarify multi-variant builds as very low priority
- Trim Resolved section for brevity
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- Move completed items to Resolved section
- Add RAID configuration tests (mirror, raidz)
- Add pre-flight validation to install-archzfs
- Add task to extract install-archzfs into testable functions
- Add negative/failure test cases
- Add install-archzfs --dry-run mode
Improvements based on quality engineering principles:
fail fast, testable architecture, error case coverage.
|
| |
|
|
|
|
|
| |
- Add chown step to build.sh to restore ownership to invoking user
after mkarchiso completes (fixes root-owned out/work/profile dirs)
- Rename TODO.org to todo.org (lowercase)
- Add todo item for post-install reboot countdown timer
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Switch to the recommended pool import method that uses blkid to scan
for pools instead of relying on zpool.cache. This eliminates the
complexity of managing cachefile paths with altroot during installation.
Changes:
- Remove cachefile setup from create_zfs_pool() and configure_zfs_services()
- Enable zfs-import-scan.service instead of zfs-import-cache.service
- Set cachefile=none on the pool since it's not needed
- Update full-test.sh to verify zfs-import-scan is enabled
This approach is recommended per the Arch Wiki and doesn't require
the cachefile to be present in the initramfs.
|
| |
|
|
|
|
|
| |
- Check zpool.cache is present in initramfs (catches cachefile bugs)
- Add reboot test: issue reboot, wait for system to come back
- Verify ZFS pool healthy after reboot
- Ensures the installed system can survive a reboot cycle
|
| |
|
|
|
|
|
| |
- Add zpool set cachefile=/etc/zfs/zpool.cache after pool creation
- Without this, initramfs ZFS hook can't import pool at boot
- Causes "cannot import '(null)': no such pool available" error
- Add cachefile property test to full-test.sh
|
| | |
|
| |
|
|
|
|
|
|
| |
- Add safe_cleanup_work_dir() to prevent /dev corruption on interrupted builds
- Fix shadow file: use sed to modify root entry instead of replacing file
- Add /etc/hosts and /etc/nsswitch.conf for proper hostname/mDNS resolution
- Add inetutils package for hostname command
- Add sanity tests for password, avahi, mdns, and hostname
|
| | |
|
| |
|
|
|
|
|
|
| |
Bug: ((TESTS_PASSED++)) returns exit code 1 when TESTS_PASSED is 0,
because post-increment evaluates the old value (0) which is falsy.
With set -e, this caused the script to exit after the first test passed.
Fix: Use pre-increment ((++TESTS_PASSED)) which returns the new value.
|
| |
|
|
|
|
|
|
|
|
| |
sanity-test.sh (live ISO):
- Check avahi-daemon is enabled
- Check avahi-daemon is running
test-install.sh (installed system):
- Check avahi and nss-mdns packages installed
- Check avahi-daemon service enabled
|
| |
|
|
|
|
|
|
| |
Install avahi and nss-mdns packages, enable avahi-daemon service.
Matches archsetup's implementation for consistency.
After installation, systems are accessible as <hostname>.local
(e.g., ratio.local, framework.local) for easier SSH access.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Root cause: The `hostid` command returns a value even without /etc/hostid,
but `zgenhostid` generates a DIFFERENT random value. The install script
was calling `hostid` for the GRUB kernel parameter, then later calling
`zgenhostid` to create /etc/hostid - resulting in a mismatch.
ZFS refuses to auto-import pools when spl.spl_hostid doesn't match
/etc/hostid, causing "Failed to mount /sysroot" at boot.
Fix: Generate hostid with zgenhostid FIRST (in configure_bootloader),
then read the consistent value for the GRUB kernel parameter. The
configure_zfs_services function now just copies the already-existing
/etc/hostid to the installed system.
Verified in VM: GRUB and /etc/hostid both show identical values after
installation.
|
| |
|
|
|
|
| |
- Live ISO Avahi implemented in 906cc6f (archzfs.local works)
- Added TODO to implement Avahi on installed systems
- Update session context
|
| |
|
|
|
|
|
| |
- Add avahi and nss-mdns packages to live ISO
- Enable avahi-daemon.service for mDNS discovery
- Set hostname to "archzfs" so machines are accessible at archzfs.local
- Fix ISP firmware path in install-archzfs: remove /mnt prefix for chroot
|