297 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			297 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
set -euo pipefail
 | 
						|
 | 
						|
BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")"
 | 
						|
 | 
						|
printf \
 | 
						|
	'\033[?47l\012'
 | 
						|
 | 
						|
cat << EOF
 | 
						|
#######################################
 | 
						|
##                                   ##
 | 
						|
##  $(cat "${BASEDIR}/title") Script  ##
 | 
						|
##                                   ##
 | 
						|
##   Jean  <jean@easthighnerd.net>   ##
 | 
						|
##                                   ##
 | 
						|
#######################################
 | 
						|
 | 
						|
 | 
						|
###############
 | 
						|
##           ##
 | 
						|
##  Install  ##
 | 
						|
##           ##
 | 
						|
###############
 | 
						|
 | 
						|
EOF
 | 
						|
 | 
						|
source \
 | 
						|
	/etc/os-release
 | 
						|
source \
 | 
						|
	"${BASEDIR}/system.conf"
 | 
						|
 | 
						|
if [[ ! "${DISK}" == **/dev/disk/by-id/** ]]; then
 | 
						|
	if [[ "${DISK}" == **/dev/nvme** ]]; then
 | 
						|
		PART1='p1'
 | 
						|
		PART2='p2'
 | 
						|
	else
 | 
						|
		PART1='1'
 | 
						|
		PART2='2'
 | 
						|
	fi
 | 
						|
else
 | 
						|
	PART1='-part1'
 | 
						|
	PART2='-part2'
 | 
						|
fi
 | 
						|
 | 
						|
if [[ ! -f "/etc/mtab" ]]; then
 | 
						|
	ln \
 | 
						|
		-s \
 | 
						|
		/proc/self/mounts \
 | 
						|
		/etc/mtab
 | 
						|
fi
 | 
						|
 | 
						|
if [[ "${ID}" == 'debian' ]] || [[ "${ID}" == 'elementary' ]]; then
 | 
						|
	apt \
 | 
						|
		update
 | 
						|
fi
 | 
						|
 | 
						|
if [[ "${ID}" == 'fedora' ]]; then
 | 
						|
	if [[ "${ENCRYPTION}" == 'yes' ]]; then
 | 
						|
		cat << EOF | tee /etc/dracut.conf.d/zol.conf &> /dev/null
 | 
						|
nofsck="yes"
 | 
						|
add_dracutmodules+=" zfs "
 | 
						|
omit_dracutmodules+=" btrfs "
 | 
						|
install_items+=" /etc/zfs/keys/${HOSTNAME,,}.key "
 | 
						|
EOF
 | 
						|
	else
 | 
						|
		cat <<EOF >/etc/dracut.conf.d/zol.conf
 | 
						|
nofsck="yes"
 | 
						|
add_dracutmodules+=" zfs "
 | 
						|
omit_dracutmodules+=" btrfs "
 | 
						|
EOF
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
if [[ "${ID}" == 'fedora' ]]; then
 | 
						|
	if [[ "${VERSION_ID}" -lt '41' ]]; then
 | 
						|
		dnf \
 | 
						|
			config-manager \
 | 
						|
			--disable \
 | 
						|
			updates
 | 
						|
	else
 | 
						|
		dnf \
 | 
						|
			config-manager \
 | 
						|
			setopt \
 | 
						|
			updates.enabled=0
 | 
						|
	fi
 | 
						|
 | 
						|
	dnf \
 | 
						|
		install \
 | 
						|
		-y \
 | 
						|
		https://dl.fedoraproject.org/pub/fedora/linux/releases/${VERSION_ID}/Everything/x86_64/os/Packages/k/kernel-devel-$(uname -r).rpm
 | 
						|
 | 
						|
	dnf \
 | 
						|
		--releasever=${VERSION_ID} \
 | 
						|
		install \
 | 
						|
		-y \
 | 
						|
		https://zfsonlinux.org/fedora/zfs-release-${ZOL_FEDORA_VER}$(rpm --eval "%{dist}").noarch.rpm
 | 
						|
 | 
						|
	dnf \
 | 
						|
		install \
 | 
						|
		-y \
 | 
						|
		zfs \
 | 
						|
		zfs-dracut
 | 
						|
 | 
						|
	if [[ "${VERSION_ID}" -lt '41' ]]; then
 | 
						|
		dnf \
 | 
						|
			config-manager \
 | 
						|
			--enable \
 | 
						|
			updates
 | 
						|
	else
 | 
						|
		dnf \
 | 
						|
			config-manager \
 | 
						|
			setopt \
 | 
						|
			updates.enabled=1
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
if [[ "${ID}" == 'debian' ]] || [[ "${ID}" == 'elementary' ]]; then
 | 
						|
	cat << EOF
 | 
						|
 | 
						|
Regardless of the language(s) you choose, be sure to enable 'en_US.UTF-8'!
 | 
						|
Press any key to continue...
 | 
						|
EOF
 | 
						|
 | 
						|
	read -srn 1
 | 
						|
 | 
						|
	dpkg-reconfigure \
 | 
						|
		locales \
 | 
						|
		tzdata \
 | 
						|
		keyboard-configuration \
 | 
						|
		console-setup
 | 
						|
 | 
						|
	apt install \
 | 
						|
		--yes \
 | 
						|
		zfs-initramfs
 | 
						|
fi
 | 
						|
 | 
						|
if [[ "${ID}" == 'debian' ]]; then
 | 
						|
	printf \
 | 
						|
		'REMAKE_INITRD=yes\n' | \
 | 
						|
		tee /etc/dkms/zfs.conf &> /dev/null
 | 
						|
fi
 | 
						|
 | 
						|
if [[ ! "${*}" = *--no-part* ]]; then
 | 
						|
	mkdosfs \
 | 
						|
		-F 32 \
 | 
						|
		-s 1 \
 | 
						|
		-n EFI \
 | 
						|
		${DISK}${PART1}
 | 
						|
fi
 | 
						|
 | 
						|
mkdir \
 | 
						|
	-p \
 | 
						|
	/boot/efi
 | 
						|
 | 
						|
printf \
 | 
						|
	"/dev/disk/by-uuid/$(blkid -s UUID -o value ${DISK}${PART1}) /boot/efi vfat defaults 0 0\n" | \
 | 
						|
	tee --append /etc/fstab &> /dev/null
 | 
						|
 | 
						|
sleep 5
 | 
						|
 | 
						|
mount \
 | 
						|
	/boot/efi
 | 
						|
 | 
						|
if [[ "${ID}" == 'debian' ]] || [[ "${ID}" == 'elementary' ]]; then
 | 
						|
	apt \
 | 
						|
		purge \
 | 
						|
		--yes \
 | 
						|
		os-prober
 | 
						|
fi
 | 
						|
 | 
						|
printf \
 | 
						|
	'\033[?47h\033[2J\033[H'
 | 
						|
 | 
						|
cat << EOF
 | 
						|
 | 
						|
Enter a password for the root account:
 | 
						|
EOF
 | 
						|
 | 
						|
passwd
 | 
						|
 | 
						|
printf \
 | 
						|
	'\033[?47l'
 | 
						|
 | 
						|
if [[ "${ENABLE_SWAP}" == "yes" ]]; then
 | 
						|
	printf \
 | 
						|
		"swap\t${DISK}${PART2}\t/dev/random\tswap,cipher=aes-xts-plain64,size=512\n" | \
 | 
						|
		tee /etc/crypttab &> /dev/null
 | 
						|
 | 
						|
	printf \
 | 
						|
		'dev/mapper/swap\tnone\tswap\tsw\t0\t0\n' | \
 | 
						|
		tee --append /etc/fstab &> /dev/null
 | 
						|
fi
 | 
						|
 | 
						|
if [[ "${ID}" == 'debian' ]]; then
 | 
						|
	cp \
 | 
						|
		/etc/NetworkManager/NetworkManager.conf \
 | 
						|
		/etc/NetworkManager/NetworkManager.conf.orig
 | 
						|
 | 
						|
	cat \
 | 
						|
		/etc/NetworkManager/NetworkManager.conf.orig | \
 | 
						|
		sed 's|managed=false|managed=true|' | \
 | 
						|
		tee /etc/NetworkManager/NetworkManager.conf &> /dev/null
 | 
						|
fi
 | 
						|
 | 
						|
if [[ "${ID}" == 'debian' ]] || [[ "${ID}" == 'elementary' ]]; then
 | 
						|
	printf \
 | 
						|
		"UMASK=0077\n" | \
 | 
						|
		tee /etc/initramfs-tools/conf.d/umask.conf &> /dev/null
 | 
						|
 | 
						|
	update-initramfs \
 | 
						|
		-c \
 | 
						|
		-k all
 | 
						|
elif [[ "${ID}" == 'fedora' ]]; then
 | 
						|
	dracut \
 | 
						|
		--force \
 | 
						|
		--regenerate-all
 | 
						|
fi
 | 
						|
 | 
						|
zfs \
 | 
						|
	set \
 | 
						|
	org.zfsbootmenu:commandline='quiet splash rhgb noresume' \
 | 
						|
	${HOSTNAME,,}/ROOT/${ID}
 | 
						|
 | 
						|
if [[ ! "${*}" = *--no-part* ]]; then
 | 
						|
	if [[ ! -z "$(zfs list | grep 'keystore')" ]]; then
 | 
						|
		zfs \
 | 
						|
			set \
 | 
						|
			org.zfsbootmenu:keysource=${HOSTNAME,,}/keystore \
 | 
						|
			${HOSTNAME,,}
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
if [[ ! "${*}" = *--no-part* ]]; then
 | 
						|
	mkdir \
 | 
						|
		-p \
 | 
						|
		/boot/efi/EFI/ZBM
 | 
						|
 | 
						|
	mkdir \
 | 
						|
		-p \
 | 
						|
		/boot/efi/EFI/BOOT
 | 
						|
 | 
						|
	curl \
 | 
						|
		--progress-bar \
 | 
						|
		--show-error \
 | 
						|
		--output \
 | 
						|
		/boot/efi/EFI/ZBM/VMLINUZ.EFI \
 | 
						|
		--location \
 | 
						|
		https://get.zfsbootmenu.org/efi
 | 
						|
 | 
						|
	cp \
 | 
						|
		/boot/efi/EFI/ZBM/VMLINUZ.EFI \
 | 
						|
		/boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI
 | 
						|
 | 
						|
	cp \
 | 
						|
		/boot/efi/EFI/ZBM/VMLINUZ.EFI \
 | 
						|
		/boot/efi/EFI/BOOT/BOOTX64.EFI
 | 
						|
 | 
						|
	cp \
 | 
						|
		/boot/efi/EFI/ZBM/VMLINUZ.EFI \
 | 
						|
		/boot/efi/EFI/BOOT/shellx64.efi
 | 
						|
 | 
						|
	efibootmgr \
 | 
						|
		-c \
 | 
						|
		-d "${DISK}" \
 | 
						|
		-p '1' \
 | 
						|
		-L 'ZFSBootMenu (Backup)' \
 | 
						|
		-l '\EFI\ZBM\VMLINUZ-BACKUP.EFI'
 | 
						|
 | 
						|
	efibootmgr \
 | 
						|
		-c \
 | 
						|
		-d "${DISK}" \
 | 
						|
		-p '1' \
 | 
						|
		-L 'ZFSBootMenu' \
 | 
						|
		-l '\EFI\ZBM\VMLINUZ.EFI'
 | 
						|
fi
 | 
						|
 | 
						|
if [[ "${ID}" == 'debian' ]] || [[ "${ID}" == 'elementary' ]]; then
 | 
						|
	systemctl \
 | 
						|
		enable \
 | 
						|
		zfs.target
 | 
						|
	systemctl \
 | 
						|
		enable \
 | 
						|
		zfs-import-cache
 | 
						|
	systemctl \
 | 
						|
		enable \
 | 
						|
		zfs-mount
 | 
						|
	systemctl \
 | 
						|
		enable \
 | 
						|
		zfs-import.target
 | 
						|
fi
 | 
						|
 | 
						|
zfs \
 | 
						|
	snapshot \
 | 
						|
	${HOSTNAME,,}/ROOT/${ID}@install
 | 
						|
 | 
						|
"${BASEDIR}/post-inst.sh"
 |