| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
| |
- 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
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
- Add scripts/full-test.sh for automated install testing (single, mirror, raidz1)
- Add --full-test option to build-release workflow
- Install zfssnapshot and zfsrollback to target system during install
- Simplify .gitignore to exclude entire vm/ directory
|
| |
|
|
|
| |
Documents automated sanity test, build-release workflow, and all
fixes made during this session.
|
| |
|
|
|
|
|
|
| |
New --yes/-y flag skips the dd confirmation prompt, allowing
build-release to run completely unattended for CI/CD workflows.
The ARCHZFS label on the drive is sufficient safety - if it has
that label, it was created by this process and is the intended target.
|
| |
|
|
|
|
|
| |
- Use cjennings@truenas.local instead of root (has SSH keys)
- Remove removable check for ARCHZFS drives (Framework expansion
cards show as internal but are hot-swappable)
- Still requires 'yes' confirmation before dd for safety
|
| |
|
|
|
|
|
| |
- Use SUDO_USER to get real user's home directory
- Run SSH/SCP as real user to use their SSH keys
- Handle TrueNAS SSH failure gracefully (warn and continue)
- Track actual TrueNAS success status for summary
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
New scripts/sanity-test.sh:
- Boots ISO in headless QEMU
- Waits for SSH availability
- Runs 13 automated verification tests:
- ZFS module loaded and working
- Custom scripts present (zfsrollback, zfssnapshot, etc.)
- fzf installed
- LTS kernel running
- archsetup directory present
- Reports pass/fail with summary
- Fully automated - no human input required
Updated build-release to use automated sanity test instead of
manual verification prompt.
|
| |
|
|
|
|
| |
Sort datasets by path depth (deepest first) before rolling back.
ZFS requires children to be rolled back before their parents,
otherwise rollback can fail or skip datasets.
|
| |
|
|
|
| |
Documents changes made this session including zfs scripts, grub fix,
build-release workflow, and technical notes on os-prober.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Automates the full release workflow:
1. Build ISO (via build.sh)
2. Sanity test (boot in QEMU, manual verification)
3. Distribute to multiple targets:
- ~/Downloads/isos (always)
- truenas.local:/mnt/vault/isos (if reachable)
- ARCHZFS labeled USB drive (detected via blkid, writes via dd)
- Ventoy USB drive (detected by label or ventoy/ directory)
Options:
--skip-build Distribute existing ISO without rebuilding
--skip-test Skip the QEMU sanity test
|
| |
|
|
|
|
|
|
|
| |
Remove backslash escape from grub-probe command substitution so it
executes at config generation time instead of writing the literal
string "$(grub-probe ...)" into grub.cfg.
GRUB's scripting language doesn't support bash-style $() command
substitution, causing syntax errors on boot.
|
| |
|
|
|
| |
40% was too small on console, showing only ~2 lines.
70% gives roughly 2/3 of screen for snapshot selection.
|
| |
|
|
|
| |
Required for zfsrollback interactive snapshot selection to work
on freshly installed systems before archsetup runs.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Copied from archsetup to make these tools available on the live ISO
for rescue scenarios and post-install management.
zfssnapshot:
- Creates recursive snapshots across all pools
- Timestamps with descriptive labels (YYYY-MM-DD_HH-MM-SS_description)
- Integrates with grub-zfs-snap for boot menu updates
zfsrollback:
- Interactive fzf-based snapshot selection
- Two modes: single dataset or all matching datasets
- Safety warnings showing what will be destroyed
- Special genesis rollback warning
|
| |
|
|
|
|
|
|
|
|
| |
These ZFS snapshot management scripts belong in archzfs ISO rather
than archsetup because:
- Rescue scenarios: rollback from live USB when system won't boot
- Standalone utility: works on any ZFS system
- ISO always available: no need to install archsetup first
Includes example implementations using fzf for interactive selection.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Add bpftrace, bcc-tools, and perf for system tracing and profiling.
These are Linux's eBPF-based equivalents to DTrace, essential for
debugging and performance analysis in rescue scenarios.
Add w3m terminal browser alongside existing lynx for better rendering
of complex pages.
Update RESCUE-GUIDE.txt with new sections covering:
- Section 9: System Tracing with bpftrace examples, BCC tools, perf
- Section 10: Terminal web browsing with lynx/w3m basics
|
| |
|
|
|
|
|
|
|
|
|
| |
When networking is broken, that's exactly when you need docs most.
Added arch-wiki-lite (AUR) as the recommended reader:
- wiki-search <term> for CLI searching
- Displays articles as plain text in terminal
- Added to AUR packages list
Also documented Option 2: arch-wiki-docs + w3m with wrapper script.
|