From af497a4f52bf094cd0d584b8d996a550400f0e4a Mon Sep 17 00:00:00 2001 From: kn Date: Sun, 29 Aug 2021 13:31:52 +0000 Subject: [PATCH] Merge sysupgrade watchdog and prompt timeout code Provide TIMOUT_{ACTION,PERIOD_SEC} in {start,stop,reset}_timeout() to have install.sub and dot.profile use the same mnemonic helpers. --- distrib/miniroot/dot.profile | 21 +++++++++++++-------- distrib/miniroot/install.sub | 32 ++++++++------------------------ 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/distrib/miniroot/dot.profile b/distrib/miniroot/dot.profile index 6a998d92ba3..1b9939c61ad 100644 --- a/distrib/miniroot/dot.profile +++ b/distrib/miniroot/dot.profile @@ -1,4 +1,4 @@ -# $OpenBSD: dot.profile,v 1.47 2021/08/29 13:16:22 kn Exp $ +# $OpenBSD: dot.profile,v 1.48 2021/08/29 13:31:52 kn Exp $ # $NetBSD: dot.profile,v 1.1 1995/12/18 22:54:43 pk Exp $ # # Copyright (c) 2009 Kenneth R. Westerback @@ -43,17 +43,13 @@ umask 022 # emacs-style command line editing. set -o emacs +# Leave installer prompt without user interaction. +TIMEOUT_ACTION='kill $$' TIMEOUT_PERIOD_SEC=5 -# Stop the background timer. -stop_timeout() { - kill -KILL $WDPID 2>/dev/null -} - -# Start a co-process to XXX. start_timeout() { ( - sleep $TIMEOUT_PERIOD_SEC && kill $$ + sleep $TIMEOUT_PERIOD_SEC && eval $TIMEOUT_ACTION ) |& WDPID=$! @@ -61,6 +57,15 @@ start_timeout() { exec 3>&p; exec 3>&- } +stop_timeout() { + kill -KILL $WDPID 2>/dev/null +} + +reset_watchdog() { + stop_timeout + start_timeout +} + if [[ -z $DONEPROFILE ]]; then DONEPROFILE=YES diff --git a/distrib/miniroot/install.sub b/distrib/miniroot/install.sub index 45a89748987..fb24b32784a 100644 --- a/distrib/miniroot/install.sub +++ b/distrib/miniroot/install.sub @@ -1,5 +1,5 @@ #!/bin/ksh -# $OpenBSD: install.sub,v 1.1174 2021/08/29 13:05:43 kn Exp $ +# $OpenBSD: install.sub,v 1.1175 2021/08/29 13:31:52 kn Exp $ # # Copyright (c) 1997-2015 Todd Miller, Theo de Raadt, Ken Westerback # Copyright (c) 2015, Robert Peichaer @@ -1629,7 +1629,7 @@ install_files() { # Fetch and verify the set files. for _f in $_get_sets; do - $UU && reset_watchdog + $UU && reset_timeout rm -f /tmp/h /tmp/fail @@ -1694,7 +1694,7 @@ install_files() { # Install the set files. for _f in $_get_sets; do - $UU && reset_watchdog + $UU && reset_timeout _fsrc="$_src/$_f" # Take the set file from the prefetch area if possible. @@ -1743,7 +1743,7 @@ install_files() { cp ${_src#file://}/SHA256 /mnt/var/db/installed.SHA256 fi - $UU && reset_watchdog + $UU && reset_timeout } # Fetch install sets from an HTTP server possibly using a proxy. @@ -3283,25 +3283,9 @@ check_unattendedupgrade() { ) > /dev/null 2>&1 } -WATCHDOG_PERIOD_SEC=$((30 * 60)) - -# Restart the background timer. -reset_watchdog() { - kill -KILL $WDPID 2>/dev/null - start_watchdog -} - -# Start a co-process to reboot a stalled sysupgrade. -# This mechanism is only used during non-interactive sysupgrade. -start_watchdog() { - ( - sleep $WATCHDOG_PERIOD_SEC && reboot - ) |& - WDPID=$! - - # Close standard input of the co-process. - exec 3>&p; exec 3>&- -} +# Reboot out of a stalled non-interactive sysupgrade. +TIMEOUT_ACTION=reboot +TIMEOUT_PERIOD_SEC=$((30 * 60)) # ------------------------------------------------------------------------------ # Initial actions common to both installs and upgrades. @@ -3452,7 +3436,7 @@ elif $UU; then MODE=upgrade check_unattendedupgrade || exit 1 - start_watchdog + start_timeout get_responsefile do_autoinstall -- 2.20.1