aboutsummaryrefslogtreecommitdiff
path: root/custom/install-archzfs
Commit message (Collapse)AuthorAgeFilesLines
* Replace GRUB with ZFSBootMenu bootloaderCraig Jennings2026-01-221-129/+98
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Fix ratio boot issues: firmware, mkinitcpio, and document ZFS rollback dangersCraig Jennings2026-01-221-0/+26
| | | | | | | | | | | | | | | | | 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
* Fix ZFS boot failures: service conflicts, cachefile, and GRUB duplicate rootCraig Jennings2026-01-211-3/+10
| | | | | | | | | | | | | | | | | | 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).
* Use zfs-import-scan instead of zfs-import-cache for bootCraig Jennings2026-01-211-12/+7
| | | | | | | | | | | | | | | 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.
* Fix ZFS boot failure: set cachefile property after pool creationCraig Jennings2026-01-201-0/+7
| | | | | | | - 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 Avahi mDNS to installed systems for network discoveryCraig Jennings2026-01-191-0/+3
| | | | | | | | 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.
* Fix hostid mismatch bug that prevented booting installed systemsCraig Jennings2026-01-191-8/+10
| | | | | | | | | | | | | | | | | | 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.
* Add Avahi mDNS for easy SSH access, fix ISP firmware pathCraig Jennings2026-01-191-1/+3
| | | | | | | - 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 wireless-regdb for proper WiFi regulatory complianceCraig Jennings2026-01-191-1/+2
|
* Add AMD ISP firmware to initramfs for APUs with camerasCraig Jennings2026-01-191-0/+17
|
* Fix journald on ZFS: wait for mounts, enable persistent storageCraig Jennings2026-01-191-0/+17
|
* Add wget to target system packagesCraig Jennings2026-01-191-1/+2
|
* Add comprehensive installation tests and ZFS script deploymentCraig Jennings2026-01-191-2/+7
| | | | | | | - 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
* Add fzf to target system packagesCraig Jennings2026-01-191-1/+2
| | | | | Required for zfsrollback interactive snapshot selection to work on freshly installed systems before archsetup runs.
* Fix EFI_PART typo causing empty UUID in fstabCraig Jennings2026-01-181-1/+1
| | | | | | | | Used $EFI_PART (undefined) instead of ${EFI_PARTS[0]} when generating fstab, resulting in empty/wrong UUID for /boot mount. This caused "Timed out waiting for device /dev/disk/by-uuid" on boot of newly installed systems.
* Remove autodetect hook from mkinitcpio for bare metal compatibilityCraig Jennings2026-01-181-2/+4
| | | | | | | | | | | | The autodetect hook filters modules based on currently loaded hardware, which when running from a live ISO means the target system's storage drivers (NVMe, AHCI, etc.) may not be included in the initramfs. This caused boot failures on bare metal with "Timed out waiting for device /dev/disk/by-uuid" because the disk controller wasn't detected. Removing autodetect includes all storage drivers, making the initramfs larger but ensuring compatibility with any hardware configuration.
* Include timestamp in install-archzfs log filenameCraig Jennings2026-01-181-1/+1
|
* Add timestamp header to install-archzfs.logCraig Jennings2026-01-181-0/+7
|
* Make ZFS encryption optional with interactive promptCraig Jennings2026-01-181-9/+36
| | | | | | | | | Add get_encryption_choice() to ask user whether to enable encryption during interactive install. Remove --no-encrypt CLI flag in favor of config file NO_ENCRYPT option for unattended installs. Update tests to rely on config file setting instead of flag. Also: fix ISO label to ARCHZFS for stable GRUB entries, add TODO items.
* Add --no-encrypt flag for testing without encryptionCraig Jennings2026-01-181-20/+45
| | | | | | | | | | | Allows CI/CD testing without ZFS encryption passphrase prompts: - --no-encrypt flag on command line - NO_ENCRYPT=yes in config file - Skips passphrase prompt in interactive mode - Creates pool without encryption options This enables fully automated VM testing without needing to enter passphrase at boot time.
* Add snapshot retention with automatic pruningCraig Jennings2026-01-181-0/+46
| | | | | | | | | | | | | | | | | Implements hybrid retention policy: - Always keep 20 most recent snapshots - Delete snapshots beyond #20 only if older than 180 days - Genesis snapshot is always protected Features: - zfs-snap-prune script with --dry-run, --test, --verbose modes - Comprehensive test suite (22 tests) - Runs automatically after pacman operations - Daily systemd timer for cleanup - Regenerates GRUB menu after pruning This prevents unbounded snapshot growth while preserving recent history and the genesis snapshot.
* Add grub-zfs-snap for ZFS snapshot boot entriesCraig Jennings2026-01-181-0/+21
| | | | | | | | | | Add ability to boot into ZFS snapshots directly from GRUB menu: - grub-zfs-snap: generates GRUB submenu entries for recent snapshots - 40_zfs_snapshots: GRUB generator script installed to /etc/grub.d/ - zz-grub-zfs-snap.hook: pacman hook for automatic GRUB regeneration The GRUB menu automatically updates after kernel/ZFS package changes. Up to 10 most recent snapshots appear in a "ZFS Snapshots" submenu.
* Fix ZFS boot failure and update ISO naming formatCraig Jennings2026-01-181-1/+20
| | | | | | | | | | | | | | | | Bug fixes: - Fix depmod using wrong kernel version during initramfs generation The script now explicitly specifies the installed kernel version instead of relying on uname -r (which returns the live ISO kernel) - Add kernel module verification before mkinitcpio - Add hostid 0x prefix to spl.spl_hostid kernel parameter ISO naming: - Changed format to: archzfs-vmlinuz-{version}-lts-{date}-{arch}.iso - Example: archzfs-vmlinuz-6.12.65-lts-2026-01-18-x86_64.iso test-vm.sh: - Add QEMU monitor socket for automation support
* Fix unattended mode exit issue (return 0)Craig Jennings2026-01-181-1/+1
| | | | | | | | | Bug: In gather_input(), the line `[[ -n "$WIFI_SSID" ]] && info "..."` returns exit code 1 when WIFI_SSID is empty. The subsequent bare `return` inherits this exit code, causing the script to exit with set -e. Fix: Use explicit `return 0` to ensure gather_input returns success.
* Add config file support for unattended installationsCraig Jennings2026-01-181-4/+123
| | | | | | | | | | | | | | | | | | Features: - --config-file option for automated installs - Example config at /root/install-archzfs.conf.example - Validates required fields before install - Config only used when explicitly specified (safety) Bug fixes: - Fix pacstrap hanging on provider prompts (use yes pipe) - Remove fsck from mkinitcpio HOOKS (ZFS doesn't use fsck) - Add hostid support for ZFS boot - Add spl.spl_hostid to kernel command line Documentation: - Comprehensive README.org with 15 sections - Session context tracking file
* Remove Next Steps section from install summaryCraig Jennings2026-01-181-6/+0
|
* Fix fzf selections: disk parsing, WiFi, show all locales/keymapsCraig Jennings2026-01-181-11/+41
| | | | | | | - Fix disk selection awk parsing for empty MODEL field - Add fzf-based WiFi network selection with signal/security preview - Remove pre-filter on locale/keymap so all options visible - Add helpful header hints for searching
* Add fzf-based interface for all selectionsCraig Jennings2026-01-171-106/+230
| | | | | | | | | | - Timezone: fuzzy search with current time preview - Locale: fuzzy search with format examples - Keymap: fuzzy search with layout info - Disk selection: multi-select with disk details preview - RAID level: explanatory preview with capacity calculations Provides consistent, searchable interface with inline documentation.
* Default WiFi configuration to yesCraig Jennings2026-01-171-2/+2
|
* Add multi-disk RAID, SSH config, stripe option, remove colorsCraig Jennings2026-01-171-413/+586
| | | | | | | | | | | - Multi-disk RAID support: mirror, stripe, raidz1/2/3 - EFI partitions on all disks for boot redundancy - SSH configuration prompt (default yes) with sshd enabled - Stripe option for max capacity without redundancy - Genesis snapshot with rollback-to-genesis script - NetworkManager added to ISO for WiFi config - Remove color codes for better terminal compatibility - archsetup launcher via curl
* Initial commit: archzfs ISO build systemCraig Jennings2026-01-171-0/+831
Build scripts for creating custom Arch Linux ISO with ZFS support. Includes installer scripts and VM testing setup.