[BACK]Return to fw_install.sh CVS log [TXT][DIR] Up to [local] / openbsd / fw_update

Diff for /openbsd/fw_update/fw_install.sh between version 1.144 and 1.149

version 1.144, 2022/01/07 02:16:31 version 1.149, 2022/01/14 04:25:46
Line 55 
Line 55 
 tmpdir() {  tmpdir() {
         local _i=1 _dir          local _i=1 _dir
   
         # If we're not in the installer,          # The installer lacks mktemp(1), do it by hand
         # we have mktemp and a more hostile environment.  
         if [ -x /usr/bin/mktemp ]; then          if [ -x /usr/bin/mktemp ]; then
                 _dir=$( mktemp -d "${1}-XXXXXXXXX" )                  _dir=$( mktemp -d "${1}-XXXXXXXXX" )
         else          else
Line 71 
Line 70 
 fetch() {  fetch() {
         local _src="${FWURL}/${1##*/}" _dst=$1 _user=_file _exit _error=''          local _src="${FWURL}/${1##*/}" _dst=$1 _user=_file _exit _error=''
   
         # If we're not in the installer,          # The installer uses a limited doas(1) as a tiny su(1)
         # we have su(1) and doas(1) is unlikely to be configured.  
         set -o monitor # make sure ftp gets its own process group          set -o monitor # make sure ftp gets its own process group
         (          (
         _flags=-vm          _flags=-vm
Line 120 
Line 118 
                 echo "Cannot fetch $_src$_error" >&2                  echo "Cannot fetch $_src$_error" >&2
                 return 1                  return 1
         fi          fi
   
           return 0
 }  }
   
 fetch_cfile() {  fetch_cfile() {
Line 133 
Line 133 
                 echo "${0##*/}: $CFILE: No such file or directory" >&2                  echo "${0##*/}: $CFILE: No such file or directory" >&2
                 return 2                  return 2
         fi          fi
   
           return 0
 }  }
   
 verify() {  verify() {
         [ -e "$CFILE" ] || fetch_cfile          [ -e "$CFILE" ] || fetch_cfile || return 1
         # On the installer we don't get sha256 -C, so fake it.          # The installer sha256 lacks -C, do it by hand
         if ! fgrep -qx "SHA256 (${1##*/}) = $( /bin/sha256 -qb "$1" )" "$CFILE"; then          if ! fgrep -qx "SHA256 (${1##*/}) = $( /bin/sha256 -qb "$1" )" "$CFILE"; then
                 echo "Checksum test for ${1##*/} failed." >&2                  echo "Checksum test for ${1##*/} failed." >&2
                 return 1                  return 1
         fi          fi
   
           return 0
 }  }
   
 firmware_in_dmesg() {  firmware_in_dmesg() {
         local _d _m _line _dmesgtail _last='' _nl=$( echo )          local _d _m _line _dmesgtail _last='' _nl=$( echo )
   
         # When we're not in the installer, the dmesg.boot can          # The dmesg can contain multiple boots, only look in the last one
         # contain multiple boots, so only look in the last one  
         _dmesgtail="$( echo ; sed -n 'H;/^OpenBSD/h;${g;p;}' /var/run/dmesg.boot )"          _dmesgtail="$( echo ; sed -n 'H;/^OpenBSD/h;${g;p;}' /var/run/dmesg.boot )"
   
         grep -v '^[[:space:]]*#' "$FWPATTERNS" |          grep -v '^[[:space:]]*#' "$FWPATTERNS" |
Line 166 
Line 169 
   
 firmware_filename() {  firmware_filename() {
         local _f          local _f
         [ -e "$CFILE" ] || fetch_cfile          [ -e "$CFILE" ] || fetch_cfile || return 1
         _f="$( sed -n "s/.*(\($1-firmware-.*\.tgz\)).*/\1/p" "$CFILE" | sed '$!d' )"          _f="$( sed -n "s/.*(\($1-firmware-.*\.tgz\)).*/\1/p" "$CFILE" | sed '$!d' )"
         ! [ "$_f" ] && echo "Unable to find firmware for $1" >&2 && return 1          ! [ "$_f" ] && echo "Unable to find firmware for $1" >&2 && return 1
         echo "$_f"          echo "$_f"
Line 235 
Line 238 
                 return 1                  return 1
         fi          fi
   
         # TODO: Should we mark these so real fw_update can -Drepair?  
         ed -s "${FWPKGTMP}/+CONTENTS" <<EOL          ed -s "${FWPKGTMP}/+CONTENTS" <<EOL
 /^@comment pkgpath/ -1a  /^@comment pkgpath/ -1a
 @option manual-installation  @option manual-installation
Line 276 
Line 278 
                 esac                  esac
         done < "${_pkgdir}/${_pkg}/+CONTENTS"          done < "${_pkgdir}/${_pkg}/+CONTENTS"
   
         # We specifically rm -f here because not removing files/dirs          # Use rm -f, not removing files/dirs is probably not worth failing over
         # is probably not worth failing over.  
         for _r in "${_remove[@]}" ; do          for _r in "${_remove[@]}" ; do
                 if [ -d "$_r" ]; then                  if [ -d "$_r" ]; then
                         # Try hard not to actually remove recursively                          # The installer lacks rmdir,
                         # without rmdir on the install media.                          # but we only want to remove empty directories.
                         set +o noglob                          set +o noglob
                         [ "$_r/*" = "$( echo "$_r"/* )" ] && rm -rf "$_r"                          [ "$_r/*" = "$( echo "$_r"/* )" ] && rm -rf "$_r"
                         set -o noglob                          set -o noglob
Line 296 
Line 297 
 }  }
   
 usage() {  usage() {
         echo "usage:  ${0##*/} [-d | -D] [-av] [-p path] [driver | file ...]"          echo "usage: ${0##*/} [-d | -F] [-av] [-p path] [driver | file ...]"
         exit 2          exit 2
 }  }
   
Line 304 
Line 305 
 OPT_F=  OPT_F=
 while getopts :adFnp:v name  while getopts :adFnp:v name
 do  do
        case "$name" in          case "$name" in
        a) ALL=true ;;          a) ALL=true ;;
        d) DELETE=true ;;          d) DELETE=true ;;
        F) OPT_F=true ;;          F) OPT_F=true ;;
        n) DRYRUN=true ;;          n) DRYRUN=true ;;
        p) LOCALSRC="$OPTARG" ;;          p) LOCALSRC="$OPTARG" ;;
        v) VERBOSE=$(( VERBOSE + 1 )) ;;          v) VERBOSE=$(( VERBOSE + 1 )) ;;
        :)          :)
            echo "${0##*/}: option requires an argument -- -$OPTARG" >&2              echo "${0##*/}: option requires an argument -- -$OPTARG" >&2
            usage 2              usage 2
            ;;              ;;
        ?)          ?)
            echo "${0##*/}: unknown option -- -$OPTARG" >&2              echo "${0##*/}: unknown option -- -$OPTARG" >&2
            usage 2              usage 2
            ;;              ;;
        esac          esac
 done  done
 shift $((OPTIND - 1))  shift $((OPTIND - 1))
   
Line 409 
Line 410 
 fi  fi
   
 if [ ! "$LOCALSRC" ]; then  if [ ! "$LOCALSRC" ]; then
     LOCALSRC="$( tmpdir "${DESTDIR}/tmp/${0##*/}" )"          LOCALSRC="$( tmpdir "${DESTDIR}/tmp/${0##*/}" )"
     REMOVE_LOCALSRC=true          REMOVE_LOCALSRC=true
 fi  fi
   
 CFILE="$LOCALSRC/$CFILE"  CFILE="$LOCALSRC/$CFILE"
Line 432 
Line 433 
 for f in "${devices[@]}"; do  for f in "${devices[@]}"; do
         d="$( firmware_devicename "$f" )"          d="$( firmware_devicename "$f" )"
   
           verify_existing=true
         if [ "$f" = "$d" ]; then          if [ "$f" = "$d" ]; then
                 f=$( firmware_filename "$d" || true )                  f=$( firmware_filename "$d" || true )
                 [ "$f" ] || continue                  [ "$f" ] || continue
Line 439 
Line 441 
         elif ! "$INSTALL" && ! grep -Fq "($f)" "$CFILE" ; then          elif ! "$INSTALL" && ! grep -Fq "($f)" "$CFILE" ; then
                 echo "Cannot download local file $f" >&2                  echo "Cannot download local file $f" >&2
                 exit 2                  exit 2
           else
                   # Don't verify files specified on the command-line
                   verify_existing=false
         fi          fi
   
         set -A installed -- $( installed_firmware '' "$d-firmware-" '*' )          set -A installed -- $( installed_firmware '' "$d-firmware-" '*' )
Line 453 
Line 458 
                 done                  done
         fi          fi
   
         if [ -e "$f" ]; then          if "$verify_existing" && [ -e "$f" ]; then
                 if "$DOWNLOAD"; then                  msg="Keep/Verify"
                         [ "$VERBOSE" -gt 1 ] && ! "$INSTALL" &&                  "$INSTALL" && msg="Verify"
                             echo "Keep/Verify ${f##*/}"                  [ "$VERBOSE" -gt 1 ] && ! "$INSTALL" &&
                         "$DRYRUN"  || verify "$f" || continue                      echo "$msg ${f##*/}"
   
                   if "$DRYRUN" || verify "$f"; then
                         "$INSTALL" || kept="$kept,$d"                          "$INSTALL" || kept="$kept,$d"
                 # else assume it was verified when downloaded                  elif "$DOWNLOAD"; then
                           [ "$VERBOSE" -gt 0 ] && echo "Refetching $f"
                           rm -f $f
                   else
                           continue
                 fi                  fi
           fi
   
           if [ -e "$f" ]; then
                   true # verified above
         elif "$DOWNLOAD"; then          elif "$DOWNLOAD"; then
                 if "$DRYRUN"; then                  if "$DRYRUN"; then
                         [ "$VERBOSE" -gt 0 ] && echo "Get/Verify ${f##*/}"                          [ "$VERBOSE" -gt 0 ] && echo "Get/Verify ${f##*/}"

Legend:
Removed from v.1.144  
changed lines
  Added in v.1.149

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>