Improve TTY locking

Prefer serial consoles to TTYs, and present a timeout on graphical TTYs.
This commit is contained in:
Joshua Boniface 2023-09-01 15:41:57 -04:00
parent c8f1d853a0
commit d6c1c8f38a
1 changed files with 38 additions and 9 deletions

View File

@ -5,21 +5,49 @@ lockfile="/run/pvc-install.lock"
if [[ $( whoami ) != "root" ]]; then if [[ $( whoami ) != "root" ]]; then
echo "STOP! This script is designed to run as root within the installer only!" echo "STOP! This script is designed to run as root within the installer only!"
echo "Do not run it on your system. To build a PVC installer ISO, use './buildiso.sh' instead!" echo "To build a PVC installer ISO file, use './buildiso.sh'."
echo "To build a PVC installer PXE root, use './buildpxe.sh'."
exit 1 exit 1
fi fi
# Random delay to prevent overlaps echo
DELAY=$(( ${RANDOM} % 10 )) active_ttys=( $( w | grep "^root" | awk '{ print $2 }' ) )
echo -n "Waiting ${DELAY} seconds... " echo "Active TTYs: ${active_ttys[@]}"
sleep ${DELAY} this_tty=$( tty | sed -e "s/.*tty\(.*\)/\1/" )
echo "done." echo "This TTY: ${this_tty}"
echo
if [[ ${#active_ttys} -gt 1 ]]; then
if "${active_ttys[@]}" =~ "ttyS" ]]; then
if [[ "${this_tty}" =~ "tty[0-9]+" ]]; then
echo "Found more than one TTY and at least one serial TTY!"
echo -n "If you wish to run the installer on this graphical TTY instead of the serial TTY, press enter within 15 seconds... "
if ! read -t 15; then
echo "timeout."
exit 0
fi
else
echo "Found more than one TTY!"
echo -n "Waiting for other TTYs to time out... "
sleep $(( 16 + $( grep -o '[0-9]+' <<<"${this_tty}" ) ))
echo "done."
fi
else
echo "Found more than one graphical TTY!"
echo -n "If you wish to run the installer on this graphical TTY, press enter within 60 seconds... "
if ! read -t 60; then
echo "timeout."
echo "To launch the installer again on this TTY, run '/install.sh'."
exit 0
fi
fi
fi
if [[ -f ${lockfile} ]]; then if [[ -f ${lockfile} ]]; then
echo "An instance of 'install.sh' is already running!" echo "Aborting installer due to lockfile presence: $( cat ${lockfile} )."
exit 1 exit 0
fi fi
touch ${lockfile} printf "PID $$ on TTY ${this_tty}" > ${lockfile}
echo
iso_name="XXDATEXX" iso_name="XXDATEXX"
target_deploy_user="XXDEPLOYUSERXX" target_deploy_user="XXDEPLOYUSERXX"
@ -40,6 +68,7 @@ root_password="hCb1y2PF"
# Respawn function # Respawn function
respawn() ( respawn() (
echo "Respawning..."
$0 & disown $0 & disown
) )