Compare commits
	
		
			23 Commits
		
	
	
		
			39065008aa
			...
			pre-instal
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						e513fe2c60
	
				 | 
					
					
						|||
| 
						
						
							
						
						8a78dd7f96
	
				 | 
					
					
						|||
| 
						
						
							
						
						bee95926b7
	
				 | 
					
					
						|||
| 
						
						
							
						
						67763d1b39
	
				 | 
					
					
						|||
| 
						
						
							
						
						203a09eb05
	
				 | 
					
					
						|||
| 
						
						
							
						
						5b4a77f615
	
				 | 
					
					
						|||
| 
						
						
							
						
						939359b94e
	
				 | 
					
					
						|||
| 
						
						
							
						
						12beaaf5d2
	
				 | 
					
					
						|||
| 
						
						
							
						
						211a0413f5
	
				 | 
					
					
						|||
| 
						
						
							
						
						7ba4a4f60f
	
				 | 
					
					
						|||
| 
						
						
							
						
						328b02a294
	
				 | 
					
					
						|||
| 
						
						
							
						
						a36854c208
	
				 | 
					
					
						|||
| 
						
						
							
						
						6268d684c6
	
				 | 
					
					
						|||
| 
						
						
							
						
						ee48fb7560
	
				 | 
					
					
						|||
| 
						
						
							
						
						bba89f8185
	
				 | 
					
					
						|||
| 
						
						
							
						
						802fa4f3c8
	
				 | 
					
					
						|||
| 
						
						
							
						
						26f59f4a91
	
				 | 
					
					
						|||
| 
						
						
							
						
						ae6fc22074
	
				 | 
					
					
						|||
| 
						
						
							
						
						7244296734
	
				 | 
					
					
						|||
| 
						
						
							
						
						817653120c
	
				 | 
					
					
						|||
| 
						
						
							
						
						33435e5903
	
				 | 
					
					
						|||
| 
						
						
							
						
						62861d8c7b
	
				 | 
					
					
						|||
| 
						
						
							
						
						7442994d18
	
				 | 
					
					
						
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,2 +1,3 @@
 | 
			
		||||
archive.sh
 | 
			
		||||
system.conf
 | 
			
		||||
*kate-swp
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										89
									
								
								base-debian.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										89
									
								
								base-debian.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
 | 
			
		||||
BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")"
 | 
			
		||||
 | 
			
		||||
source \
 | 
			
		||||
	/etc/os-release
 | 
			
		||||
source \
 | 
			
		||||
	"${BASEDIR}/system.conf"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if [[ "${1}" == '-1' ]]; then
 | 
			
		||||
	packages=(\
 | 
			
		||||
console-setup \
 | 
			
		||||
cryptsetup \
 | 
			
		||||
curl \
 | 
			
		||||
dosfstools \
 | 
			
		||||
dpkg-dev \
 | 
			
		||||
efibootmgr \
 | 
			
		||||
ethtool \
 | 
			
		||||
firmware-{ast,atheros,bnx{2,2x},brcm80211,iwlwifi,libertas,linux,realtek,zd1211} \
 | 
			
		||||
flatpak \
 | 
			
		||||
keyboard-configuration \
 | 
			
		||||
linux-{headers,image}-amd64 \
 | 
			
		||||
locales \
 | 
			
		||||
nano \
 | 
			
		||||
network-manager \
 | 
			
		||||
openssh-{client,server} \
 | 
			
		||||
popularity-contest \
 | 
			
		||||
printer-driver-all \
 | 
			
		||||
systemd-timesyncd \
 | 
			
		||||
tasksel \
 | 
			
		||||
zfs-initramfs \
 | 
			
		||||
zstd\
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
	include="--include=${packages[0]}"
 | 
			
		||||
 | 
			
		||||
	for ((i=1;i<${#packages[@]};i++)); do
 | 
			
		||||
		include+=" --include=${packages[${i}]}"
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	mmdebstrap \
 | 
			
		||||
		--skip=check/empty \
 | 
			
		||||
		--components=main,non-free-firmware,contrib \
 | 
			
		||||
		--mode=root \
 | 
			
		||||
		--format=directory \
 | 
			
		||||
		${include} \
 | 
			
		||||
		"${VERSION_CODENAME}" \
 | 
			
		||||
		/mnt
 | 
			
		||||
elif [[ "${1}" == '-2' ]]; then
 | 
			
		||||
	NETWORK_INTERFACE=($(ip -br addr show | sed 's| .*$||g' | grep -v '^lo' | grep -v 'tailscale' | grep -v '^wg'))
 | 
			
		||||
	shopt -s extglob
 | 
			
		||||
 | 
			
		||||
	for ((i = 0; i < ${#NETWORK_INTERFACE[@]}; i++)); do
 | 
			
		||||
		cat << EOF | tee /mnt/etc/network/interfaces.d/${NETWORK_INTERFACE[$i]} &> /dev/null
 | 
			
		||||
allow-hotplug	${NETWORK_INTERFACE[$i]}
 | 
			
		||||
iface		${NETWORK_INTERFACE[$i]}	inet	dhcp
 | 
			
		||||
EOF
 | 
			
		||||
	done
 | 
			
		||||
elif [[ "${1}" == '-3' ]]; then
 | 
			
		||||
	cat << EOF | tee /mnt/etc/apt/sources.list.d/${VERSION_CODENAME}.sources &> /dev/null
 | 
			
		||||
# ${VERSION_CODENAME^}
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb deb-src
 | 
			
		||||
URIs:			http://deb.debian.org/debian/
 | 
			
		||||
Suites:			${VERSION_CODENAME}
 | 
			
		||||
Components:		main non-free-firmware contrib
 | 
			
		||||
Signed-By:		/usr/share/keyrings/debian-archive-keyring.gpg
 | 
			
		||||
 | 
			
		||||
# ${VERSION_CODENAME^} Security
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb deb-src
 | 
			
		||||
URIs:			http://deb.debian.org/debian-security/
 | 
			
		||||
Suites:			${VERSION_CODENAME}-security
 | 
			
		||||
Components:		main non-free-firmware contrib
 | 
			
		||||
Signed-By:		/usr/share/keyrings/debian-archive-keyring.gpg
 | 
			
		||||
 | 
			
		||||
# ${VERSION_CODENAME^} Updates
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb deb-src
 | 
			
		||||
URIs:			http://deb.debian.org/debian/
 | 
			
		||||
Suites:			${VERSION_CODENAME}-updates
 | 
			
		||||
Components:		main non-free-firmware contrib
 | 
			
		||||
Signed-By:		/usr/share/keyrings/debian-archive-keyring.gpg
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
	rm /mnt/etc/apt/sources.list
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										105
									
								
								base-elementary.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										105
									
								
								base-elementary.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,105 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
 | 
			
		||||
BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")"
 | 
			
		||||
 | 
			
		||||
source \
 | 
			
		||||
	/etc/os-release
 | 
			
		||||
source \
 | 
			
		||||
	"${BASEDIR}/system.conf"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if [[ "${1}" == '-1' ]]; then
 | 
			
		||||
	packages=(\
 | 
			
		||||
console-setup \
 | 
			
		||||
cryptsetup \
 | 
			
		||||
curl \
 | 
			
		||||
dosfstools \
 | 
			
		||||
dpkg-dev \
 | 
			
		||||
efibootmgr \
 | 
			
		||||
ethtool \
 | 
			
		||||
flatpak \
 | 
			
		||||
keyboard-configuration \
 | 
			
		||||
linux-generic \
 | 
			
		||||
locales \
 | 
			
		||||
nano \
 | 
			
		||||
network-manager \
 | 
			
		||||
openssh-{client,server} \
 | 
			
		||||
popularity-contest \
 | 
			
		||||
zfs-initramfs \
 | 
			
		||||
zstd\
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
	include="--include=${packages[0]}"
 | 
			
		||||
 | 
			
		||||
	for ((i=1;i<${#packages[@]};i++)); do
 | 
			
		||||
		include+=" --include=${packages[${i}]}"
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	mmdebstrap \
 | 
			
		||||
		--skip=check/empty \
 | 
			
		||||
		--components=main,restricted,universe,multiverse \
 | 
			
		||||
		--mode=root \
 | 
			
		||||
		--format=directory \
 | 
			
		||||
		${include} \
 | 
			
		||||
		"${UBUNTU_VERSION_CODENAME}" \
 | 
			
		||||
		/mnt
 | 
			
		||||
elif [[ "${1}" == '-2' ]]; then
 | 
			
		||||
	cat <<EOF >/mnt/etc/apt/sources.list.d/${UBUNTU_VERSION_CODENAME}.sources
 | 
			
		||||
# ${UBUNTU_VERSION_CODENAME^}
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb deb-src
 | 
			
		||||
URIs:			http://archive.ubuntu.com/ubuntu/
 | 
			
		||||
Suites:			${UBUNTU_VERSION_CODENAME}
 | 
			
		||||
Components:		main restricted universe multiverse
 | 
			
		||||
Signed-By:		/usr/share/keyrings/ubuntu-archive-keyring.gpg
 | 
			
		||||
 | 
			
		||||
# ${UBUNTU_VERSION_CODENAME^} Security
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb deb-src
 | 
			
		||||
URIs:			http://security.ubuntu.com/ubuntu/
 | 
			
		||||
Suites:			${UBUNTU_VERSION_CODENAME}-security
 | 
			
		||||
Components:		main restricted universe multiverse
 | 
			
		||||
Signed-By:		/usr/share/keyrings/ubuntu-archive-keyring.gpg
 | 
			
		||||
 | 
			
		||||
# ${UBUNTU_VERSION_CODENAME^} Updates
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb deb-src
 | 
			
		||||
URIs:			http://archive.ubuntu.com/ubuntu/
 | 
			
		||||
Suites:			${UBUNTU_VERSION_CODENAME}-updates
 | 
			
		||||
Components:		main restricted universe multiverse
 | 
			
		||||
Signed-By:		/usr/share/keyrings/ubuntu-archive-keyring.gpg
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
	cat <<EOF >/mnt/etc/apt/sources.list.d/elementary.sources
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb deb-src
 | 
			
		||||
URIs:			https://ppa.launchpadcontent.net/elementary-os/stable/ubuntu
 | 
			
		||||
Suites:			${UBUNTU_VERSION_CODENAME}
 | 
			
		||||
Components:		main
 | 
			
		||||
Signed-By:		/etc/apt/trusted.gpg.d/elementary.key.asc
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
	cat <<EOF >/mnt/etc/apt/sources.list.d/patches.sources
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb deb-src
 | 
			
		||||
URIs:			https://ppa.launchpadcontent.net/elementary-os/os-patches/ubuntu
 | 
			
		||||
Suites:			${UBUNTU_VERSION_CODENAME}
 | 
			
		||||
Components:		main
 | 
			
		||||
Signed-By:		/etc/apt/trusted.gpg.d/patches.key.asc
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
	rm /mnt/etc/apt/sources.list
 | 
			
		||||
elif [[ "${1}" == '-3' ]]; then
 | 
			
		||||
	rsync -pogAXtlHrDx \
 | 
			
		||||
		/etc/skel \
 | 
			
		||||
			/mnt/etc
 | 
			
		||||
elif [[ "${1}" == '-4' ]]; then
 | 
			
		||||
	cp \
 | 
			
		||||
		/etc/os-release \
 | 
			
		||||
		/mnt/etc
 | 
			
		||||
 | 
			
		||||
	cp \
 | 
			
		||||
		/etc/apt/trusted.gpg.d/{elementary,patches}.key.asc \
 | 
			
		||||
		/mnt/etc/apt/trusted.gpg.d/
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										36
									
								
								base-fedora.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										36
									
								
								base-fedora.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
 | 
			
		||||
BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")"
 | 
			
		||||
 | 
			
		||||
source \
 | 
			
		||||
	/etc/os-release
 | 
			
		||||
source \
 | 
			
		||||
	"${BASEDIR}/system.conf"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if [[ "${1}" == '-1' ]]; then
 | 
			
		||||
	mkdir -p /run/install
 | 
			
		||||
 | 
			
		||||
	if [[ "${VERSION_ID}" -lt '41' ]]; then
 | 
			
		||||
		mount /dev/mapper/live-base /run/install
 | 
			
		||||
	else
 | 
			
		||||
		mount /dev/live-base /run/install
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	rsync -pogAXtlHrDx \
 | 
			
		||||
		--stats \
 | 
			
		||||
		--exclude=/boot/efi/* \
 | 
			
		||||
		--exclude=/etc/machine-id \
 | 
			
		||||
		--info=progress2 \
 | 
			
		||||
		/run/install/ /mnt
 | 
			
		||||
elif [[ "${1}" == '-2' ]]; then
 | 
			
		||||
	mv /mnt/etc/resolv.conf \
 | 
			
		||||
		/mnt/etc/resolv.conf.orig
 | 
			
		||||
 | 
			
		||||
	cp -L \
 | 
			
		||||
		/etc/resolv.conf \
 | 
			
		||||
		/mnt/etc
 | 
			
		||||
elif [[ "${1}" == '-3' ]]; then
 | 
			
		||||
	#
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										48
									
								
								install.sh
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								install.sh
									
									
									
									
									
								
							@@ -71,47 +71,7 @@ EOF
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'elementary' ]]; then
 | 
			
		||||
	apt \
 | 
			
		||||
		install \
 | 
			
		||||
		--yes \
 | 
			
		||||
		--no-install-recommends \
 | 
			
		||||
		console-setup \
 | 
			
		||||
		cryptsetup \
 | 
			
		||||
		curl \
 | 
			
		||||
		dpkg-dev \
 | 
			
		||||
		efibootmgr \
 | 
			
		||||
		ethtool \
 | 
			
		||||
		flatpak \
 | 
			
		||||
		keyboard-configuration \
 | 
			
		||||
		linux-generic \
 | 
			
		||||
		locales \
 | 
			
		||||
		nano \
 | 
			
		||||
		network-manager \
 | 
			
		||||
		openssh-{client,server} \
 | 
			
		||||
		popularity-contest
 | 
			
		||||
# elif [[ "${ID}" == 'debian' ]]; then
 | 
			
		||||
# 	apt \
 | 
			
		||||
# 		install \
 | 
			
		||||
# 		--yes \
 | 
			
		||||
# 		console-setup \
 | 
			
		||||
# 		cryptsetup \
 | 
			
		||||
# 		curl \
 | 
			
		||||
# 		dpkg-dev \
 | 
			
		||||
# 		efibootmgr \
 | 
			
		||||
# 		ethtool \
 | 
			
		||||
# 		firmware-{ast,atheros,bnx{2,2x},brcm80211,ipw2x00,iwlwifi,libertas,linux,realtek,zd1211} \
 | 
			
		||||
# 		flatpak \
 | 
			
		||||
# 		keyboard-configuration \
 | 
			
		||||
# 		linux-{headers,image}-amd64 \
 | 
			
		||||
# 		locales \
 | 
			
		||||
# 		nano \
 | 
			
		||||
# 		network-manager \
 | 
			
		||||
# 		openssh-{client,server} \
 | 
			
		||||
# 		popularity-contest \
 | 
			
		||||
# 		printer-driver-all \
 | 
			
		||||
# 		tasksel
 | 
			
		||||
elif [[ "${ID}" == 'fedora' ]]; then
 | 
			
		||||
if [[ "${ID}" == 'fedora' ]]; then
 | 
			
		||||
	if [[ "${VERSION_ID}" -lt '41' ]]; then
 | 
			
		||||
		dnf \
 | 
			
		||||
			config-manager \
 | 
			
		||||
@@ -168,12 +128,6 @@ EOF
 | 
			
		||||
		tzdata \
 | 
			
		||||
		keyboard-configuration \
 | 
			
		||||
		console-setup
 | 
			
		||||
 | 
			
		||||
	apt install \
 | 
			
		||||
		--yes \
 | 
			
		||||
		dosfstools \
 | 
			
		||||
		systemd-timesyncd \
 | 
			
		||||
		zfs-initramfs
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'debian' ]]; then
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								menu.sh
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								menu.sh
									
									
									
									
									
								
							@@ -26,10 +26,10 @@ while [[ ! "${OPTION}" == 'Exit' ]]; do
 | 
			
		||||
#################
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
    select OPTION in 'List' 'Configure' 'Partition' 'Install' 'WiFi Setup' 'Post Install' 'Finalize' 'Exit'
 | 
			
		||||
    select OPTION in 'List' 'Configure' 'Pre Install' 'Install' 'WiFi Setup' 'Post Install' 'Finalize' 'Exit'
 | 
			
		||||
    do
 | 
			
		||||
      case "${OPTION}" in
 | 
			
		||||
        'List'|'Configure'|'Partition'|'Install'|'WiFi Setup'|'Post Install'|'Finalize'|'Exit')
 | 
			
		||||
        'List'|'Configure'|'Pre Install'|'Install'|'WiFi Setup'|'Post Install'|'Finalize'|'Exit')
 | 
			
		||||
          break
 | 
			
		||||
          ;;
 | 
			
		||||
        *)
 | 
			
		||||
@@ -44,8 +44,8 @@ EOF
 | 
			
		||||
    "${BASEDIR}/list.sh"
 | 
			
		||||
  elif [[ "${OPTION}" == 'Configure' ]]; then
 | 
			
		||||
    "${BASEDIR}/configure.sh"
 | 
			
		||||
  elif [[ "${OPTION}" == 'Partition' ]]; then
 | 
			
		||||
    "${BASEDIR}/partition.sh"
 | 
			
		||||
  elif [[ "${OPTION}" == 'Pre Install' ]]; then
 | 
			
		||||
    "${BASEDIR}/pre-inst.sh"
 | 
			
		||||
  elif [[ "${OPTION}" == 'Install' ]]; then
 | 
			
		||||
    "${BASEDIR}/install.sh"
 | 
			
		||||
  elif [[ "${OPTION}" == 'WiFi Setup' ]]; then
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										274
									
								
								mkfs.zfs.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										274
									
								
								mkfs.zfs.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,274 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
 | 
			
		||||
BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")"
 | 
			
		||||
 | 
			
		||||
source \
 | 
			
		||||
	/etc/os-release
 | 
			
		||||
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 [[ ! "${*}" = *--no-part* ]]; then
 | 
			
		||||
	if [[ "${ENCRYPTION}" == 'yes' ]]; then
 | 
			
		||||
		ZPOOL_PASSWORD='A'
 | 
			
		||||
		ZPOOL_PASSWORD_VERIFY='B'
 | 
			
		||||
 | 
			
		||||
		printf \
 | 
			
		||||
			'\033[?47h\033[2J\033[H'
 | 
			
		||||
 | 
			
		||||
		while [[ ! "${ZPOOL_PASSWORD}" == "${ZPOOL_PASSWORD_VERIFY}" ]] || [[ -z "${ZPOOL_PASSWORD}" ]] || [[ "${#ZPOOL_PASSWORD}" -lt '8' ]]; do
 | 
			
		||||
			printf \
 | 
			
		||||
				"\nEnter a password to encrypt your root pool (minimum 8 characters):\n"
 | 
			
		||||
			read \
 | 
			
		||||
				-r \
 | 
			
		||||
				-s \
 | 
			
		||||
				ZPOOL_PASSWORD
 | 
			
		||||
 | 
			
		||||
			printf \
 | 
			
		||||
				"\nVerify the password to encrypt your root pool:\n"
 | 
			
		||||
			read \
 | 
			
		||||
				-r \
 | 
			
		||||
				-s \
 | 
			
		||||
				ZPOOL_PASSWORD_VERIFY
 | 
			
		||||
 | 
			
		||||
			if [[ ! "${ZPOOL_PASSWORD}" == "${ZPOOL_PASSWORD_VERIFY}" ]]; then
 | 
			
		||||
				printf \
 | 
			
		||||
					"ERROR:\tPasswords do not match!\n"
 | 
			
		||||
			elif [[ -z "${ZPOOL_PASSWORD}" ]]; then
 | 
			
		||||
				printf \
 | 
			
		||||
					"ERROR:\tPassword is empty!\n"
 | 
			
		||||
			elif [[ "${#ZPOOL_PASSWORD}" -lt '8' ]]; then
 | 
			
		||||
				printf \
 | 
			
		||||
					"ERROR:\tPassword is too short!\n"
 | 
			
		||||
			fi
 | 
			
		||||
		done
 | 
			
		||||
 | 
			
		||||
		printf \
 | 
			
		||||
			'\033[?47l'
 | 
			
		||||
 | 
			
		||||
		mkdir \
 | 
			
		||||
			-p \
 | 
			
		||||
			/etc/zfs/keys/
 | 
			
		||||
 | 
			
		||||
		printf \
 | 
			
		||||
			"${ZPOOL_PASSWORD}\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
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o canmount=off \
 | 
			
		||||
		-o mountpoint=none \
 | 
			
		||||
		${HOSTNAME,,}/ROOT
 | 
			
		||||
# else
 | 
			
		||||
# 	zpool import \
 | 
			
		||||
# 		-N \
 | 
			
		||||
# 		-R \
 | 
			
		||||
# 		/mnt \
 | 
			
		||||
# 		${HOSTNAME,,}
 | 
			
		||||
#
 | 
			
		||||
# 	zfs load-key \
 | 
			
		||||
# 		-r \
 | 
			
		||||
# 		-L prompt \
 | 
			
		||||
# 		${HOSTNAME,,}
 | 
			
		||||
# fi
 | 
			
		||||
 | 
			
		||||
zfs create \
 | 
			
		||||
	-o canmount=noauto \
 | 
			
		||||
	-o mountpoint=/ \
 | 
			
		||||
	${HOSTNAME,,}/ROOT/${ID}
 | 
			
		||||
 | 
			
		||||
zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/ROOT/${ID}
 | 
			
		||||
 | 
			
		||||
# if [[ ! "${*}" = *--no-part* ]]; then
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/home
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o mountpoint=/root \
 | 
			
		||||
		${HOSTNAME,,}/home/root
 | 
			
		||||
 | 
			
		||||
	chmod \
 | 
			
		||||
		700 \
 | 
			
		||||
		/mnt/root
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o canmount=off \
 | 
			
		||||
		-o mountpoint=/var \
 | 
			
		||||
		${HOSTNAME,,}/var
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o canmount=off \
 | 
			
		||||
		${HOSTNAME,,}/var/lib
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/log
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/spool
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o com.sun:auto-snapshot=false \
 | 
			
		||||
		${HOSTNAME,,}/var/cache
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o com.sun:auto-snapshot=false \
 | 
			
		||||
		${HOSTNAME,,}/var/lib/nfs
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o com.sun:auto-snapshot=false \
 | 
			
		||||
		${HOSTNAME,,}/var/tmp
 | 
			
		||||
 | 
			
		||||
	chmod \
 | 
			
		||||
		1777 \
 | 
			
		||||
		/mnt/var/tmp
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o mountpoint=/srv \
 | 
			
		||||
		${HOSTNAME,,}/srv
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o canmount=off \
 | 
			
		||||
		-o mountpoint=/usr \
 | 
			
		||||
		${HOSTNAME,,}/usr
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/usr/local
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/games
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/lib/AccountsService
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/lib/NetworkManager
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/www
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o com.sun:auto-snapshot=false \
 | 
			
		||||
		-o mountpoint=/tmp \
 | 
			
		||||
		${HOSTNAME,,}/tmp
 | 
			
		||||
 | 
			
		||||
	if [[ "${ENCRYPTION}" == 'yes' ]]; then
 | 
			
		||||
		zfs create \
 | 
			
		||||
			-o com.sun:auto-snapshot=false \
 | 
			
		||||
			-o mountpoint=/etc/zfs/keys \
 | 
			
		||||
			${HOSTNAME,,}/keystore
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	zpool set \
 | 
			
		||||
		bootfs=${HOSTNAME,,}/ROOT/${ID} \
 | 
			
		||||
		${HOSTNAME,,}
 | 
			
		||||
# else
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/home
 | 
			
		||||
#
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/home/root
 | 
			
		||||
#
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/var/log
 | 
			
		||||
#
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/var/spool
 | 
			
		||||
#
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/var/cache
 | 
			
		||||
#
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/var/lib/nfs
 | 
			
		||||
#
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/var/tmp
 | 
			
		||||
#
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/srv
 | 
			
		||||
#
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/usr/local
 | 
			
		||||
#
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/var/games
 | 
			
		||||
#
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/var/lib/AccountsService
 | 
			
		||||
#
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/var/lib/NetworkManager
 | 
			
		||||
#
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/var/www
 | 
			
		||||
#
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/keystore
 | 
			
		||||
# fi
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'fedora' ]]; then
 | 
			
		||||
	"${BASEDIR}/base-fedora.sh" -1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# if [[ ! "${*}" = *--no-part* ]]; then
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/mail
 | 
			
		||||
 | 
			
		||||
	chmod \
 | 
			
		||||
		1777 \
 | 
			
		||||
		/mnt/tmp
 | 
			
		||||
# else
 | 
			
		||||
# 	zfs mount \
 | 
			
		||||
# 	${HOSTNAME,,}/var/mail
 | 
			
		||||
# fi
 | 
			
		||||
							
								
								
									
										615
									
								
								partition.sh
									
									
									
									
									
								
							
							
						
						
									
										615
									
								
								partition.sh
									
									
									
									
									
								
							@@ -3,27 +3,6 @@ set -euo pipefail
 | 
			
		||||
 | 
			
		||||
BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")"
 | 
			
		||||
 | 
			
		||||
printf \
 | 
			
		||||
	'\033[?47l\012'
 | 
			
		||||
 | 
			
		||||
cat << EOF
 | 
			
		||||
#######################################
 | 
			
		||||
##                                   ##
 | 
			
		||||
##  $(cat "${BASEDIR}/title") Script  ##
 | 
			
		||||
##                                   ##
 | 
			
		||||
##   Jean  <jean@easthighnerd.net>   ##
 | 
			
		||||
##                                   ##
 | 
			
		||||
#######################################
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#################
 | 
			
		||||
##             ##
 | 
			
		||||
##  Partition  ##
 | 
			
		||||
##             ##
 | 
			
		||||
#################
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
source \
 | 
			
		||||
	/etc/os-release
 | 
			
		||||
source \
 | 
			
		||||
@@ -39,575 +18,45 @@ else
 | 
			
		||||
	PART3='-part3'
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'debian' ]]; then
 | 
			
		||||
	if [[ ! "${HOST}" == "debian-live" ]]; then
 | 
			
		||||
		cat << EOF | tee /mnt/etc/apt/sources.list.d/contrib.sources &> /dev/null
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb
 | 
			
		||||
URIs:			http://deb.debian.org/debian/
 | 
			
		||||
Suites:			${VERSION_CODENAME}
 | 
			
		||||
Components:		contrib
 | 
			
		||||
Signed-By:		/usr/share/keyrings/debian-archive-keyring.gpg
 | 
			
		||||
EOF
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ -f '/usr/bin/gsettings' ]]; then
 | 
			
		||||
	gsettings \
 | 
			
		||||
		set \
 | 
			
		||||
		org.gnome.desktop.media-handling \
 | 
			
		||||
		automount \
 | 
			
		||||
		false
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'debian' ]]; then
 | 
			
		||||
	apt \
 | 
			
		||||
		update && \
 | 
			
		||||
	apt \
 | 
			
		||||
		install \
 | 
			
		||||
		--yes \
 | 
			
		||||
		mmdebstrap \
 | 
			
		||||
		gdisk \
 | 
			
		||||
		zfsutils-linux \
 | 
			
		||||
		systemd-timesyncd
 | 
			
		||||
elif [[ "${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://zfsonlinux.org/fedora/zfs-release-${ZOL_FEDORA_VER}$(rpm --eval "%{dist}").noarch.rpm
 | 
			
		||||
 | 
			
		||||
	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 install \
 | 
			
		||||
		-y \
 | 
			
		||||
		zfs \
 | 
			
		||||
		gdisk
 | 
			
		||||
 | 
			
		||||
	modprobe \
 | 
			
		||||
		zfs
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
timedatectl
 | 
			
		||||
 | 
			
		||||
if [[ ! "${HOST}" == "debian-live" ]]; then
 | 
			
		||||
	zgenhostid \
 | 
			
		||||
		-f \
 | 
			
		||||
		0x00bab10c
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
swapoff \
 | 
			
		||||
	--all
 | 
			
		||||
 | 
			
		||||
if [[ ! "${*}" = *--no-part* ]]; then
 | 
			
		||||
	wipefs \
 | 
			
		||||
		-a \
 | 
			
		||||
		${DISK}
 | 
			
		||||
wipefs \
 | 
			
		||||
	-a \
 | 
			
		||||
	${DISK}
 | 
			
		||||
 | 
			
		||||
	if [[ ! "${DISK_TYPE}" == 'HDD' ]]; then
 | 
			
		||||
		blkdiscard \
 | 
			
		||||
			-f \
 | 
			
		||||
			${DISK}
 | 
			
		||||
if [[ ! "${DISK_TYPE}" == 'HDD' ]]; then
 | 
			
		||||
	blkdiscard \
 | 
			
		||||
		-f \
 | 
			
		||||
		${DISK}
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
sgdisk \
 | 
			
		||||
	--zap-all \
 | 
			
		||||
	${DISK}
 | 
			
		||||
 | 
			
		||||
sgdisk \
 | 
			
		||||
	-n1:0:+512M \
 | 
			
		||||
	-t1:EF00 \
 | 
			
		||||
	-c1:EFI \
 | 
			
		||||
	${DISK}
 | 
			
		||||
 | 
			
		||||
if [[ "${ENABLE_SWAP}" == "yes" ]]; then
 | 
			
		||||
	SWAP_SIZE="$(((($(vmstat -sS M | grep 'total memory' | sed 's/ M total memory//') / 1024) + 1) * 2))"
 | 
			
		||||
 | 
			
		||||
	if [[ "${SWAP_SIZE#}" -gt '32' ]]; then
 | 
			
		||||
		SWAP_SIZE='32'
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	sgdisk \
 | 
			
		||||
		--zap-all \
 | 
			
		||||
		-n2:0:+${SWAP_SIZE}G \
 | 
			
		||||
		-t2:BF02 \
 | 
			
		||||
		-c2:swap \
 | 
			
		||||
		${DISK}
 | 
			
		||||
 | 
			
		||||
	sgdisk \
 | 
			
		||||
		-n1:0:+512M \
 | 
			
		||||
		-t1:EF00 \
 | 
			
		||||
		-c1:EFI \
 | 
			
		||||
		${DISK}
 | 
			
		||||
 | 
			
		||||
	if [[ "${ENABLE_SWAP}" == "yes" ]]; then
 | 
			
		||||
		SWAP_SIZE="$(((($(vmstat -sS M | grep 'total memory' | sed 's/ M total memory//') / 1024) + 1) * 2))"
 | 
			
		||||
 | 
			
		||||
		sgdisk \
 | 
			
		||||
			-n2:0:+${SWAP_SIZE}G \
 | 
			
		||||
			-t2:BF02 \
 | 
			
		||||
			-c2:swap \
 | 
			
		||||
			${DISK}
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	sgdisk \
 | 
			
		||||
		-n3:0:0 \
 | 
			
		||||
		-t3:BF00 \
 | 
			
		||||
		-c3:${ID} \
 | 
			
		||||
		${DISK}
 | 
			
		||||
 | 
			
		||||
	sleep 5
 | 
			
		||||
 | 
			
		||||
	if [[ "${ENCRYPTION}" == 'yes' ]]; then
 | 
			
		||||
		ZPOOL_PASSWORD='A'
 | 
			
		||||
		ZPOOL_PASSWORD_VERIFY='B'
 | 
			
		||||
 | 
			
		||||
		printf \
 | 
			
		||||
			'\033[?47h\033[2J\033[H'
 | 
			
		||||
 | 
			
		||||
		while [[ ! "${ZPOOL_PASSWORD}" == "${ZPOOL_PASSWORD_VERIFY}" ]] || [[ -z "${ZPOOL_PASSWORD}" ]] || [[ "${#ZPOOL_PASSWORD}" -lt '8' ]]; do
 | 
			
		||||
			printf \
 | 
			
		||||
				"\nEnter a password to encrypt your root pool (minimum 8 characters):\n"
 | 
			
		||||
			read \
 | 
			
		||||
				-r \
 | 
			
		||||
				-s \
 | 
			
		||||
				ZPOOL_PASSWORD
 | 
			
		||||
 | 
			
		||||
			printf \
 | 
			
		||||
				"\nVerify the password to encrypt your root pool:\n"
 | 
			
		||||
			read \
 | 
			
		||||
				-r \
 | 
			
		||||
				-s \
 | 
			
		||||
				ZPOOL_PASSWORD_VERIFY
 | 
			
		||||
 | 
			
		||||
			if [[ ! "${ZPOOL_PASSWORD}" == "${ZPOOL_PASSWORD_VERIFY}" ]]; then
 | 
			
		||||
				printf \
 | 
			
		||||
					"ERROR:\tPasswords do not match!\n"
 | 
			
		||||
			elif [[ -z "${ZPOOL_PASSWORD}" ]]; then
 | 
			
		||||
				printf \
 | 
			
		||||
					"ERROR:\tPassword is empty!\n"
 | 
			
		||||
			elif [[ "${#ZPOOL_PASSWORD}" -lt '8' ]]; then
 | 
			
		||||
				printf \
 | 
			
		||||
					"ERROR:\tPassword is too short!\n"
 | 
			
		||||
			fi
 | 
			
		||||
		done
 | 
			
		||||
 | 
			
		||||
		printf \
 | 
			
		||||
			'\033[?47l'
 | 
			
		||||
 | 
			
		||||
		mkdir \
 | 
			
		||||
			-p \
 | 
			
		||||
			/etc/zfs/keys/
 | 
			
		||||
 | 
			
		||||
		printf \
 | 
			
		||||
			"${ZPOOL_PASSWORD}\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
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o canmount=off \
 | 
			
		||||
		-o mountpoint=none \
 | 
			
		||||
		${HOSTNAME,,}/ROOT
 | 
			
		||||
else
 | 
			
		||||
	zpool import \
 | 
			
		||||
		-N \
 | 
			
		||||
		-R \
 | 
			
		||||
		/mnt \
 | 
			
		||||
		${HOSTNAME,,}
 | 
			
		||||
 | 
			
		||||
	zfs load-key \
 | 
			
		||||
		-r \
 | 
			
		||||
		-L prompt \
 | 
			
		||||
		${HOSTNAME,,}
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
zfs create \
 | 
			
		||||
	-o canmount=noauto \
 | 
			
		||||
	-o mountpoint=/ \
 | 
			
		||||
	${HOSTNAME,,}/ROOT/${ID}
 | 
			
		||||
 | 
			
		||||
zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/ROOT/${ID}
 | 
			
		||||
 | 
			
		||||
if [[ ! "${*}" = *--no-part* ]]; then
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/home
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o mountpoint=/root \
 | 
			
		||||
		${HOSTNAME,,}/home/root
 | 
			
		||||
 | 
			
		||||
	chmod \
 | 
			
		||||
		700 \
 | 
			
		||||
		/mnt/root
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o canmount=off \
 | 
			
		||||
		-o mountpoint=/var \
 | 
			
		||||
		${HOSTNAME,,}/var
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o canmount=off \
 | 
			
		||||
		${HOSTNAME,,}/var/lib
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/log
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/spool
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o com.sun:auto-snapshot=false \
 | 
			
		||||
		${HOSTNAME,,}/var/cache
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o com.sun:auto-snapshot=false \
 | 
			
		||||
		${HOSTNAME,,}/var/lib/nfs
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o com.sun:auto-snapshot=false \
 | 
			
		||||
		${HOSTNAME,,}/var/tmp
 | 
			
		||||
 | 
			
		||||
	chmod \
 | 
			
		||||
		1777 \
 | 
			
		||||
		/mnt/var/tmp
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o mountpoint=/srv \
 | 
			
		||||
		${HOSTNAME,,}/srv
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o canmount=off \
 | 
			
		||||
		-o mountpoint=/usr \
 | 
			
		||||
		${HOSTNAME,,}/usr
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/usr/local
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/games
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/lib/AccountsService
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/lib/NetworkManager
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/www
 | 
			
		||||
 | 
			
		||||
	zfs create \
 | 
			
		||||
		-o com.sun:auto-snapshot=false \
 | 
			
		||||
		-o mountpoint=/tmp \
 | 
			
		||||
		${HOSTNAME,,}/tmp
 | 
			
		||||
 | 
			
		||||
	if [[ "${ENCRYPTION}" == 'yes' ]]; then
 | 
			
		||||
		zfs create \
 | 
			
		||||
			-o com.sun:auto-snapshot=false \
 | 
			
		||||
			-o mountpoint=/etc/zfs/keys \
 | 
			
		||||
			${HOSTNAME,,}/keystore
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	zpool set \
 | 
			
		||||
		bootfs=${HOSTNAME,,}/ROOT/${ID} \
 | 
			
		||||
		${HOSTNAME,,}
 | 
			
		||||
else
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/home
 | 
			
		||||
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/home/root
 | 
			
		||||
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/var/log
 | 
			
		||||
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/var/spool
 | 
			
		||||
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/var/cache
 | 
			
		||||
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/var/lib/nfs
 | 
			
		||||
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/var/tmp
 | 
			
		||||
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/srv
 | 
			
		||||
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/usr/local
 | 
			
		||||
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/var/games
 | 
			
		||||
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/var/lib/AccountsService
 | 
			
		||||
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/var/lib/NetworkManager
 | 
			
		||||
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/var/www
 | 
			
		||||
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/keystore
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'fedora' ]]; then
 | 
			
		||||
	mkdir -p /run/install
 | 
			
		||||
 | 
			
		||||
	if [[ "${VERSION_ID}" -lt '41' ]]; then
 | 
			
		||||
		mount /dev/mapper/live-base /run/install
 | 
			
		||||
	else
 | 
			
		||||
		mount /dev/live-base /run/install
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	rsync -pogAXtlHrDx \
 | 
			
		||||
		--stats \
 | 
			
		||||
		--exclude=/boot/efi/* \
 | 
			
		||||
		--exclude=/etc/machine-id \
 | 
			
		||||
		--info=progress2 \
 | 
			
		||||
		/run/install/ /mnt
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ ! "${*}" = *--no-part* ]]; then
 | 
			
		||||
	zfs create \
 | 
			
		||||
		${HOSTNAME,,}/var/mail
 | 
			
		||||
 | 
			
		||||
	chmod \
 | 
			
		||||
		1777 \
 | 
			
		||||
		/mnt/tmp
 | 
			
		||||
else
 | 
			
		||||
	zfs mount \
 | 
			
		||||
	${HOSTNAME,,}/var/mail
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
mkdir \
 | 
			
		||||
	-p \
 | 
			
		||||
	/mnt/run
 | 
			
		||||
 | 
			
		||||
mount \
 | 
			
		||||
	-t \
 | 
			
		||||
	tmpfs \
 | 
			
		||||
	tmpfs \
 | 
			
		||||
	/mnt/run
 | 
			
		||||
 | 
			
		||||
mkdir \
 | 
			
		||||
	-p \
 | 
			
		||||
	/mnt/run/lock
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'elementary' ]]; then
 | 
			
		||||
	mmdebstrap \
 | 
			
		||||
		--include='' \
 | 
			
		||||
		"${UBUNTU_VERSION_CODENAME}" \
 | 
			
		||||
		/mnt
 | 
			
		||||
elif [[ "${ID}" == 'debian' ]]; then
 | 
			
		||||
	mmdebstrap \
 | 
			
		||||
		--include=console-setup,\
 | 
			
		||||
		cryptsetup,\
 | 
			
		||||
		curl,\
 | 
			
		||||
		dpkg-dev,\
 | 
			
		||||
		efibootmgr,\
 | 
			
		||||
		ethtool,\
 | 
			
		||||
		firmware-{ast,atheros,bnx{2,2x},brcm80211,ipw2x00,iwlwifi,libertas,linux,realtek,zd1211},\
 | 
			
		||||
		flatpak,\
 | 
			
		||||
		keyboard-configuration,\
 | 
			
		||||
		linux-{headers,image}-amd64,\
 | 
			
		||||
		locales,\
 | 
			
		||||
		nano,\
 | 
			
		||||
		network-manager,\
 | 
			
		||||
		openssh-{client,server},\
 | 
			
		||||
		popularity-contest,\
 | 
			
		||||
		printer-driver-all,\
 | 
			
		||||
		tasksel \
 | 
			
		||||
		"${VERSION_CODENAME}" \
 | 
			
		||||
		/mnt
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf \
 | 
			
		||||
	"${HOSTNAME}\n" | tee /mnt/etc/hostname &> /dev/null
 | 
			
		||||
 | 
			
		||||
printf \
 | 
			
		||||
	"127.0.1.1\t${HOSTNAME}\n" | tee --append /mnt/etc/hosts &> /dev/null
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'debian' ]]; then
 | 
			
		||||
	NETWORK_INTERFACE=($(ip -br addr show | sed 's| .*$||g' | grep -v '^lo' | grep -v 'tailscale' | grep -v '^wg'))
 | 
			
		||||
	shopt -s extglob
 | 
			
		||||
 | 
			
		||||
	for ((i = 0; i < ${#NETWORK_INTERFACE[@]}; i++)); do
 | 
			
		||||
		cat << EOF | tee /mnt/etc/network/interfaces.d/${NETWORK_INTERFACE[$i]} &> /dev/null
 | 
			
		||||
allow-hotplug	${NETWORK_INTERFACE[$i]}
 | 
			
		||||
iface		${NETWORK_INTERFACE[$i]}	inet	dhcp
 | 
			
		||||
EOF
 | 
			
		||||
	done
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'elementary' ]]; then
 | 
			
		||||
	cat <<EOF >/mnt/etc/apt/sources.list
 | 
			
		||||
deb http://archive.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME} main restricted universe multiverse
 | 
			
		||||
deb-src http://archive.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME} main restricted universe multiverse
 | 
			
		||||
 | 
			
		||||
deb http://security.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME}-security main restricted universe multiverse
 | 
			
		||||
deb-src http://security.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME}-security main restricted universe multiverse
 | 
			
		||||
 | 
			
		||||
deb http://archive.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME}-updates main restricted universe multiverse
 | 
			
		||||
deb-src http://archive.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME}-updates main restricted universe multiverse
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
	cat <<EOF >/mnt/etc/apt/sources.list.d/elementary.list
 | 
			
		||||
deb https://ppa.launchpadcontent.net/elementary-os/stable/ubuntu ${UBUNTU_VERSION_CODENAME} main
 | 
			
		||||
deb-src https://ppa.launchpadcontent.net/elementary-os/stable/ubuntu ${UBUNTU_VERSION_CODENAME} main
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
	cat <<EOF >/mnt/etc/apt/sources.list.d/patches.list
 | 
			
		||||
deb https://ppa.launchpadcontent.net/elementary-os/os-patches/ubuntu ${UBUNTU_VERSION_CODENAME} main
 | 
			
		||||
deb-src https://ppa.launchpadcontent.net/elementary-os/os-patches/ubuntu ${UBUNTU_VERSION_CODENAME} main
 | 
			
		||||
EOF
 | 
			
		||||
elif [[ "${ID}" == 'debian' ]]; then
 | 
			
		||||
	cat << EOF | tee /mnt/etc/apt/sources.list.d/${VERSION_CODENAME}.sources &> /dev/null
 | 
			
		||||
# ${VERSION_CODENAME^}
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb deb-src
 | 
			
		||||
URIs:			http://deb.debian.org/debian/
 | 
			
		||||
Suites:			${VERSION_CODENAME}
 | 
			
		||||
Components:		main non-free-firmware contrib
 | 
			
		||||
Signed-By:		/usr/share/keyrings/debian-archive-keyring.gpg
 | 
			
		||||
 | 
			
		||||
# ${VERSION_CODENAME^} Security
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb deb-src
 | 
			
		||||
URIs:			http://deb.debian.org/debian-security/
 | 
			
		||||
Suites:			${VERSION_CODENAME}-security
 | 
			
		||||
Components:		main non-free-firmware contrib
 | 
			
		||||
Signed-By:		/usr/share/keyrings/debian-archive-keyring.gpg
 | 
			
		||||
 | 
			
		||||
# ${VERSION_CODENAME^} Updates
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb deb-src
 | 
			
		||||
URIs:			http://deb.debian.org/debian/
 | 
			
		||||
Suites:			${VERSION_CODENAME}-updates
 | 
			
		||||
Components:		main non-free-firmware contrib
 | 
			
		||||
Signed-By:		/usr/share/keyrings/debian-archive-keyring.gpg
 | 
			
		||||
EOF
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
mount \
 | 
			
		||||
	--rbind \
 | 
			
		||||
	/dev \
 | 
			
		||||
	/mnt/dev
 | 
			
		||||
 | 
			
		||||
mount \
 | 
			
		||||
	--rbind \
 | 
			
		||||
	/proc \
 | 
			
		||||
	/mnt/proc
 | 
			
		||||
 | 
			
		||||
mount \
 | 
			
		||||
	--rbind \
 | 
			
		||||
	/sys \
 | 
			
		||||
	/mnt/sys
 | 
			
		||||
 | 
			
		||||
cp \
 | 
			
		||||
	/etc/hostid \
 | 
			
		||||
	/mnt/etc/
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'fedora' ]]; then
 | 
			
		||||
	mv /mnt/etc/resolv.conf \
 | 
			
		||||
		/mnt/etc/resolv.conf.orig
 | 
			
		||||
 | 
			
		||||
	cp -L \
 | 
			
		||||
		/etc/resolv.conf \
 | 
			
		||||
		/mnt/etc
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
rsync -pogAXtlHrDx \
 | 
			
		||||
	"${BASEDIR}" \
 | 
			
		||||
		/mnt
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'elementary' ]]; then
 | 
			
		||||
	rsync -pogAXtlHrDx \
 | 
			
		||||
		/etc/skel \
 | 
			
		||||
			/mnt/etc
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ ! "${*}" = *--no-part* ]]; then
 | 
			
		||||
	if [[ -f "/etc/zfs/keys/${HOSTNAME,,}.key" ]]; then
 | 
			
		||||
		cp \
 | 
			
		||||
			/etc/zfs/keys/${HOSTNAME,,}.key \
 | 
			
		||||
			/mnt/etc/zfs/keys/
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'elementary' ]]; then
 | 
			
		||||
	cp \
 | 
			
		||||
		/etc/os-release \
 | 
			
		||||
		/mnt/etc
 | 
			
		||||
 | 
			
		||||
	cp \
 | 
			
		||||
		/etc/apt/trusted.gpg.d/{elementary,patches}.key.asc \
 | 
			
		||||
		/mnt/etc/apt/trusted.gpg.d/
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf \
 | 
			
		||||
	"\nNow chrooting into /mnt...\n\n"
 | 
			
		||||
 | 
			
		||||
chroot \
 | 
			
		||||
	/mnt \
 | 
			
		||||
	bash \
 | 
			
		||||
	--login
 | 
			
		||||
 | 
			
		||||
mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | xargs -I {} umount -Rlf {}
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'fedora' ]]; then
 | 
			
		||||
	umount \
 | 
			
		||||
		-nR \
 | 
			
		||||
		/mnt
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
zpool \
 | 
			
		||||
	export \
 | 
			
		||||
	-a
 | 
			
		||||
 | 
			
		||||
printf \
 | 
			
		||||
	'\033[?47h\033[2J\033[H'
 | 
			
		||||
 | 
			
		||||
cat <<EOF
 | 
			
		||||
 | 
			
		||||
Script has finished running
 | 
			
		||||
 | 
			
		||||
Please reboot your computer
 | 
			
		||||
 | 
			
		||||
Press any key to return to the main menu
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
read -srn 1
 | 
			
		||||
sgdisk \
 | 
			
		||||
	-n3:0:0 \
 | 
			
		||||
	-t3:BF00 \
 | 
			
		||||
	-c3:${ID} \
 | 
			
		||||
	${DISK}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								post-inst.sh
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								post-inst.sh
									
									
									
									
									
								
							@@ -88,6 +88,10 @@ EOF
 | 
			
		||||
		audio,cdrom,dip,floppy,wheel,video,dialout \
 | 
			
		||||
		${USERNAME}
 | 
			
		||||
else
 | 
			
		||||
	if [[ -z "$(cat /etc/group | grep 'lpadmin')" ]]; then
 | 
			
		||||
		groupadd --gid 108 lpadmin
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	usermod \
 | 
			
		||||
		-a \
 | 
			
		||||
		-G \
 | 
			
		||||
@@ -111,7 +115,9 @@ Pin: release n=${UBUNTU_VERSION_CODENAME}-backports
 | 
			
		||||
Pin-Priority: -1
 | 
			
		||||
EOF
 | 
			
		||||
elif [[ "${ID}" == 'debian' ]]; then
 | 
			
		||||
	cat << EOF | tee /etc/apt/sources.list.d/backports.sources &> /dev/null
 | 
			
		||||
	cat << EOF | tee --append /etc/apt/sources.list.d/${VERSION_CODENAME}.sources &> /dev/null
 | 
			
		||||
 | 
			
		||||
# ${VERSION_CODENAME^} Backports
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb deb-src
 | 
			
		||||
URIs:			http://deb.debian.org/debian/
 | 
			
		||||
@@ -121,9 +127,13 @@ Signed-By:		/usr/share/keyrings/debian-archive-keyring.gpg
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
	cat << EOF | tee /etc/apt/preferences.d/backports.pref &> /dev/null
 | 
			
		||||
Package: *
 | 
			
		||||
Pin: release n=${VERSION_CODENAME}*
 | 
			
		||||
Pin-Priority: 990
 | 
			
		||||
Package:		*
 | 
			
		||||
Pin:			release	n=${VERSION_CODENAME}*
 | 
			
		||||
Pin-Priority:	990
 | 
			
		||||
 | 
			
		||||
Package:		linux-*
 | 
			
		||||
Pin:			release	n=${VERSION_CODENAME}-backports
 | 
			
		||||
Pin-Priority:	-1
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
	if [[ "${VERSION_CODENAME}" == 'bookworm' ]]; then
 | 
			
		||||
@@ -202,7 +212,7 @@ chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}
 | 
			
		||||
 | 
			
		||||
sudo -u ${USERNAME} cp -a /etc/skel/. /home/${USERNAME}
 | 
			
		||||
 | 
			
		||||
if [[ ! -z "$(find -P /home/${USERNAME}/ | grep '\.face')" ]]; then
 | 
			
		||||
if [[ ! -z "\$(find -P /home/${USERNAME}/ | grep '\.face')" ]]; then
 | 
			
		||||
	find -P /home/${USERNAME}/ | grep '\.face' | xargs -d '\n' -I {} rm {}
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
@@ -227,11 +237,11 @@ EOF
 | 
			
		||||
 | 
			
		||||
	if [[ "${ID}" == 'fedora' ]]; then
 | 
			
		||||
		printf \
 | 
			
		||||
			'@reboot /usr/bin/home-fix.sh\n' | \
 | 
			
		||||
			"@reboot\tsudo -u ${USERNAME} '${BASEDIR}/finalize.sh'\n@reboot\t/usr/bin/home-fix.sh\n" | \
 | 
			
		||||
			tee /var/spool/cron/root &> /dev/null
 | 
			
		||||
	elif [[ "${ID}" == 'debian' ]]; then
 | 
			
		||||
		printf \
 | 
			
		||||
			'@reboot /usr/bin/home-fix.sh\n' | \
 | 
			
		||||
			"@reboot\tsudo -u ${USERNAME} '${BASEDIR}/finalize.sh'\n@reboot\t/usr/bin/home-fix.sh\n" | \
 | 
			
		||||
			tee /var/spool/cron/crontabs/root &> /dev/null
 | 
			
		||||
 | 
			
		||||
		chown \
 | 
			
		||||
@@ -244,6 +254,14 @@ EOF
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ ! -f '/usr/bin/shutdown' ]]; then
 | 
			
		||||
	ln -s /sbin/shutdown /usr/bin/shutdown
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ ! -f '/usr/bin/reboot' ]]; then
 | 
			
		||||
	ln -s /sbin/reboot /usr/bin/reboot
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
zfs \
 | 
			
		||||
	snapshot \
 | 
			
		||||
	${HOSTNAME,,}/ROOT/${ID}@post-install
 | 
			
		||||
@@ -255,7 +273,7 @@ cat << EOF
 | 
			
		||||
 | 
			
		||||
Script has finished running
 | 
			
		||||
 | 
			
		||||
Please reboot your computer
 | 
			
		||||
Please exit the chroot
 | 
			
		||||
 | 
			
		||||
Press any key to return to the main menu
 | 
			
		||||
EOF
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										220
									
								
								pre-inst.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										220
									
								
								pre-inst.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,220 @@
 | 
			
		||||
#!/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>   ##
 | 
			
		||||
##                                   ##
 | 
			
		||||
#######################################
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
####################
 | 
			
		||||
##                ##
 | 
			
		||||
##      Pre       ##
 | 
			
		||||
##  Installation  ##
 | 
			
		||||
##                ##
 | 
			
		||||
####################
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
source \
 | 
			
		||||
	/etc/os-release
 | 
			
		||||
source \
 | 
			
		||||
	"${BASEDIR}/system.conf"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'debian' ]]; then
 | 
			
		||||
	if [[ ! "$(hostname)" == "debian-live" ]]; then
 | 
			
		||||
		cat << EOF | tee /etc/apt/sources.list.d/contrib.sources 1> /dev/null
 | 
			
		||||
Enabled:		yes
 | 
			
		||||
Types:			deb
 | 
			
		||||
URIs:			http://deb.debian.org/debian/
 | 
			
		||||
Suites:			${VERSION_CODENAME}
 | 
			
		||||
Components:		contrib
 | 
			
		||||
Signed-By:		/usr/share/keyrings/debian-archive-keyring.gpg
 | 
			
		||||
EOF
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if [[ -f '/usr/bin/gsettings' ]]; then
 | 
			
		||||
	gsettings \
 | 
			
		||||
		set \
 | 
			
		||||
		org.gnome.desktop.media-handling \
 | 
			
		||||
		automount \
 | 
			
		||||
		false
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'debian' ]] || [[ "${ID}" == 'elementary' ]]; then
 | 
			
		||||
	apt \
 | 
			
		||||
		update && \
 | 
			
		||||
	apt \
 | 
			
		||||
		install \
 | 
			
		||||
		--yes \
 | 
			
		||||
		mmdebstrap \
 | 
			
		||||
		gdisk \
 | 
			
		||||
		systemd-timesyncd \
 | 
			
		||||
		whois \
 | 
			
		||||
		zfsutils-linux
 | 
			
		||||
elif [[ "${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://zfsonlinux.org/fedora/zfs-release-${ZOL_FEDORA_VER}$(rpm --eval "%{dist}").noarch.rpm
 | 
			
		||||
 | 
			
		||||
	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 install \
 | 
			
		||||
		-y \
 | 
			
		||||
		zfs \
 | 
			
		||||
		gdisk
 | 
			
		||||
 | 
			
		||||
	modprobe \
 | 
			
		||||
		zfs
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
timedatectl
 | 
			
		||||
 | 
			
		||||
if [[ ! "$(hostname)" == "debian-live" ]]; then
 | 
			
		||||
	zgenhostid \
 | 
			
		||||
		-f \
 | 
			
		||||
		0x00bab10c
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"${BASEDIR}/partition.sh"
 | 
			
		||||
 | 
			
		||||
sleep 5
 | 
			
		||||
 | 
			
		||||
"${BASEDIR}/mkfs.zfs.sh"
 | 
			
		||||
 | 
			
		||||
mkdir \
 | 
			
		||||
	-p \
 | 
			
		||||
	/mnt/run
 | 
			
		||||
 | 
			
		||||
mount \
 | 
			
		||||
	-t \
 | 
			
		||||
	tmpfs \
 | 
			
		||||
	tmpfs \
 | 
			
		||||
	/mnt/run
 | 
			
		||||
 | 
			
		||||
mkdir \
 | 
			
		||||
	-p \
 | 
			
		||||
	/mnt/run/lock
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'elementary' ]]; then
 | 
			
		||||
	"${BASEDIR}/base-elementary.sh" -1
 | 
			
		||||
elif [[ "${ID}" == 'debian' ]]; then
 | 
			
		||||
	"${BASEDIR}/base-debian.sh" -1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf \
 | 
			
		||||
	"${HOSTNAME}\n" | tee /mnt/etc/hostname &> /dev/null
 | 
			
		||||
 | 
			
		||||
printf \
 | 
			
		||||
	"127.0.1.1\t${HOSTNAME}\n" | tee --append /mnt/etc/hosts &> /dev/null
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'debian' ]]; then
 | 
			
		||||
	"${BASEDIR}/base-debian.sh" -2
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'elementary' ]]; then
 | 
			
		||||
	"${BASEDIR}/base-elementary.sh" -2
 | 
			
		||||
elif [[ "${ID}" == 'debian' ]]; then
 | 
			
		||||
	"${BASEDIR}/base-debian.sh" -3
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
mount \
 | 
			
		||||
	--rbind \
 | 
			
		||||
	/dev \
 | 
			
		||||
	/mnt/dev
 | 
			
		||||
 | 
			
		||||
mount \
 | 
			
		||||
	--rbind \
 | 
			
		||||
	/proc \
 | 
			
		||||
	/mnt/proc
 | 
			
		||||
 | 
			
		||||
mount \
 | 
			
		||||
	--rbind \
 | 
			
		||||
	/sys \
 | 
			
		||||
	/mnt/sys
 | 
			
		||||
 | 
			
		||||
cp \
 | 
			
		||||
	/etc/hostid \
 | 
			
		||||
	/mnt/etc/
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'fedora' ]]; then
 | 
			
		||||
	"${BASEDIR}/base-fedora.sh" -2
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
rsync -pogAXtlHrDx \
 | 
			
		||||
	"${BASEDIR}" \
 | 
			
		||||
		/mnt
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'elementary' ]]; then
 | 
			
		||||
	"${BASEDIR}/base-elementary.sh" -3
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# if [[ ! "${*}" = *--no-part* ]]; then
 | 
			
		||||
	if [[ -f "/etc/zfs/keys/${HOSTNAME,,}.key" ]]; then
 | 
			
		||||
		cp \
 | 
			
		||||
			/etc/zfs/keys/${HOSTNAME,,}.key \
 | 
			
		||||
			/mnt/etc/zfs/keys/
 | 
			
		||||
	fi
 | 
			
		||||
# fi
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'elementary' ]]; then
 | 
			
		||||
	"${BASEDIR}/base-elementary.sh" -4
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf \
 | 
			
		||||
	"\nNow chrooting into /mnt...\n\n"
 | 
			
		||||
 | 
			
		||||
chroot \
 | 
			
		||||
	/mnt \
 | 
			
		||||
	"$(printf "${BASEDIR}\n" | sed 's|.*\/|\/|')/install.sh"
 | 
			
		||||
 | 
			
		||||
mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | xargs -I {} umount -Rlf {}
 | 
			
		||||
 | 
			
		||||
if [[ "${ID}" == 'fedora' ]]; then
 | 
			
		||||
	umount \
 | 
			
		||||
		-nR \
 | 
			
		||||
		/mnt
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
zpool \
 | 
			
		||||
	export \
 | 
			
		||||
	-a
 | 
			
		||||
 | 
			
		||||
printf \
 | 
			
		||||
	'\033[?47h\033[2J\033[H'
 | 
			
		||||
 | 
			
		||||
cat <<EOF
 | 
			
		||||
 | 
			
		||||
Script has finished running
 | 
			
		||||
 | 
			
		||||
Please reboot your computer
 | 
			
		||||
 | 
			
		||||
Press any key to return to the main menu
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
read -srn 1
 | 
			
		||||
		Reference in New Issue
	
	Block a user