<feed xmlns='http://www.w3.org/2005/Atom'>
<title>archangel/custom/install-archzfs, branch main</title>
<subtitle>Arch Linux installer ISO — ZFS-on-root or BTRFS, doubles as rescue disk
</subtitle>
<id>https://git.cjennings.net/archangel/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/archangel/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archangel/'/>
<updated>2026-01-24T02:05:01+00:00</updated>
<entry>
<title>Phase 1.5: Rename to archangel</title>
<updated>2026-01-24T02:05:01+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-24T02:05:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archangel/commit/?id=0b8ef9b98a3b1310239b2f3b7d3d3f9620b70da0'/>
<id>urn:sha1:0b8ef9b98a3b1310239b2f3b7d3d3f9620b70da0</id>
<content type='text'>
- 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.
</content>
</entry>
<entry>
<title>Phase 1.4: Add filesystem selection prompt</title>
<updated>2026-01-24T02:02:02+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-24T02:02:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archangel/commit/?id=337dea91f567ceebb1f9dbef2b3cd93ca440b795'/>
<id>urn:sha1:337dea91f567ceebb1f9dbef2b3cd93ca440b795</id>
<content type='text'>
- 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.
</content>
</entry>
<entry>
<title>Fix set -e compatibility in lib functions</title>
<updated>2026-01-24T00:02:52+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-24T00:02:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archangel/commit/?id=c4979e8c8aec181f2b335c65823f1311815777f5'/>
<id>urn:sha1:c4979e8c8aec181f2b335c65823f1311815777f5</id>
<content type='text'>
- Replace [[ ]] &amp;&amp; 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 &amp;&amp; short-circuit returns exit
code 1 when condition is false, triggering set -e to abort.
</content>
</entry>
<entry>
<title>Phase 1.1: Create lib/ directory structure for archangel refactor</title>
<updated>2026-01-23T21:45:55+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-23T21:45:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archangel/commit/?id=e0f8d37961d189197bd5b4379532adb5957dea02'/>
<id>urn:sha1:e0f8d37961d189197bd5b4379532adb5957dea02</id>
<content type='text'>
- 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).
</content>
</entry>
<entry>
<title>Replace GRUB with ZFSBootMenu bootloader</title>
<updated>2026-01-23T05:21:18+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-23T05:21:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archangel/commit/?id=3e70ba84c15d69f48f436239e7f0ac9628464c55'/>
<id>urn:sha1:3e70ba84c15d69f48f436239e7f0ac9628464c55</id>
<content type='text'>
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
</content>
</entry>
<entry>
<title>Fix ratio boot issues: firmware, mkinitcpio, and document ZFS rollback dangers</title>
<updated>2026-01-22T20:27:49+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-22T20:27:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archangel/commit/?id=8eb7eb600bc9e709b6ee754a337289382bbcea4f'/>
<id>urn:sha1:8eb7eb600bc9e709b6ee754a337289382bbcea4f</id>
<content type='text'>
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
</content>
</entry>
<entry>
<title>Fix ZFS boot failures: service conflicts, cachefile, and GRUB duplicate root</title>
<updated>2026-01-21T09:06:11+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-21T09:06:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archangel/commit/?id=555fd551aacd5578a22bd6e205b811b622c5508f'/>
<id>urn:sha1:555fd551aacd5578a22bd6e205b811b622c5508f</id>
<content type='text'>
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).
</content>
</entry>
<entry>
<title>Use zfs-import-scan instead of zfs-import-cache for boot</title>
<updated>2026-01-21T06:33:42+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-21T06:33:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archangel/commit/?id=a68150f7f0436e8260c9c0257f98b3a0a07b629a'/>
<id>urn:sha1:a68150f7f0436e8260c9c0257f98b3a0a07b629a</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>Fix ZFS boot failure: set cachefile property after pool creation</title>
<updated>2026-01-21T01:23:50+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-21T01:23:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archangel/commit/?id=8525cd331c88b8d0f6b1be2c0207f4e68c449834'/>
<id>urn:sha1:8525cd331c88b8d0f6b1be2c0207f4e68c449834</id>
<content type='text'>
- 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
</content>
</entry>
<entry>
<title>Add Avahi mDNS to installed systems for network discovery</title>
<updated>2026-01-20T05:33:30+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-20T05:33:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archangel/commit/?id=edd7c9a000f2c19e3a00e8ed10a53ed73fd31cbc'/>
<id>urn:sha1:edd7c9a000f2c19e3a00e8ed10a53ed73fd31cbc</id>
<content type='text'>
Install avahi and nss-mdns packages, enable avahi-daemon service.
Matches archsetup's implementation for consistency.

After installation, systems are accessible as &lt;hostname&gt;.local
(e.g., ratio.local, framework.local) for easier SSH access.
</content>
</entry>
</feed>
