1. Disable Secure Boot. ZFS modules can not be loaded if Secure Boot is enabled.

  2. Download latest extended variant of Alpine Linux live image and boot from it.

  3. Login as root user. There is no password.

  4. Configure Internet:

    setup-interfaces -r
    # example:
    network interface: wlan0
    WiFi name:         <ssid>
    ip address:        dhcp
    <enter done to finish network config>
    manual netconfig:  n
  5. Configure SSH server:

    # example:
    ssh server:        openssh
    allow root:        "prohibit-password" or "yes"
    ssh key:           "none" or "<public key>"

    Configurations set here will be copied verbatim to the installed system.

  6. Set root password or /root/.ssh/authorized_keys.

  7. Connect from another computer:

    ssh root@
  8. Configure NTP client for time synchronization:

    setup-ntp chrony
  9. Pick a mirror from Alpine Mirrors and add it to package manager configuration:

    tee -a /etc/apk/repositories <<EOF
  10. Throughout this guide, we use predictable disk names generated by udev:

    apk update
    apk add eudev
    setup-devd udev

    It can be removed after reboot with setup-devd mdev && apk del eudev.

  11. Target disk

    List available disks with:

    find /dev/disk/by-id/

    If using virtio as disk bus, use /dev/disk/by-path/.

    Declare disk array:

    DISK='/dev/disk/by-id/ata-FOO /dev/disk/by-id/nvme-BAR'

    For single disk installation, use:

  12. Set partition size:

    Set swap size, set to 1 if you don’t want swap to take up too much space:


    Root pool size, use all remaining disk space if not set:

  13. Install ZFS support and partition tool:

    apk add zfs zfs-lts sgdisk e2fsprogs cryptsetup util-linux
    modprobe zfs

    Many errors about firmware will appear. They are safe to be ignored.

  14. Install bootloader for both legacy boot and UEFI:

    apk add grub-bios grub-efi