#!/bin/bash set -euo pipefail baseDir="$(realpath "$(dirname "${0}")/../")" source \ "${baseDir}/system.conf" if [[ ! "${disk}" == **/dev/disk/by-id/** ]]; then if [[ "${disk}" == **/dev/nvme** ]]; then part3='p3' else part3='3' fi else part3='-part3' fi if [[ "${encryption}" == 'yes' ]]; then zpoolPassword='A' zpoolPasswordVerify='B' printf \ '\033[?47h\033[2J\033[H' while [[ ! "${zpoolPassword}" == "${zpoolPasswordVerify}" ]] || [[ -z "${zpoolPassword}" ]] || [[ "${#zpoolPassword}" -lt '8' ]]; do printf \ "Enter a password to encrypt your root pool (minimum 8 characters):\n" read \ -r \ -s \ zpoolPassword printf \ "Verify the password to encrypt your root pool:\n" read \ -r \ -s \ zpoolPasswordVerify if [[ ! "${zpoolPassword}" == "${zpoolPasswordVerify}" ]]; then printf \ "ERROR:\tPasswords do not match!\n\n" elif [[ -z "${zpoolPassword}" ]]; then printf \ "ERROR:\tPassword is empty!\n\n" elif [[ "${#zpoolPassword}" -lt '8' ]]; then printf \ "ERROR:\tPassword is too short!\n\n" fi done printf \ '\033[?47l' mkdir \ -p \ /etc/zfs/keys/ printf \ "${zpoolPassword}\n" | tee /etc/zfs/keys/${hostname,,}.key &> /dev/null chmod \ 000 \ /etc/zfs/keys/${hostname,,}.key zpool create \ -o ashift=12 \ -o autotrim=on \ -o compatibility=openzfs-2.1-linux \ -O encryption=on \ -O keylocation=file:///etc/zfs/keys/${hostname,,}.key \ -O keyformat=passphrase \ -O acltype=posixacl \ -O xattr=sa \ -O dnodesize=auto \ -O compression=zstd-3 \ -O normalization=formD \ -O relatime=on \ -O canmount=off \ -O mountpoint=/ \ -R /mnt \ ${hostname,,} \ ${disk}${part3} else zpool create \ -o ashift=12 \ -o autotrim=on \ -o compatibility=openzfs-2.1-linux \ -O encryption=off \ -O acltype=posixacl \ -O xattr=sa \ -O dnodesize=auto \ -O compression=zstd-3 \ -O normalization=formD \ -O relatime=on \ -O canmount=off \ -O mountpoint=/ \ -R /mnt \ ${hostname,,} \ ${disk}${part3} fi