Merge sysupgrade watchdog and prompt timeout code
authorkn <kn@openbsd.org>
Sun, 29 Aug 2021 13:31:52 +0000 (13:31 +0000)
committerkn <kn@openbsd.org>
Sun, 29 Aug 2021 13:31:52 +0000 (13:31 +0000)
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
distrib/miniroot/install.sub

index 6a998d9..1b9939c 100644 (file)
@@ -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
 
index 45a8974..fb24b32 100644 (file)
@@ -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 <rpe@openbsd.org>
@@ -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