aboutsummaryrefslogtreecommitdiff
path: root/build.sh
Commit message (Collapse)AuthorAgeFilesLines
* feat(build): inject the AUR repo into the profile and live ISOCraig Jennings2026-06-091-11/+97
| | | | | | | | | | Wire build-aur.sh into build.sh. After the pacoloco block, build the AUR repo and append a build-host [aur] stanza to profile/pacman.conf with an absolute file:// Server, so mkarchiso installs the baked packages into airootfs. The stanza lands after the pacoloco rewrite so its file:// path isn't redirected to localhost. Add the audited official extra packages and the baked AUR names to packages.x86_64, both sourced from build-aur.sh so the list never drifts from the build array. Ship the repo into airootfs and write a complete live /etc/pacman.conf: the pristine releng config with [aur] appended, not an [aur]-only file, since this replaces the live system's stock config and an AUR-only one would strip the official repos. Copy the manifest beside the ISO in out/. --skip-aur skips the build, the stanza, the AUR names, and the live config. The three injection points also guard on the repo dir existing, so the documented empty-set path can't point mkarchiso at a missing repo. Moved BUILD_LOG creation ahead of the AUR build so its output is captured too. A unit test reproduces the live-config construction and asserts core, extra, the mirrorlist, and [aur] all survive. The end-to-end proof that mkarchiso installs from the build-host repo needs a real root build and is tracked as manual verification.
* fix(build): clear stale archzfs from the pacoloco cache tooCraig Jennings2026-05-221-0/+9
| | | | | | archzfs re-uploads its GitHub release assets under the same filename, so pacoloco keeps serving a zfs-dkms/zfs-utils it cached earlier while pacman fetches a fresh archzfs.db with a new checksum. The two mismatch and pacstrap aborts with "invalid or corrupted package." build.sh already drops the stale packages from the host pacman cache, but it never cleared the pacoloco layer, which the VM test installs route through too, so test-install.sh kept hitting the corruption (four times in one session). build.sh runs as root, so it now clears /var/cache/pacoloco/pkgs/archzfs/zfs-* alongside the host cache, which makes the build-then-test flow self-healing. The pacoloco cache is root-owned and test-install.sh runs as the user, so it can't clear it unattended. Instead, test-install.sh now recognizes the corruption (is_archzfs_cache_corruption) and prints how to clear it, the way it already names the SSH_PORT override on a port collision. A retry alone won't help since it hits the same cached file, so this fails fast with the hint rather than retrying.
* feat(build): route pacstrap through pacoloco when availableCraig Jennings2026-05-191-0/+19
| | | | | | | | | | | | build.sh now checks for a pacoloco caching proxy on localhost:9129 before mkarchiso runs. When pacoloco is up, build.sh rewrites the build profile's pacman.conf to point [core], [extra], and [archzfs] at the proxy. When it isn't, the build falls back to the upstream mirrors and the GitHub-releases URL it always used. The motivation is the recurring archzfs corruption that's hit ~2 of 3 builds. The earlier cache-hygiene step (db851ff) clears the host's pacman cache so pacstrap can't reuse a corrupted package between builds. Pacoloco is the next layer. It caches successful fetches, so once a known-good copy of zfs-dkms or zfs-utils lands, future builds skip the GitHub roundtrip entirely. Pacoloco doesn't validate checksums itself, so a corrupted upstream fetch still fails the build at pacstrap. Once a clean copy lands, the cache stays clean. Detection uses bash /dev/tcp (no external dependency on nc or netcat). Two sed lines rewrite the URLs in the freshly-copied profile pacman.conf. The fallback prints an info message so the operator knows which mode the build ran in. README's "Build Host Requirements" section now lists pacoloco as an optional dependency with install + enable steps. Pacoloco is from AUR (~yay -S pacoloco~). The config in /etc/pacoloco.yaml needs an archzfs repo entry, documented in the README block. I verified end-to-end: installed pacoloco, configured /etc/pacoloco.yaml for archlinux (host mirrorlist) + archzfs (GitHub releases URL), enabled the systemd service, smoke-tested with curl (archzfs.db and core.db both served 200), then ran a full build. The build completed in ~4 minutes. The info message confirmed pacoloco routing. Pacoloco's cache filled with the freshly-fetched archzfs packages (zfs-dkms-2.4.2-1, zfs-utils-2.4.2-2) plus the Arch packages that weren't already in the host pacman cache. Build log and ISO landed at the expected paired names.
* fix(build): drop cached archzfs packages before mkarchiso runsCraig Jennings2026-05-191-0/+10
| | | | | | | | | | The upstream archzfs mirror has handed us corrupted .pkg.tar.zst files several times now. Past builds aborted at pacstrap with "File X is corrupted (invalid or corrupted package (checksum))". The cached package sits in /var/cache/pacman/pkg/ between builds, so once it's bad every subsequent build fails until someone manually deletes it. I added a step right before mkarchiso that rm -f's the archzfs entries (zfs-dkms-*, zfs-utils-*) from the host pacman cache. Pacstrap fetches fresh copies on the next build. Costs ~30s of bandwidth on a warm mirror. Saves debugging a baffling pacstrap abort. The proper permanent fix is a local caching proxy (pacoloco or flexo). That lives on the Medium Lifts backlog. This commit is the cheap interim that addresses the recurring failure mode without new infrastructure. Shellcheck reports clean. The rm -f globs handle empty-match cleanly (silent return). I skipped a full build re-run since the parent commit (b4c0f72) already verified the surrounding mkarchiso path. This is a defensive prepend with no interaction surface.
* feat(build): save build logs to out/ alongside the ISOCraig Jennings2026-05-191-1/+21
| | | | | | | | | | Before this commit, mkarchiso's verbose output streamed to the terminal and disappeared. The cleanup trap removed work/ after each build, taking any captured output with it. Failed builds left no log to compare against past failures — including the recurring archzfs cache corruption that hits ~2 of 3 builds. I added a tee on the mkarchiso pipeline that writes to a log file in out/. The log starts as out/build-YYYY-MM-DD-HHMM.log, pre-created and chowned to SUDO_USER. It stays user-readable even when a failed build leaves it under that name. On success, the script renames it to match the ISO's basename so finding the log for a given ISO is a one-step lookup. set -o pipefail was already on at the top of build.sh, so mkarchiso failures still propagate through the pipe and abort the script the way they used to. No exit-code masking. I verified the change end-to-end against a real build that hit archzfs cache corruption (log captured, kept as build-2026-05-19-0325.log, user-readable) followed by a clean retry (log renamed to archangel-2026-05-19-vmlinuz-6.18.29-lts-x86_64.log, paired with the ISO).
* feat: consolidate zfssnapshot and zfsrollback into one subcommand-driven scriptCraig Jennings2026-04-271-6/+2
| | | | | | | | | | | | Problem: zfssnapshot and zfsrollback were two separate scripts with overlapping pre-flight checks (zfs / fzf / root) and parallel UX patterns (description sanitization in one, fzf selection in the other). Users had to remember which script was for which operation, and a "list" view meant typing the raw `zfs list -t snapshot` command. There was no path to destroy individual snapshots short of `zfs destroy` directly, which is dangerous without a confirmation flow. Solution: rewrite zfssnapshot as a single multi-subcommand script (list, create, rollback, delete). Drop installer/zfsrollback. The new script uses a source-guard at the bottom (`if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then main "$@"; fi`) so bats can source it without triggering the install-time pre-flight checks, matching the pattern in installer/archangel. Pure helpers (sanitize_description, validate_description, format_snapshot_name) get extracted as named functions so they're testable in isolation. The destructive flows (rollback, delete) keep the explicit "yes" confirmation prompt, the genesis-snapshot warning, and the recursive-rollback-destroys-newer-snapshots warning. Delete uses fzf --multi so the user can pick several snapshot names at once. Updated build.sh to copy only the consolidated script. Dropped the zfsrollback profiledef permission line. Updated Makefile, README, scripts/sanity-test.sh, and testing-strategy.org to reflect the single-script layout. Bats: 147 → 168 (+21). Coverage spans sanitize_description (normal / boundary / error), validate_description (alphanumerics, hyphens, underscores accepted; spaces, slashes, shell metacharacters, empty rejected), format_snapshot_name (timestamp + description composition), and main subcommand dispatch (list / create / rollback / delete / help / unknown). Lint clean. The zfs-, fzf-, and arch-chroot-shelling subcommand bodies stay VM-tested per testing-strategy.org.
* fix: cleanup on empty findmnt + stale profiledef entriesCraig Jennings2026-04-211-3/+5
| | | | | | | | | | | | | | | | | | | | | | | Two pre-existing build.sh bugs surfaced while rebuilding the ISO for the first time since the April lib/ refactor. 1. safe_cleanup_work_dir runs findmnt | grep | sort in a command substitution. When no mounts match (the common case — this is a defensive sweep on top of the explicit known-mount loop), grep exits 1, pipefail propagates it, set -e exits the script. The trap then reports "Build interrupted or failed" and the build aborts before doing any work. Swallow the grep status with || true; no-match is not an error here. 2. The profiledef.sh file_permissions seds drifted out of sync with the lib/ refactor: - lib/zfs.sh was removed in 3321f0f but its sed block stayed, producing a warning every build ("Cannot change permissions of '.../lib/zfs.sh': no such file"). - lib/raid.sh was added in 19f4624 without a corresponding sed, so the file shipped with whatever permissions cp gave it. Drop the zfs.sh block and add the raid.sh block.
* refactor: dedupe findmnt invocation in safe_cleanup_work_dirCraig Jennings2026-04-131-4/+8
| | | | | | | | | | | The catch-all mount-cleanup block called findmnt twice (once as an existence guard, once in the pipe). Consolidate to a single call captured to a local, guard with -n test. No behavior change — same mounts, same order, same lazy-unmount. Left the explicit known-mount loop alone; it's a faster path for the deterministic mkarchiso bind mounts, with findmnt as the catch-all for anything else. Not parallel strategies, just fast path + fallback.
* fix: migrate archzfs repo from stale archzfs.com to GitHub ReleasesCraig Jennings2026-04-091-2/+2
| | | | | archzfs.com was abandoned mid-2025; latest packages were ZFS 2.3.2 for kernel 6.12.29. The new GitHub-hosted repo has ZFS 2.4.1 for 6.18.21.
* feat: add preflight checks, rename ISO format, use Makefile targets in docsCraig Jennings2026-02-231-5/+11
| | | | | | | - Add Arch Linux and disk space preflight checks to build.sh - Rename ISO format: archangel-YYYY-MM-DD-vmlinuz-version-lts-x86_64.iso - Update README to use Makefile targets throughout (make build, make clean) - Note preflight checks in Prerequisites section
* refactor: rename custom/ to installer/ for clarityCraig Jennings2026-02-231-8/+8
| | | | | | | | The custom/ directory name was an archiso implementation detail. Renamed to installer/ which clearly communicates that this directory contains the installer scripts and utilities that ship on the ISO. Updated all references in build.sh, Makefile, test-install.sh, and README.
* chore: add set -euo pipefail to scripts for safetyCraig Jennings2026-02-231-2/+2
| | | | | | Enable undefined variable checking (set -u) and pipefail across standalone scripts. Guard SUDO_USER references with ${SUDO_USER:-} for set -u compatibility.
* scrub personal info and make distribution targets configurableCraig Jennings2026-02-231-2/+2
| | | | | | | Remove personal email addresses, hardcoded paths, and infrastructure references to prepare for open-source release. Distribution targets in build-release are now configurable via environment variables, and archsetup inclusion is opt-in.
* fix: change archzfs SigLevel from Optional TrustAll to NeverCraig Jennings2026-02-231-1/+3
| | | | | | Optional TrustAll is misleading — it implies signature checking when none is actually happening. Use Never to match the installer and be explicit. Repo is served over HTTPS; GPG adds no value in build env.
* chore: standardize shebangs, fix lint target, add .editorconfigCraig Jennings2026-02-231-1/+1
| | | | | | | - Change all script shebangs to #!/usr/bin/env bash for portability (heredocs writing to installed systems keep #!/bin/bash) - Remove || true from Makefile lint target so shellcheck errors fail the build - Add .editorconfig for consistent formatting across editors
* clean personal info and private files from repositoryCraig Jennings2026-02-221-2/+3
| | | | | | | | | | - Remove personal hardware specs, machine-specific troubleshooting docs, and video transcript from assets/ - Remove stale PLAN-zfsbootmenu-implementation.org (feature complete) - Remove .stignore (Syncthing config, not project-relevant) - Untrack todo.org (personal task tracker with private infra details) - Make archsetup path configurable via ARCHSETUP_DIR env var in build.sh - Use $REAL_USER instead of hardcoded username in build-release scp
* remove skeleton archsetup-zfs scriptCraig Jennings2026-02-221-5/+0
| | | | | Non-functional stub that printed "this is a skeleton" — worse than not having it. Removed from build.sh, Makefile, and file permissions.
* refactor: rename archzfs to archangel, simplify build-releaseCraig Jennings2026-01-311-10/+11
| | | | | | | | - 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
* Fix LUKS btrfs installation and reduce ISO sizeCraig Jennings2026-01-241-4/+9
| | | | | | | | | | | | | - 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.
* Phase 2.1: Implement btrfs supportCraig Jennings2026-01-231-0/+3
| | | | | | | | | | | - 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)
* Phase 1.5: Rename to archangelCraig Jennings2026-01-231-4/+4
| | | | | | | | | | | - 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.
* Fix build.sh to include lib/ directory in ISOCraig Jennings2026-01-231-0/+13
| | | | | | - Copy custom/lib/ to /usr/local/bin/lib/ in airootfs - Add file permissions for lib/*.sh files - Required for refactored install-archzfs to work
* Replace GRUB with ZFSBootMenu bootloaderCraig Jennings2026-01-221-17/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Restore file ownership after build and rename todo.orgCraig Jennings2026-01-211-0/+7
| | | | | | | - 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
* Fix mDNS, hostname, and build safetyCraig Jennings2026-01-201-5/+109
| | | | | | | | - 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
* Add Avahi mDNS for easy SSH access, fix ISP firmware pathCraig Jennings2026-01-191-0/+13
| | | | | | | - 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 zfssnapshot and zfsrollback scripts to ISOCraig Jennings2026-01-191-0/+11
| | | | | | | | | | | | | | | | 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
* Add eBPF tracing tools and w3m terminal browserCraig Jennings2026-01-191-0/+8
| | | | | | | | | | | | | 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
* Make ZFS encryption optional with interactive promptCraig Jennings2026-01-181-0/+2
| | | | | | | | | 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.
* Remove AUR-only packages from ISO buildCraig Jennings2026-01-181-4/+0
| | | | | | | Removed safecopy, ms-sys, dislocker, and nwipe as they are only available in the AUR and cannot be installed during mkarchiso build. These tools are still documented in RESCUE-GUIDE.txt with AUR installation instructions for users who need them.
* Add utility tools and rescue guide documentationCraig Jennings2026-01-181-0/+11
| | | | | | | | | | | | | | | | | | | Packages added: - iotop: disk I/O monitor by process - ncdu: interactive disk usage analyzer - tree: directory tree viewer - speedtest-cli: internet speed test - mosh: mobile shell (survives disconnects) - aria2: multi-protocol downloader with resume - tmate: terminal sharing for remote assistance - sshuttle: VPN over SSH - pass: password manager Rescue guide expanded: - Section 5: iotop for finding disk I/O culprits - Section 6: ncdu and tree for disk space analysis - Section 7: speedtest-cli, mosh, aria2, tmate, sshuttle - Section 8: pass password manager access
* Add network diagnostics tools and rescue guide documentationCraig Jennings2026-01-181-0/+11
| | | | | | | | | | | | | | | | | | | | | | Packages added: - mtr: combined ping + traceroute - iperf3: bandwidth testing - iftop: live bandwidth monitor by connection - nethogs: bandwidth monitor by process - ethtool: NIC configuration and diagnostics - tcpdump: packet capture - bind: dig/nslookup DNS tools - nmap: network scanner - wireshark-cli: tshark packet analysis Rescue guide section 7 expanded with scenarios for: - Network path analysis with mtr - Bandwidth testing with iperf3 - Live monitoring with iftop and nethogs - Interface diagnostics with ethtool - Packet capture with tcpdump - Network scanning with nmap - Deep packet analysis with tshark
* Add disk, network, and encryption tools with rescue guide sectionsCraig Jennings2026-01-181-0/+11
| | | | | | | | | | | | | Packages added: - partimage: legacy partition imaging - f2fs-tools: Flash-Friendly FS support - exfatprogs: exFAT filesystem tools - emacs: editor Rescue guide sections 6-8: - Disk Operations: partclone, fsarchiver, nwipe, filesystem tools - Network Troubleshooting: connectivity, sshfs, file transfers - Encryption & GPG: symmetric/asymmetric decryption, LUKS, eCryptfs
* Add hardware diagnostics tools and rescue guide sectionCraig Jennings2026-01-181-0/+9
| | | | | | | | | | | | | | | | | | | | Packages added: - memtester: userspace memory testing - stress-ng: CPU/memory/IO stress testing - lm_sensors: temperature/fan/voltage monitoring - lshw: detailed hardware inventory - dmidecode: SMBIOS/DMI system information - nvme-cli: NVMe drive management - hdparm: HDD/SSD parameter tuning Rescue guide Section 5 covers: - SMART disk health monitoring - Memory testing with memtester - System stress testing - Temperature monitoring with sensors - Hardware inventory commands - Disk benchmarking - Bad block checking
* Add Windows recovery tools and rescue guide sectionCraig Jennings2026-01-181-0/+6
| | | | | | | | | | | | | | Packages added: chntpw, ntfs-3g, dislocker, hivex Rescue guide section 4 covers: - Mounting NTFS partitions (including hibernated) - Reset/blank Windows passwords with chntpw - Unlock disabled accounts, promote to admin - Access BitLocker drives with dislocker - Copy files from non-booting Windows - Edit Windows registry with hivex - Offline malware scanning with ClamAV - Disable Fast Startup from Linux
* Add boot repair tools and rescue guide sectionCraig Jennings2026-01-181-0/+5
| | | | | | | | | | | | | | Packages added: os-prober, syslinux, ms-sys Rescue guide section 3 covers: - Chroot into broken system (including ZFS) - Reinstall GRUB (UEFI and Legacy) - Fix UEFI boot entries with efibootmgr - Rebuild initramfs with mkinitcpio - Dual-boot GRUB/Windows with os-prober - Restore Windows MBR with ms-sys - ZFS-specific boot issues (hostid, hooks) - Emergency GRUB command line boot
* Add data recovery tools and rescue guide sectionCraig Jennings2026-01-181-0/+8
| | | | | | | | | | | | | Packages added: ddrescue, testdisk, foremost, sleuthkit, safecopy, smartmontools Rescue guide section 2 covers: - SMART health assessment - ddrescue for cloning failing drives - PhotoRec/TestDisk for file/partition recovery - Foremost for file carving - Filesystem repair (ext4, NTFS, XFS, FAT) - Mounting disk images - Safecopy for very damaged media
* Add rescue tools and ZFS rescue guideCraig Jennings2026-01-181-0/+26
| | | | | | | - Add tealdeer, pv, rsync, mbuffer, lsof to ISO packages - Pre-populate tealdeer cache during build for offline tldr - Create RESCUE-GUIDE.txt with comprehensive ZFS recovery section - Copy rescue guide to /root/ on ISO
* Add snapshot retention with automatic pruningCraig Jennings2026-01-181-0/+7
| | | | | | | | | | | | | | | | | 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/+10
| | | | | | | | | | 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/+13
| | | | | | | | | | | | | | | | 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
* Add config file support for unattended installationsCraig Jennings2026-01-181-0/+4
| | | | | | | | | | | | | | | | | | 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
* Add multi-disk RAID, SSH config, stripe option, remove colorsCraig Jennings2026-01-171-65/+99
| | | | | | | | | | | - 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/+188
Build scripts for creating custom Arch Linux ISO with ZFS support. Includes installer scripts and VM testing setup.