aboutsummaryrefslogtreecommitdiff
path: root/README.org
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-01-31 14:46:21 -0600
committerCraig Jennings <c@cjennings.net>2026-01-31 14:46:21 -0600
commitd32546a050e08c666ec54cd422bd8a79d66e81c3 (patch)
tree41b434e6014ccbaa47b96588e58258e7907a1d8d /README.org
parent864e061b817134f9c363410045088721461f46f9 (diff)
downloadarchangel-d32546a050e08c666ec54cd422bd8a79d66e81c3.tar.gz
archangel-d32546a050e08c666ec54cd422bd8a79d66e81c3.zip
refactor: rename archzfs to archangel, simplify build-release
- Standardize naming: VM names, hostname, passwords, ISO naming - Remove USB, Ventoy, and local deployment from build-release - Add snapper package and Btrfs validation tests to sanity-test - Update README for dual ZFS/Btrfs architecture - Delete obsolete SESSION-CONTEXT.md and download-archzfs-iso.sh
Diffstat (limited to 'README.org')
-rw-r--r--README.org590
1 files changed, 109 insertions, 481 deletions
diff --git a/README.org b/README.org
index d24ed57..97b7b30 100644
--- a/README.org
+++ b/README.org
@@ -1,31 +1,40 @@
-#+TITLE: archzfs - Arch Linux ZFS Root Installation ISO
+#+TITLE: archangel - Arch Linux ZFS/Btrfs Installation ISO
#+AUTHOR:
#+OPTIONS: toc:3
* Overview
-archzfs is a custom Arch Linux ISO build system that creates a live environment
-optimized for installing Arch Linux on ZFS root filesystems. It provides an
-interactive installer with support for encrypted ZFS, multi-disk RAID
+archangel is a custom Arch Linux ISO build system that creates a live environment
+optimized for installing Arch Linux on ZFS or Btrfs root filesystems. It provides an
+interactive installer with support for encrypted filesystems, multi-disk RAID
configurations, and automatic snapshot management.
-The ISO includes all necessary ZFS tools pre-loaded, eliminating the need for
+The ISO includes all necessary tools pre-loaded, eliminating the need for
manual module loading or package installation during the install process.
* Features
-- *ZFS Root Filesystem* - Full ZFS installation with native encryption
-- *Multi-Disk RAID* - Support for mirror, stripe, raidz1/2/3 configurations
-- *EFI Boot Redundancy* - GRUB installed on all disks for boot resilience
+- *Dual Filesystem Support* - Choose ZFS or Btrfs during installation
+- *Native Encryption* - ZFS encryption or LUKS2 for Btrfs
+- *Multi-Disk RAID* - Mirror, stripe, raidz1/2/3 (ZFS) or RAID0/1/10 (Btrfs)
+- *EFI Boot Redundancy* - Bootloader installed on all disks for resilience
- *fzf-Based Interface* - Fuzzy search for timezone, locale, keymap, disk, RAID, and WiFi selection
- *Genesis Snapshot* - Automatic pristine-state snapshot after installation
-- *Rollback Script* - One-command factory reset via ~/root/rollback-to-genesis~
-- *Pre-Pacman Snapshots* - Automatic snapshots before package operations
-- *Snapshot Retention* - Automatic pruning keeps disk usage bounded
-- *GRUB Snapshot Boot* - Boot into any ZFS snapshot directly from GRUB menu
+- *Snapshot Boot* - ZFSBootMenu (ZFS) or grub-btrfs (Btrfs) for booting snapshots
- *NetworkManager* - WiFi configuration copied to installed system
- *SSH Ready* - Optional SSH with root login for headless servers
-- *LTS Kernel* - Uses linux-lts for stability with ZFS
+- *LTS Kernel* - Uses linux-lts for stability
+
+** Filesystem Comparison
+
+| Feature | ZFS | Btrfs |
+|---------+-----+-------|
+| Bootloader | ZFSBootMenu | GRUB + grub-btrfs |
+| Encryption | Native ZFS encryption | LUKS2 |
+| Snapshots | zfs snapshot | snapper |
+| Snapshot boot | Built into ZFSBootMenu | grub-btrfs menu |
+| RAID support | mirror, raidz1/2/3, stripe | RAID0, RAID1, RAID10 |
+| EFI size | 512MB | 1GB |
* Quick Start
@@ -40,7 +49,7 @@ sudo ./build.sh
./scripts/test-vm.sh --multi-disk
#+END_SRC
-Boot the ISO and run ~install-archzfs~ to start the installation.
+Boot the ISO and run ~archangel~ to start the installation.
* Prerequisites
@@ -52,7 +61,7 @@ Boot the ISO and run ~install-archzfs~ to start the installation.
** Runtime Dependencies (included in ISO)
- ZFS kernel modules (via zfs-dkms)
-- GRUB with ZFS support
+- Btrfs tools
- NetworkManager
- fzf for interactive selection
@@ -67,17 +76,16 @@ sudo ./build.sh
The build script will:
1. Copy the base Arch releng profile
2. Switch to linux-lts kernel
-3. Add the archzfs repository
-4. Add custom packages (ZFS, NetworkManager, fzf, etc.)
-5. Copy the install-archzfs script
+3. Add the archzfs repository (for ZFS packages)
+4. Add custom packages (ZFS, Btrfs, NetworkManager, fzf, etc.)
+5. Copy the archangel installer script
6. Build the ISO using mkarchiso
** Build Output
-- ISO location: ~out/archzfs-vmlinuz-{version}-lts-YYYY-MM-DD-x86_64.iso~
-- Example: ~archzfs-vmlinuz-6.12.65-lts-2026-01-18-x86_64.iso~
+- ISO location: ~out/archangel-vmlinuz-{version}-lts-YYYY-MM-DD-x86_64.iso~
+- Example: ~archangel-vmlinuz-6.12.65-lts-2026-01-18-x86_64.iso~
- Build logs: visible in terminal output
-- Build time: typically 5-15 minutes depending on cache
** Clean Rebuild
@@ -89,25 +97,27 @@ sudo ./build.sh
* Project Structure
#+BEGIN_EXAMPLE
-archzfs/
+archangel/
├── build.sh # Main ISO build script
├── custom/
-│ ├── install-archzfs # Interactive installation script
-│ ├── install-archzfs.conf.example # Example config for unattended install
-│ ├── grub-zfs-snap # ZFS snapshot GRUB menu generator
-│ ├── zfs-snap-prune # Snapshot retention/pruning script
-│ ├── 40_zfs_snapshots # GRUB generator script (for /etc/grub.d/)
-│ └── zz-grub-zfs-snap.hook # Pacman hook for auto-regeneration
+│ ├── archangel # Interactive installation script
+│ ├── archangel.conf.example # Example config for unattended install
+│ ├── lib/ # Modular installer components
+│ │ ├── common.sh # Shared utilities
+│ │ ├── config.sh # Configuration handling
+│ │ ├── disk.sh # Disk partitioning
+│ │ ├── zfs.sh # ZFS-specific functions
+│ │ └── btrfs.sh # Btrfs-specific functions
+│ ├── zfssnapshot # ZFS snapshot utility
+│ └── zfsrollback # ZFS rollback utility
├── scripts/
-│ └── test-vm.sh # QEMU test VM launcher
-├── profile/ # archiso profile (generated during build)
-│ ├── airootfs/ # Files copied to live ISO
-│ │ └── usr/local/bin/ # Contains install-archzfs
-│ ├── packages.x86_64 # Package list for ISO
-│ └── pacman.conf # Pacman config with archzfs repo
+│ ├── test-vm.sh # QEMU test VM launcher
+│ ├── test-install.sh # Automated install tests
+│ ├── sanity-test.sh # Quick ISO verification
+│ └── build-release # Build and distribute ISO
├── vm/ # VM disk images (created by test-vm.sh)
-├── work/ # Build working directory (created by build.sh)
-├── out/ # Built ISO output (created by build.sh)
+├── work/ # Build working directory
+├── out/ # Built ISO output
└── docs/ # Documentation
#+END_EXAMPLE
@@ -115,8 +125,8 @@ archzfs/
| Script | Description |
|--------+-------------|
-| ~build.sh~ | Builds the ISO. Copies releng profile, adds ZFS packages, configures kernel, runs mkarchiso |
-| ~custom/install-archzfs~ | Interactive installer run on the live ISO. Handles disk partitioning, ZFS pool creation, base system install, bootloader setup |
+| ~build.sh~ | Builds the ISO. Copies releng profile, adds packages, configures kernel, runs mkarchiso |
+| ~custom/archangel~ | Interactive installer. Handles disk partitioning, filesystem creation, base system install, bootloader setup |
| ~scripts/test-vm.sh~ | Launches QEMU VM for testing. Supports single and multi-disk configurations |
* Testing with VMs
@@ -132,7 +142,7 @@ This creates a 50GB virtual disk and boots the ISO.
** Multi-Disk RAID Test
#+BEGIN_SRC bash
-# Two 50GB disks (for mirror or stripe)
+# Two 50GB disks (for mirror)
./scripts/test-vm.sh --multi-disk
# Three 50GB disks (for raidz1)
@@ -142,11 +152,11 @@ This creates a 50GB virtual disk and boots the ISO.
** SSH Access to VM
#+BEGIN_SRC bash
-# Password: archzfs
+# Password: archangel
ssh -p 2222 root@localhost
# Or with sshpass
-sshpass -p archzfs ssh -p 2222 root@localhost
+sshpass -p archangel ssh -p 2222 root@localhost
#+END_SRC
** Clean VM State
@@ -161,99 +171,48 @@ sshpass -p archzfs ssh -p 2222 root@localhost
./scripts/test-vm.sh --boot-disk
#+END_SRC
-* Development Workflow
-
-** Iterative Testing with Genesis Rollback
-
-After completing an installation in the VM, you can rollback to the genesis
-snapshot and re-test without reinstalling. This is useful for testing archsetup
-or other post-install scripts.
-
-*** In the VM (after installation and reboot):
-
-#+BEGIN_SRC bash
-# Rollback to pristine post-install state
-/root/rollback-to-genesis
-
-# Reboot to apply
-reboot
-#+END_SRC
-
-*** From the host:
-
-#+BEGIN_SRC bash
-# The VM disk retains the ZFS pool
-# Just boot from disk again
-./scripts/test-vm.sh --boot-disk
-#+END_SRC
-
-** Updating the Install Script
-
-#+BEGIN_SRC bash
-# Edit the script
-vim custom/install-archzfs
-
-# Copy to a running VM for immediate testing
-sshpass -p archzfs scp -P 2222 custom/install-archzfs root@localhost:/usr/local/bin/
-
-# Or rebuild the ISO for fresh testing
-sudo ./build.sh
-#+END_SRC
-
* Installation Walkthrough
-The ~install-archzfs~ script provides a guided installation with fzf-based
+The ~archangel~ script provides a guided installation with fzf-based
selection interfaces.
** Phase 1: Configuration Gathering
-1. *Hostname* - System hostname
-2. *Timezone* - Fuzzy search through all timezones (preview shows current time)
-3. *Locale* - All locales available (preview shows format examples)
-4. *Keymap* - Console keyboard layout
-5. *Disk Selection* - Multi-select with TAB (preview shows disk details)
-6. *RAID Level* - For multi-disk: mirror, stripe, raidz1/2/3 (preview shows capacity calculations)
-7. *WiFi* - Scan and select network (preview shows signal/security)
-8. *ZFS Passphrase* - Encryption passphrase (required at every boot)
+1. *Filesystem* - Choose ZFS or Btrfs
+2. *Hostname* - System hostname
+3. *Timezone* - Fuzzy search through all timezones
+4. *Locale* - All locales available
+5. *Keymap* - Console keyboard layout
+6. *Disk Selection* - Multi-select with TAB (preview shows disk details)
+7. *RAID Level* - For multi-disk: mirror, stripe, raidz1/2/3 (ZFS) or RAID0/1/10 (Btrfs)
+8. *Encryption* - Encryption passphrase (ZFS native or LUKS2)
9. *Root Password* - System root password
10. *SSH* - Enable SSH with root login (default: yes)
** Phase 2: Unattended Installation
After configuration, the installation runs without intervention:
-- Disk partitioning (EFI + ZFS on each disk)
-- ZFS pool creation with encryption
-- Dataset creation (ROOT, home, var, etc.)
+- Disk partitioning (EFI + root on each disk)
+- Filesystem creation with encryption
+- Dataset/subvolume creation
- Base system installation via pacstrap
- System configuration (locale, timezone, hostname)
-- Bootloader installation (GRUB on all EFI partitions)
+- Bootloader installation (ZFSBootMenu or GRUB)
- Genesis snapshot creation
-** RAID Level Options
-
-| Disks | Available Options |
-|-------+-------------------|
-| 1 | Single (no RAID) |
-| 2 | Mirror, Stripe |
-| 3+ | Mirror, Stripe, RAIDZ1 |
-| 4+ | Mirror, Stripe, RAIDZ1, RAIDZ2 |
-| 5+ | Mirror, Stripe, RAIDZ1, RAIDZ2, RAIDZ3 |
-
* Unattended Installation
-For automated or headless installations, use a config file to provide all
-configuration values upfront. The installer will run without any user
-interaction.
+For automated or headless installations, use a config file.
** Using a Config File
#+BEGIN_SRC bash
# Copy and edit the example config
-cp /root/install-archzfs.conf.example /root/my-install.conf
+cp /root/archangel.conf.example /root/my-install.conf
vim /root/my-install.conf
# Run with config file
-install-archzfs --config-file /root/my-install.conf
+archangel --config-file /root/my-install.conf
#+END_SRC
*Important*: The config file is ONLY used when explicitly specified with
@@ -262,118 +221,19 @@ to prevent accidental disk destruction.
** Config File Reference
-Example config file (~install-archzfs.conf.example~ is included on the ISO):
-
-#+BEGIN_SRC bash
-#############################
-# System Configuration
-#############################
-
-# Hostname for the installed system (required)
-HOSTNAME=archzfs
-
-# Timezone (required) - Use format: Region/City
-# Examples: America/Los_Angeles, Europe/London, Asia/Tokyo
-TIMEZONE=America/Los_Angeles
-
-# Locale (optional, default: en_US.UTF-8)
-LOCALE=en_US.UTF-8
-
-# Console keymap (optional, default: us)
-KEYMAP=us
-
-#############################
-# Disk Configuration
-#############################
-
-# Disks to use for installation (required)
-# Single disk: DISKS=/dev/vda
-# Multiple disks: DISKS=/dev/vda,/dev/vdb,/dev/vdc
-DISKS=/dev/vda
-
-# RAID level for multi-disk setups (optional)
-# Options: mirror, stripe, raidz1, raidz2, raidz3
-# Default: mirror (when multiple disks specified)
-# Leave empty for single disk
-RAID_LEVEL=
-
-#############################
-# Security
-#############################
-
-# ZFS encryption passphrase (required)
-# This will be required at every boot to unlock the pool
-ZFS_PASSPHRASE=changeme
-
-# Root password (required)
-ROOT_PASSWORD=changeme
-
-#############################
-# Network Configuration
-#############################
-
-# Enable SSH with root login (optional, default: yes)
-# Set to "no" to disable SSH
-ENABLE_SSH=yes
-
-# WiFi configuration (optional)
-# Leave empty for ethernet-only or to skip WiFi setup
-WIFI_SSID=
-WIFI_PASSWORD=
-#+END_SRC
-
-** Required vs Optional Fields
-
| Field | Required | Default | Description |
|-------+----------+---------+-------------|
+| ~FILESYSTEM~ | No | zfs | Filesystem type (zfs or btrfs) |
| ~HOSTNAME~ | Yes | - | System hostname |
| ~TIMEZONE~ | Yes | - | Timezone (Region/City format) |
| ~DISKS~ | Yes | - | Comma-separated disk paths |
-| ~ZFS_PASSPHRASE~ | Yes | - | ZFS encryption passphrase |
+| ~ZFS_PASSPHRASE~ | Yes* | - | Encryption passphrase (*if not NO_ENCRYPT) |
| ~ROOT_PASSWORD~ | Yes | - | Root user password |
| ~LOCALE~ | No | en_US.UTF-8 | System locale |
| ~KEYMAP~ | No | us | Console keyboard layout |
| ~RAID_LEVEL~ | No | mirror | RAID type for multi-disk |
| ~ENABLE_SSH~ | No | yes | Enable SSH server |
-| ~WIFI_SSID~ | No | - | WiFi network name |
-| ~WIFI_PASSWORD~ | No | - | WiFi password |
-
-** Example Configurations
-
-*** Single Disk Server
-
-#+BEGIN_SRC bash
-HOSTNAME=webserver
-TIMEZONE=UTC
-DISKS=/dev/sda
-ZFS_PASSPHRASE=MySecurePass123
-ROOT_PASSWORD=RootPass456
-ENABLE_SSH=yes
-#+END_SRC
-
-*** Two-Disk Mirror (Recommended for Servers)
-
-#+BEGIN_SRC bash
-HOSTNAME=fileserver
-TIMEZONE=America/New_York
-DISKS=/dev/sda,/dev/sdb
-RAID_LEVEL=mirror
-ZFS_PASSPHRASE=MySecurePass123
-ROOT_PASSWORD=RootPass456
-ENABLE_SSH=yes
-#+END_SRC
-
-*** Three-Disk RAIDZ1
-
-#+BEGIN_SRC bash
-HOSTNAME=storage
-TIMEZONE=Europe/London
-DISKS=/dev/sda,/dev/sdb,/dev/sdc
-RAID_LEVEL=raidz1
-ZFS_PASSPHRASE=MySecurePass123
-ROOT_PASSWORD=RootPass456
-ENABLE_SSH=yes
-#+END_SRC
+| ~NO_ENCRYPT~ | No | no | Skip encryption (testing only) |
* Bare Metal Installation
@@ -381,290 +241,66 @@ ENABLE_SSH=yes
#+BEGIN_SRC bash
# Write ISO to USB drive (replace /dev/sdX)
-sudo dd if=out/archzfs-vmlinuz-*.iso of=/dev/sdX bs=4M status=progress oflag=sync
+sudo dd if=out/archangel-vmlinuz-*.iso of=/dev/sdX bs=4M status=progress oflag=sync
#+END_SRC
** Booting
1. Boot from USB (may need to disable Secure Boot)
2. Wait for live environment to load
-3. Run ~install-archzfs~
-
-** WiFi Setup
-
-The installer will scan for WiFi networks and present them in fzf.
-Select your network and enter the password. The connection is tested
-before proceeding and will be copied to the installed system.
+3. Run ~archangel~
-** SSH Access After Reboot
+** Post-Reboot
-If you enabled SSH during installation:
-1. The system will have NetworkManager enabled
-2. WiFi credentials are copied from the live environment
-3. SSH is enabled with root password login
-4. Connect via: ~ssh root@<ip-address>~
+*** ZFS Systems
+1. Enter ZFS encryption passphrase at ZFSBootMenu prompt
+2. Select boot environment (or wait for default)
+3. Log in as root
-*Important*: Harden SSH after first login (disable password auth, use keys).
-
-** Post-Reboot Steps
-
-1. Enter ZFS encryption passphrase at boot
-2. Log in as root
-3. Run ~archsetup~ for further configuration
+*** Btrfs Systems
+1. GRUB menu appears
+2. Enter LUKS passphrase when prompted
+3. Log in as root
* Post-Installation
-** ZFS Snapshot Boot Entries (grub-zfs-snap)
-
-The installer configures GRUB to display bootable ZFS snapshots in the boot menu.
-This allows you to boot directly into a previous system state without manually
-rolling back.
-
-*** How It Works
-
-- A GRUB submenu "ZFS Snapshots" appears in the boot menu
-- Shows up to 10 most recent snapshots of the root dataset
-- Selecting a snapshot boots the system in read-only mode from that snapshot
-- The running system sees the snapshot's files, but changes go to a temporary overlay
-
-*** When Snapshots Appear in GRUB
-
-The GRUB menu is automatically updated:
-- After kernel updates (~linux-lts~)
-- After ZFS package updates (~zfs-dkms~, ~zfs-utils~)
-- After GRUB updates
-- After any kernel module installation
-
-*** Manual Snapshot Management
+** ZFS Snapshot Management
#+BEGIN_SRC bash
-# Create a snapshot before making changes
-zfs snapshot zroot/ROOT/default@before-experiment
+# Create a snapshot
+zfssnapshot "before-experiment"
-# Regenerate GRUB menu to include new snapshot
-grub-zfs-snap
+# Interactive rollback with fzf
+zfsrollback
-# List snapshots that will appear in GRUB
-grub-zfs-snap --list
+# List snapshots
+zfs list -t snapshot
#+END_SRC
-*** Customization
-
-Environment variables control behavior:
+** Btrfs Snapshot Management
#+BEGIN_SRC bash
-# Change pool name (default: zroot)
-POOL_NAME=mypool grub-zfs-snap
+# Create a snapshot (via snapper)
+snapper -c root create -d "before-experiment"
-# Change root dataset (default: ROOT/default)
-ROOT_DATASET=ROOT/arch grub-zfs-snap
+# List snapshots
+snapper -c root list
-# Show more snapshots in menu (default: 10)
-MAX_SNAPSHOTS=20 grub-zfs-snap
+# Rollback (requires reboot)
+snapper -c root rollback <number>
#+END_SRC
-*** Booting from a Snapshot
-
-1. Reboot and select "ZFS Snapshots" from GRUB menu
-2. Choose the desired snapshot by date/name
-3. System boots with that snapshot's root filesystem
-4. Files are read-only - to make permanent, rollback from normal boot
-
** Genesis Snapshot
-The installer creates a recursive snapshot of the entire pool named ~genesis~.
-This represents the pristine post-install state.
+Both filesystems create a "genesis" snapshot after installation, representing
+the pristine post-install state.
#+BEGIN_SRC bash
-# View genesis snapshots
+# ZFS: View genesis snapshot
zfs list -t snapshot | grep genesis
-#+END_SRC
-** Rollback to Factory State
-
-#+BEGIN_SRC bash
-# Interactive rollback with confirmation
-/root/rollback-to-genesis
-
-# Reboot to apply
-reboot
-#+END_SRC
-
-*Warning*: This destroys all changes since installation!
-
-** Useful ZFS Commands
-
-#+BEGIN_SRC bash
-# List all snapshots
-zfs list -t snapshot
-
-# Create manual snapshot
-zfs snapshot zroot/home@my-backup
-
-# Rollback to snapshot
-zfs rollback zroot/home@my-backup
-
-# Pool status
-zpool status
-
-# Pool usage
-zpool list
-#+END_SRC
-
-** Snapshot Retention Policy
-
-The system automatically prunes old snapshots to prevent unbounded disk usage.
-
-*** Retention Rules
-
-| Rule | Description |
-|------+-------------|
-| Keep 20 most recent | Always preserved regardless of age |
-| Delete if >180 days | Snapshots beyond position 20, older than 6 months |
-| Genesis protected | Never deleted, regardless of position or age |
-
-*** How It Works
-
-Pruning runs automatically:
-- *After every pacman operation* - Pre-pacman hook triggers prune after creating new snapshot
-- *Daily via systemd timer* - Catches any missed pruning, syncs GRUB menu
-
-*** Manual Pruning
-
-#+BEGIN_SRC bash
-# Preview what would be deleted
-zfs-snap-prune --dry-run
-
-# Run with verbose output
-zfs-snap-prune --verbose
-
-# Check current snapshots
-zfs-snap-prune --help
-#+END_SRC
-
-*** Customizing Retention
-
-Set environment variables before running:
-
-#+BEGIN_SRC bash
-# Keep more snapshots (default: 20)
-KEEP_COUNT=50 zfs-snap-prune
-
-# Shorter retention period (default: 180 days)
-MAX_AGE_DAYS=90 zfs-snap-prune
-
-# Different pool/dataset
-POOL_NAME=tank ROOT_DATASET=ROOT/arch zfs-snap-prune
-#+END_SRC
-
-To change defaults permanently, edit ~/usr/local/bin/zfs-snap-prune~.
-
-*** Example: One Year of Use
-
-With weekly pacman updates (~52/year) plus genesis:
-- Total snapshots created: ~53
-- Snapshots kept: ~27 (20 recent + ~6 within 180 days + genesis)
-- Snapshots pruned: ~26 (older than 180 days, beyond position 20)
-
-* Keeping Up-to-Date
-
-** Kernel Updates on Installed Systems
-
-The installed system uses *zfs-dkms* which builds ZFS modules from source. This
-means kernel updates work automatically:
-
-1. *Pacman installs new kernel* - ~linux-lts~ update via pacman/topgrade
-2. *DKMS hook triggers* - Automatically compiles ZFS for the new kernel
-3. *mkinitcpio hook triggers* - Regenerates initramfs with new ZFS modules
-4. *Reboot* - System boots with new kernel and matching ZFS modules
-
-*** Why DKMS?
-
-| Approach | Pros | Cons |
-|----------+------+------|
-| ~zfs-dkms~ (what we use) | Always compatible, builds for any kernel | Slower updates (compile time) |
-| ~zfs-linux-lts~ (prebuilt) | Fast updates | Must wait for archzfs to release matching version |
-
-We use DKMS because it guarantees compatibility - you're never stuck waiting
-for the archzfs maintainers to release a new package.
-
-*** Verify After Kernel Update
-
-#+BEGIN_SRC bash
-# Check ZFS module matches running kernel
-uname -r # Current kernel version
-modinfo zfs | grep vermagic # ZFS module version
-
-# These should show the same kernel version
-#+END_SRC
-
-*** If Something Goes Wrong
-
-If a kernel update breaks ZFS (rare with LTS kernel):
-
-#+BEGIN_SRC bash
-# Boot from archzfs ISO
-# Import the pool
-zpool import -f zroot
-
-# Enter passphrase when prompted, then mount
-zfs mount -a
-mount /dev/vda1 /mnt/boot # EFI partition
-
-# Chroot and fix
-arch-chroot /mnt
-
-# Option 1: Rebuild DKMS modules
-dkms autoinstall
-mkinitcpio -P
-
-# Option 2: Rollback to previous snapshot
-# (exit chroot first)
-/mnt/root/rollback-to-genesis
-#+END_SRC
-
-*** Pre-Pacman Snapshots
-
-The installer configures automatic snapshots before every pacman operation.
-If a kernel update causes issues, you can rollback:
-
-#+BEGIN_SRC bash
-# List recent snapshots
-zfs list -t snapshot -o name,creation | grep ROOT
-
-# Rollback to pre-update snapshot
-zfs rollback zroot/ROOT/default@autosnap_YYYY-MM-DD_HH:MM:SS
-reboot
-#+END_SRC
-
-** Rebuilding the ISO
-
-Rebuild the ISO when:
-- New Linux LTS kernel is released (for new installations)
-- New ZFS version is released
-- You've made changes to install-archzfs
-- archzfs repository packages are updated
-
-*** Rebuild Process
-
-#+BEGIN_SRC bash
-# Clean and rebuild
-sudo rm -rf work out
-sudo ./build.sh
-#+END_SRC
-
-The build automatically pulls the latest packages from:
-- Official Arch repositories
-- archzfs repository (https://archzfs.com)
-
-*** Checking for Updates
-
-#+BEGIN_SRC bash
-# Check current linux-lts version in repos
-pacman -Si linux-lts | grep Version
-
-# Check archzfs package versions
-curl -s https://archzfs.com/archzfs/x86_64/ | grep -o 'zfs-linux-lts-[^"]*'
+# Btrfs: View genesis snapshot
+snapper -c root list | grep genesis
#+END_SRC
* Troubleshooting
@@ -682,7 +318,6 @@ sudo ./build.sh
The ISO includes DKMS-built ZFS modules. If modules fail to load:
- Check ~dmesg | grep -i zfs~ for errors
- Ensure you're using the LTS kernel
-- The archzfs repo may be out of sync with kernel updates (wait for update)
** Disk Not Showing in Selection
@@ -690,31 +325,24 @@ The ISO includes DKMS-built ZFS modules. If modules fail to load:
- Check ~lsblk~ to verify disk visibility
- USB drives may need a moment to be detected
-** WiFi Networks Not Found
-
-- Verify WiFi hardware is present: ~ip link~
-- In VMs, there is no WiFi adapter (expected)
-- Try rescanning: ~nmcli device wifi rescan~
-
** Boot Fails After Installation
+*** ZFS
+- Check ZFSBootMenu appears (if not, check EFI boot order with ~efibootmgr~)
+- Verify pool can import: boot ISO, ~zpool import -f zroot~
+
+*** Btrfs
- Verify EFI boot entries: ~efibootmgr -v~
- Check GRUB config: ~/boot/grub/grub.cfg~
-- Ensure ZFS modules in initramfs: ~lsinitcpio /boot/initramfs-linux-lts.img | grep zfs~
-
-** Encryption Passphrase Not Accepted
-
-- Keyboard layout at boot is US by default
-- Passphrase is case-sensitive
-- Check for num-lock state
* Links
- [[https://archzfs.com][archzfs Repository]] - ZFS packages for Arch Linux
- [[https://openzfs.github.io/openzfs-docs/][OpenZFS Documentation]] - Official ZFS documentation
-- [[https://wiki.archlinux.org/title/ZFS][Arch Wiki - ZFS]] - Arch-specific ZFS information
-- [[https://wiki.archlinux.org/title/Archiso][Arch Wiki - Archiso]] - Building custom Arch ISOs
-- [[https://github.com/openzfs/zfs][OpenZFS on GitHub]] - ZFS source code
+- [[https://get.zfsbootmenu.org][ZFSBootMenu]] - ZFS boot manager
+- [[https://wiki.archlinux.org/title/Btrfs][Arch Wiki - Btrfs]] - Btrfs information
+- [[https://wiki.archlinux.org/title/Snapper][Arch Wiki - Snapper]] - Btrfs snapshot management
+- [[https://github.com/Antynea/grub-btrfs][grub-btrfs]] - Boot Btrfs snapshots from GRUB
* License