Files
ZFSBootMenu-Root-Install/configure.sh

269 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
baseDir="$(realpath "$(dirname "${0}")")"
cat << EOF
#######################################
## ##
## $(cat "${baseDir}/title") Script ##
## ##
## Jean <jean@easthighnerd.net> ##
## ##
#######################################
#################
## ##
## Configure ##
## ##
#################
EOF
printf \
'zolFedoraVer="2-6"\n' | \
tee \
"${baseDir}/system.conf" \
&> \
/dev/null
printf \
'(NVMe) SSD or HDD?\n'
select option in 'SSD' 'HDD'
do
case "${option}" in
'SSD'|'HDD')
break
;;
*)
printf \
'Invalid option\n'
;;
esac
done
printf \
"diskType=\"${option}\"\n" | \
tee \
--append \
"${baseDir}/system.conf" \
&> \
/dev/null
printf \
'\033[2J\033[H'
printf \
'\nGet disk from:\n'
select option in '/dev/disk/by-id/' '/dev/'
do
case "${option}" in
'/dev/disk/by-id/'|'/dev/')
break
;;
*)
printf \
'Invalid option\n'
;;
esac
done
printf \
'\033[2J\033[H'
if [[ "${option}" == '/dev/disk/by-id/' ]]; then
drives="$(ls -Ago /dev/disk/by-id/ | grep -v 'sr' | grep -v 'dm-' | grep -v 'nvme-eui.' | grep -v '\-part' | grep -v 'wwn-' | grep -v '_[1-9] -> ' | grep -v 'total' | sed 's|^.*\:[0-5][0-9] ||g; s| -> .*$||g' | tr -d '[:blank:]')"
printf \
'\nSelect the disk you want to use:\n'
drives=( ${drives} )
shopt -s extglob
menu="@(${drives[0]}"
for ((i=1;i<${#drives[@]};i++)); do
menu+="|${drives[$i]}"
done
menu+=")"
select drive in "${drives[@]}"
do
case ${drive} in
${menu})
break
;;
*)
printf \
'Invalid option\n'
;;
esac
done
printf \
"disk=\"/dev/disk/by-id/${drive}\"\n" | \
tee \
--append \
"${baseDir}/system.conf" \
&> \
/dev/null
elif [[ "${option}" == '/dev/' ]]; then
drives="$(lsblk -do name | grep -v 'loop' | grep -v 'sr' | grep -v 'zram' | grep -v 'NAME' | tr -d '[:blank:]')"
printf \
'\nSelect the disk you want to use:\n'
drives=( ${drives} )
shopt -s extglob
menu="@(${drives[0]}"
for ((i=1;i<${#drives[@]};i++)); do
menu+="|${drives[$i]}"
done
menu+=")"
select drive in "${drives[@]}"
do
case ${drive} in
${menu})
break
;;
*)
printf \
'Invalid option\n'
;;
esac
done
printf \
"disk=\"/dev/${drive}\"\n" | \
tee \
--append \
"${baseDir}/system.conf" \
&> \
/dev/null
fi
printf \
'\033[2J\033[H'
hostname='-'
while [[ "${hostname}" == '-' ]] || [[ -z "${hostname}" ]] || [[ "${hostname}" = *' '* ]] || [[ "${hostname}" = *_* ]]; do
printf \
'\nEnter a hostname for this machine (no spaces or underscores):\n'
read \
-r \
hostname
if [[ "${hostname}" = *' '* ]] || [[ "${hostname}" = *_* ]]; then
printf \
'ERROR:\tNo spaces or underscores in the hostname!\n'
fi
done
printf \
"hostname=\"${hostname}\"\n" | \
tee \
--append \
"${baseDir}/system.conf" \
&> \
/dev/null
printf \
'\033[2J\033[H'
username='-'
while [[ "${username}" == '-' ]] || [[ -z "${username}" ]] || [[ "${username}" = *' '* ]] || [[ "${username}" = *[A-Z]* ]]; do
printf \
'\nEnter a name for the new user account (lowercase, no spaces):\n'
read \
-r \
username
if [[ "${username}" = *' '* ]] || [[ "${username}" = *[A-Z]* ]]; then
printf \
'ERROR:\tNo spaces or uppercase letters in the username!\n'
fi
done
printf \
"username=\"${username}\"\n" | \
tee \
--append \
"${baseDir}/system.conf" \
&> \
/dev/null
printf \
'\033[2J\033[H'
printf \
'\nEnable SWAP?\n'
select option in 'yes' 'no'
do
case "${option}" in
'yes'|'no')
break
;;
*)
printf \
'Invalid option\n'
;;
esac
done
printf \
"enableSwap=\"${option}\"\n" | \
tee \
--append \
"${baseDir}/system.conf" \
&> \
/dev/null
printf \
'\033[2J\033[H'
printf \
'\nEnable encryption?\n'
select option in 'yes' 'no'
do
case "${option}" in
'yes'|'no')
break
;;
*)
printf \
'Invalid option\n'
;;
esac
done
printf \
"encryption=\"${option}\"\n" | \
tee \
--append \
"${baseDir}/system.conf" \
&> \
/dev/null
printf \
'\033[2J\033[H'
cat << EOF
Configuration stored in '${baseDir}/system.conf'
Press any key to return to the main menu
EOF
read \
-srn \
1