.. highlight:: sh System Installation ====================== .. contents:: Table of Contents :local: #. Partition the disks:: for i in ${DISK}; do sgdisk --zap-all $i sgdisk -n1:1M:+1G -t1:EF00 $i sgdisk -n2:0:+4G -t2:BE00 $i test -z $INST_PARTSIZE_SWAP || sgdisk -n4:0:+${INST_PARTSIZE_SWAP}G -t4:8200 $i if test -z $INST_PARTSIZE_RPOOL; then sgdisk -n3:0:0 -t3:BF00 $i else sgdisk -n3:0:+${INST_PARTSIZE_RPOOL}G -t3:BF00 $i fi sgdisk -a1 -n5:24K:+1000K -t5:EF02 $i done #. Create boot pool:: zpool create \ -o compatibility=grub2 \ -o ashift=12 \ -o autotrim=on \ -O acltype=posixacl \ -O canmount=off \ -O compression=lz4 \ -O devices=off \ -O normalization=formD \ -O relatime=on \ -O xattr=sa \ -O mountpoint=/boot \ -R /mnt \ bpool \ mirror \ $(for i in ${DISK}; do printf "$i-part2 "; done) If not using a multi-disk setup, remove ``mirror``. You should not need to customize any of the options for the boot pool. GRUB does not support all of the zpool features. See ``spa_feature_names`` in `grub-core/fs/zfs/zfs.c `__. This step creates a separate boot pool for ``/boot`` with the features limited to only those that GRUB supports, allowing the root pool to use any/all features. Features enabled with ``-o compatibility=grub2`` can be seen `here `__. #. Create root pool:: zpool create \ -o ashift=12 \ -o autotrim=on \ -R /mnt \ -O acltype=posixacl \ -O canmount=off \ -O compression=zstd \ -O dnodesize=auto \ -O normalization=formD \ -O relatime=on \ -O xattr=sa \ -O mountpoint=/ \ rpool \ mirror \ $(for i in ${DISK}; do printf "$i-part3 "; done) If not using a multi-disk setup, remove ``mirror``. #. This section implements dataset layout as described in `overview <1-preparation.html>`__. Create root system container: - Unencrypted:: zfs create \ -o canmount=off \ -o mountpoint=none \ rpool/archlinux - Encrypted: Pick a strong password. Once compromised, changing password will not keep your data safe. See ``zfs-change-key(8)`` for more info:: zfs create \ -o canmount=off \ -o mountpoint=none \ -o encryption=on \ -o keylocation=prompt \ -o keyformat=passphrase \ rpool/archlinux Create system datasets:: zfs create -o canmount=on -o mountpoint=/ rpool/archlinux/root zfs create -o canmount=on -o mountpoint=/home rpool/archlinux/home zfs create -o canmount=off -o mountpoint=/var rpool/archlinux/var zfs create -o canmount=on rpool/archlinux/var/lib zfs create -o canmount=on rpool/archlinux/var/log Create boot dataset:: zfs create -o canmount=on -o mountpoint=/boot bpool/archlinux #. Format and mount ESP:: for i in ${DISK}; do mkfs.vfat -n EFI ${i}-part1 mkdir -p /mnt/boot/efis/${i##*/}-part1 mount -t vfat ${i}-part1 /mnt/boot/efis/${i##*/}-part1 done mkdir -p /mnt/boot/efi mount -t vfat $(echo $DISK | cut -f1 -d\ )-part1 /mnt/boot/efi #. Install packages:: pacstrap /mnt base vi mandoc grub efibootmgr mkinitcpio CompatibleVer=$(pacman -Si zfs-linux | grep 'Depends On' | sed "s|.*linux=||" | awk '{ print $1 }') pacstrap -U /mnt https://archive.archlinux.org/packages/l/linux/linux-${CompatibleVer}-x86_64.pkg.tar.zst pacstrap /mnt zfs-linux zfs-utils pacstrap /mnt linux-firmware intel-ucode amd-ucode