Files
ZFSBootMenu-Root-Install/configure.sh
2025-07-04 17:23:34 -04:00

269 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")"
cat << EOF
#######################################
## ##
## $(cat "${BASEDIR}/title") Script ##
## ##
## Jean <jean@easthighnerd.net> ##
## ##
#######################################
#################
## ##
## Configure ##
## ##
#################
EOF
printf \
'ZOL_FEDORA_VER="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 \
"DISK_TYPE=\"${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 \
"ENABLE_SWAP=\"${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