=================================================================== RCS file: /cvs/openbsd/fw_update/fw_install.sh,v retrieving revision 1.124 retrieving revision 1.127 diff -u -r1.124 -r1.127 --- openbsd/fw_update/fw_install.sh 2021/12/24 18:19:00 1.124 +++ openbsd/fw_update/fw_install.sh 2021/12/25 02:38:33 1.127 @@ -1,5 +1,5 @@ #!/bin/ksh -# $OpenBSD: fw_install.sh,v 1.124 2021/12/24 18:19:00 afresh1 Exp $ +# $OpenBSD: fw_install.sh,v 1.127 2021/12/25 02:38:33 afresh1 Exp $ # # Copyright (c) 2021 Andrew Hewus Fresh # @@ -40,6 +40,15 @@ INSTALL=true LOCALSRC= +unset FTPPID +REMOVE_LOCALSRC=false +cleanup() { + set +o errexit # ignore errors from killing ftp + [ "${FTPPID:-}" ] && kill -TERM -"$FTPPID" #2>/dev/null + "$REMOVE_LOCALSRC" && rm -rf "$LOCALSRC" +} +trap cleanup EXIT + tmpdir() { local _i=1 _dir @@ -57,7 +66,7 @@ } fetch() { - local _src="${FWURL}/${1##*/}" _dst=$1 _user=_file _pid _exit _error='' + local _src="${FWURL}/${1##*/}" _dst=$1 _user=_file _exit _error='' # If we're not in the installer, # we have su(1) and doas(1) is unlikely to be configured. @@ -72,14 +81,12 @@ exec /usr/bin/doas -u "$_user" \ /usr/bin/ftp -N "${0##/}" -D 'Get/Verify' $flags -o- "$_src" > "$_dst" fi - ) & _pid=$! + ) & FTPPID=$! set +o monitor - trap "kill -TERM '-$_pid' 2>/dev/null; exit 1" EXIT INT QUIT ABRT TERM - SECONDS=0 _last=0 - while kill -0 -"$_pid" 2>/dev/null; do + while kill -0 -"$FTPPID" 2>/dev/null; do if [[ $SECONDS -gt 12 ]]; then set -- $( ls -ln "$_dst" 2>/dev/null ) if [[ $_last -ne $5 ]]; then @@ -87,7 +94,7 @@ SECONDS=0 sleep 1 else - kill -INT -"$_pid" + kill -INT -"$FTPPID" _error=" (timed out)" fi else @@ -96,11 +103,11 @@ done set +o errexit - wait "$_pid" + wait "$FTPPID" _exit=$? set -o errexit - trap "" EXIT INT QUIT ABRT TERM + unset FTPPID if [ "$_exit" -ne 0 ]; then rm -f "$_dst" @@ -303,10 +310,6 @@ LOCALSRC="${LOCALSRC:-.}" fi -[ "$LOCALSRC" ] || LOCALSRC="$( tmpdir "${DESTDIR}/tmp/${0##*/}" )" - -CFILE="$LOCALSRC/$CFILE" - if [ -x /usr/bin/id ] && [ "$(/usr/bin/id -u)" != 0 ]; then echo "need root privileges" >&2 exit 1 @@ -353,6 +356,13 @@ exit fi + +if [ ! "$LOCALSRC" ]; then + LOCALSRC="$( tmpdir "${DESTDIR}/tmp/${0##*/}" )" + REMOVE_LOCALSRC=true +fi + +CFILE="$LOCALSRC/$CFILE" if [ "${devices[*]:-}" ]; then "$ALL" && usage 22