Preparation
Disable Secure Boot. ZFS modules can not be loaded if Secure Boot is enabled.
Download latest extended variant of Alpine Linux live image and boot from it.
Login as root user. There is no password.
Configure Internet:
setup-interfaces -r # example: network interface: wlan0 WiFi name: <ssid> ip address: dhcp <enter done to finish network config> manual netconfig: n
Configure SSH server:
setup-sshd # 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.
Set root password or
/root/.ssh/authorized_keys
.Connect from another computer:
ssh root@192.168.1.19
Configure NTP client for time synchronization:
setup-ntp chrony
Pick a mirror from Alpine Mirrors and add it to package manager configuration:
tee -a /etc/apk/repositories <<EOF https://dl-cdn.alpinelinux.org/alpine/latest-stable/community/ https://dl-cdn.alpinelinux.org/alpine/latest-stable/main/ EOF
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
.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:
DISK='/dev/disk/by-id/disk1'
Set partition size:
Set swap size, set to 1 if you don’t want swap to take up too much space:
INST_PARTSIZE_SWAP=4
Root pool size, use all remaining disk space if not set:
INST_PARTSIZE_RPOOL=
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.
Install bootloader for both legacy boot and UEFI:
apk add grub-bios grub-efi