Improve TTY locking
Prefer serial consoles to TTYs, and present a timeout on graphical TTYs.
This commit is contained in:
		| @@ -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 | ||||||
| ) | ) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user