aboutsummaryrefslogtreecommitdiff
path: root/custom
Commit message (Collapse)AuthorAgeFilesLines
* chore: standardize shebangs, fix lint target, add .editorconfigCraig Jennings2026-02-232-2/+2
| | | | | | | - 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
* fix: correct broken shebangs in zfssnapshot and zfsrollbackCraig Jennings2026-02-222-2/+2
| | | | #!/bin/env bash doesn't exist — changed to #!/usr/bin/env bash.
* remove skeleton archsetup-zfs scriptCraig Jennings2026-02-221-438/+0
| | | | | Non-functional stub that printed "this is a skeleton" — worse than not having it. Removed from build.sh, Makefile, and file permissions.
* fix: archzfs key prompt hang, test false positive, add local distributionCraig Jennings2026-02-121-11/+5
| | | | | | | | | - Change archzfs SigLevel to Never (pacstrap -K empty keyring caused interactive GPG prompt blocking unattended installs) - Fix pgrep matching avahi-daemon's [archangel.local] in full-test.sh - Bump install timeout to 30min for DKMS builds - Add ~/downloads/isos and archsetup inbox to build-release distribution - Sync templates
* refactor: rename archzfs to archangel, simplify build-releaseCraig Jennings2026-01-311-4/+4
| | | | | | | | - 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
* refactor: remove archsetup references, make installer standaloneCraig Jennings2026-01-252-20/+7
| | | | | | | - Remove copy_archsetup function and calls from ZFS/Btrfs paths - Update SSH hardening messages to generic advice - Change sanoid references to tips without archsetup dependency - Improve filesystem dialog descriptions
* Add LUKS testing infrastructure and documentationCraig Jennings2026-01-252-5/+64
| | | | | | | | | | | | - Add setup_luks_testing_keyfile() for automated LUKS testing - Modify configure_crypttab() and configure_luks_initramfs() for keyfile support - Fix configure_btrfs_initramfs() to preserve encrypt hook when LUKS enabled - Add TESTING=yes to LUKS test configs - Create docs/TESTING-STRATEGY.org documenting testing approach LUKS automated reboot testing remains a work-in-progress due to complexity of sending passphrase to initramfs encrypt hook. Non-LUKS tests all pass: btrfs-single, btrfs-mirror, btrfs-stripe.
* Update test config and documentationCraig Jennings2026-01-251-2/+22
| | | | | | - Add NO_ENCRYPT=yes to btrfs-single.conf for unattended testing - Add offline Arch Wiki documentation section to RESCUE-GUIDE.txt - Update todo.org with completed tasks and new items
* Fix GRUB boot for btrfs with subvolumesCraig Jennings2026-01-251-11/+21
| | | | | | | | | | - Store GRUB modules on EFI partition (FAT32) to avoid btrfs subvolume path prefix issues (/@/boot/grub not found) - Create symlink /boot/grub -> /efi/grub for grub-btrfs compatibility - Add sync after grub-mkconfig to ensure FAT32 write completion - Add sync before unmounting to prevent data loss on VM shutdown - Update snapper-firstboot to use /efi/grub/grub.cfg path - Update multi-disk GRUB functions for consistency
* Fix LUKS encryption for btrfs (single and multi-disk)Craig Jennings2026-01-241-13/+13
| | | | | | | - Use -d - flag for cryptsetup stdin key input (matches easy-arch) - Change ((i++)) to ((++i)) to avoid set -e exit on 0 increment - Add btrfs-mirror-luks test config - Update status protocol with sound notifications
* Phase 3: Add multi-disk btrfs support (RAID0/RAID1)Craig Jennings2026-01-242-37/+322
| | | | | | | | - RAID1 (mirror) and RAID0 (stripe) for 2+ disks - Multi-disk LUKS with single passphrase prompt - EFI redundancy: GRUB installed on all disks - Pacman hook syncs GRUB updates across EFI partitions - btrfs initramfs hook for multi-device assembly at boot
* Fix LUKS btrfs installation and reduce ISO sizeCraig Jennings2026-01-241-1/+23
| | | | | | | | | | | | | - 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.8: Add LUKS encryption for btrfsCraig Jennings2026-01-243-8/+186
| | | | | | | | | | | | | - Add LUKS functions to btrfs.sh (create/open/close container) - Add crypttab configuration for boot - Add encrypt hook to mkinitcpio HOOKS - Add cryptdevice parameter to GRUB cmdline - Add get_btrfs_encryption_choice and get_luks_passphrase prompts - Add LUKS_PASSPHRASE to config variables - Update show_summary and print_btrfs_summary for encryption status - Add btrfs-luks.conf test config VM test pending.
* Fix btrfs GRUB boot and snapper firstbootCraig Jennings2026-01-241-84/+93
| | | | | | | | | | - Add GRUB serial console configuration for headless/VM testing - Add GRUB_BTRFS_OVERRIDE_BOOT_PARTITION_DETECTION for btrfs - Fix snapper-firstboot script (use echo instead of HEREDOC) - Add dbus.service dependency to firstboot service - Remove duplicate rootflags from GRUB_CMDLINE_LINUX VM test verified: GRUB boots, all subvolumes mount, snapper works.
* Fix btrfs bugs from VM testingCraig Jennings2026-01-231-19/+35
| | | | | | | | | | | - Fix GRUB config path (remove GRUB_BTRFS_GRUB_DIRNAME, use default) - Create snapper config manually (D-Bus not available in chroot) - Create genesis snapshot with btrfs command (not snapper) - Add btrfs-single.conf test config - Update test-install.sh to copy lib/ directory - Update test-install.sh to handle btrfs verification VM test now passes for btrfs single-disk installation.
* Phase 2.1: Implement btrfs supportCraig Jennings2026-01-233-15/+584
| | | | | | | | | | | - 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-232-8/+10
| | | | | | | | | | | - 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.
* Phase 1.4: Add filesystem selection promptCraig Jennings2026-01-234-12/+82
| | | | | | | | | | | | | - 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.
* Fix set -e compatibility in lib functionsCraig Jennings2026-01-234-11/+17
| | | | | | | | | - Replace [[ ]] && 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 && short-circuit returns exit code 1 when condition is false, triggering set -e to abort.
* Phase 1.1: Create lib/ directory structure for archangel refactorCraig Jennings2026-01-235-81/+826
| | | | | | | | | | | - 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).
* Replace GRUB with ZFSBootMenu bootloaderCraig Jennings2026-01-227-547/+102
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Fix zfsrollback to process children before parentsCraig Jennings2026-01-191-2/+3
| | | | | | 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.
* Fix grub-zfs-snap command substitution syntax errorCraig Jennings2026-01-191-1/+1
| | | | | | | | | 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.
* Increase fzf height in zfsrollback to 70%Craig Jennings2026-01-191-3/+3
| | | | | 40% was too small on console, showing only ~2 lines. 70% gives roughly 2/3 of screen for snapshot selection.
* 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.
* Add zfssnapshot and zfsrollback scripts to ISOCraig Jennings2026-01-192-0/+294
| | | | | | | | | | | | | | | | 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/+158
| | | | | | | | | | | | | 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
* 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-182-11/+43
| | | | | | | | | 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 utility tools and rescue guide documentationCraig Jennings2026-01-181-0/+355
| | | | | | | | | | | | | | | | | | | 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-9/+342
| | | | | | | | | | | | | | | | | | | | | | 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-2/+685
| | | | | | | | | | | | | 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-1/+209
| | | | | | | | | | | | | | | | | | | | 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-1/+228
| | | | | | | | | | | | | | 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-1/+217
| | | | | | | | | | | | | | 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