[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.138 and 1.146

version 1.138, 2021/12/26 18:58:54 version 1.146, 2022/01/07 04:22:29
Line 120 
Line 120 
                 echo "Cannot fetch $_src$_error" >&2                  echo "Cannot fetch $_src$_error" >&2
                 return 1                  return 1
         fi          fi
   
           return 0
 }  }
   
   fetch_cfile() {
           if "$DOWNLOAD"; then
                   set +o noclobber # we want to get the latest CFILE
                   fetch "$CFILE" || return 1
                   set -o noclobber
                   ! signify -qVep "$FWPUB_KEY" -x "$CFILE" -m "$CFILE" &&
                       echo "Signature check of SHA256.sig failed" >&2 && return 1
           elif [ ! -e "$CFILE" ]; then
                   echo "${0##*/}: $CFILE: No such file or directory" >&2
                   return 2
           fi
   
           return 0
   }
   
 verify() {  verify() {
           [ -e "$CFILE" ] || fetch_cfile || return 1
         # On the installer we don't get sha256 -C, so fake it.          # On the installer we don't get sha256 -C, so fake it.
         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() {
Line 152 
Line 172 
   
 firmware_filename() {  firmware_filename() {
         local _f          local _f
           [ -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 199 
Line 220 
 }  }
   
 add_firmware () {  add_firmware () {
         local _f="${1##*/}" _pkgname          local _f="${1##*/}" _m="${2:-Install}" _pkgname
         FWPKGTMP="$( tmpdir "${DESTDIR}/var/db/pkg/.firmware" )"          FWPKGTMP="$( tmpdir "${DESTDIR}/var/db/pkg/.firmware" )"
         local _flags=-vm          local _flags=-vm
         case "$VERBOSE" in          case "$VERBOSE" in
Line 207 
Line 228 
                 2|3) _flags=-Vm ;;                  2|3) _flags=-Vm ;;
         esac          esac
   
         [ "$VERBOSE" -eq 1 ] && echo -n "Install ${_f} ..."          ftp -N "${0##/}" -D "$_m" "$_flags" -o- "file:${1}" |
   
         ftp -N "${0##/}" -D "Install" "$_flags" -o- "file:${1}" |  
                 tar -s ",^\+,${FWPKGTMP}/+," \                  tar -s ",^\+,${FWPKGTMP}/+," \
                     -s ",^firmware,${DESTDIR}/etc/firmware," \                      -s ",^firmware,${DESTDIR}/etc/firmware," \
                     -C / -zxphf - "+*" "firmware/*"                      -C / -zxphf - "+*" "firmware/*"
Line 235 
Line 254 
         chmod 755 "$FWPKGTMP"          chmod 755 "$FWPKGTMP"
         mv "$FWPKGTMP" "${DESTDIR}/var/db/pkg/${_pkgname}"          mv "$FWPKGTMP" "${DESTDIR}/var/db/pkg/${_pkgname}"
         unset FWPKGTMP          unset FWPKGTMP
   
         [ "$VERBOSE" -eq 1 ] && echo " done."  
 }  }
   
 delete_firmware() {  delete_firmware() {
         local _cwd _pkg="$1" _pkgdir="${DESTDIR}/var/db/pkg"          local _cwd _pkg="$1" _pkgdir="${DESTDIR}/var/db/pkg"
   
         # TODO: Check hash for files before deleting          # TODO: Check hash for files before deleting
         [ "$VERBOSE" -gt 0 ] && echo -n "Uninstall $_pkg ..."          [ "$VERBOSE" -gt 2 ] && echo -n "Uninstall $_pkg ..."
         _cwd="${_pkgdir}/$_pkg"          _cwd="${_pkgdir}/$_pkg"
   
         if [ ! -e "$_cwd/+CONTENTS" ] ||          if [ ! -e "$_cwd/+CONTENTS" ] ||
Line 279 
Line 296 
                 fi                  fi
         done          done
   
         [ "$VERBOSE" -gt 0 ] && echo " done."          [ "$VERBOSE" -gt 2 ] && echo " done."
   
           return 0
 }  }
   
 usage() {  usage() {
Line 288 
Line 307 
 }  }
   
 ALL=false  ALL=false
 OPT_D=  OPT_F=
 while getopts :adDnp: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 ;;
        D) OPT_D=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 323 
Line 342 
 fi  fi
   
 # "Download only" means local dir and don't install  # "Download only" means local dir and don't install
 if [ "$OPT_D" ]; then  if [ "$OPT_F" ]; then
         INSTALL=false          INSTALL=false
         LOCALSRC="${LOCALSRC:-.}"          LOCALSRC="${LOCALSRC:-.}"
   
           # Always check for latest CFILE and so latest firmware
           if [ -e "$LOCALSRC/$CFILE" ]; then
                   mv "$LOCALSRC/$CFILE" "$LOCALSRC/$CFILE-OLD"
                   if fetch_cfile; then
                           rm -f "$LOCALSRC/$CFILE-OLD"
                   else
                           mv "$LOCALSRC/$CFILE-OLD" "$LOCALSRC/$CFILE"
                           echo "Using existing $CFILE" >&2
                   fi
           fi
 elif [ "$LOCALSRC" ]; then  elif [ "$LOCALSRC" ]; then
         DOWNLOAD=false          DOWNLOAD=false
 fi  fi
Line 338 
Line 368 
 set -sA devices -- "$@"  set -sA devices -- "$@"
   
 if "$DELETE"; then  if "$DELETE"; then
         [ "$OPT_D" ] && usage 22          [ "$OPT_F" ] && usage 22
   
           # Show the "Uninstalling" message when just deleting not upgrading
           [ "$VERBOSE" -gt 0 ] && VERBOSE=3
   
         set -A installed          set -A installed
         if [ "${devices[*]:-}" ]; then          if [ "${devices[*]:-}" ]; then
                 "$ALL" && usage 22                  "$ALL" && usage 22
Line 375 
Line 408 
                 done                  done
         fi          fi
   
         deleted="${deleted:+${deleted#,}}"          deleted="${deleted#,}"
         echo "${0:##*/}: deleted ${deleted:-none}";          echo "${0:##*/}: deleted ${deleted:-none}";
   
         exit          exit
 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 391 
Line 424 
 if [ "${devices[*]:-}" ]; then  if [ "${devices[*]:-}" ]; then
         "$ALL" && usage 22          "$ALL" && usage 22
 else  else
         [ "$VERBOSE" -gt 0 ] && echo -n "Detect firmware ..."          [ "$VERBOSE" -gt 1 ] && echo -n "Detect firmware ..."
         set -sA devices -- $( detect_firmware )          set -sA devices -- $( detect_firmware )
         [ "$VERBOSE" -gt 0 ] &&          [ "$VERBOSE" -gt 1 ] &&
             { [ "${devices[*]:-}" ] && echo " found." || echo " done." ; }              { [ "${devices[*]:-}" ] && echo " found." || echo " done." ; }
 fi  fi
   
 [ "${devices[*]:-}" ] || exit  [ "${devices[*]:-}" ] || exit
   
 if "$DOWNLOAD"; then  
         set +o noclobber # we want to get the latest CFILE  
         fetch "$CFILE"  
         set -o noclobber  
         ! signify -qVep "$FWPUB_KEY" -x "$CFILE" -m "$CFILE" &&  
             echo "Signature check of SHA256.sig failed" >&2 && exit 1  
 elif [ ! -e "$CFILE" ]; then  
         # TODO: We shouldn't need a CFILE if all arguments are files.  
         echo "${0##*/}: $CFILE: No such file or directory" >&2  
         exit 2  
 fi  
   
 added=''  added=''
 updated=''  updated=''
 kept=''  kept=''
 for f in "${devices[@]}"; do  for f in "${devices[@]}"; do
         d="$( firmware_devicename "$f" )"          d="$( firmware_devicename "$f" )"
   
           verify_existing="$DOWNLOAD"
         if [ "$f" = "$d" ]; then          if [ "$f" = "$d" ]; then
                 f=$( firmware_filename "$d" || true )                  f=$( firmware_filename "$d" || true )
                 [ "$f" ] || continue                  [ "$f" ] || continue
Line 424 
Line 446 
         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
                   # If someone specified a filename on the command-line
                   # we don't want to verify it.
                   verify_existing=false
         fi          fi
   
         set -A installed -- $( installed_firmware '' "$d-firmware-" '*' )          set -A installed -- $( installed_firmware '' "$d-firmware-" '*' )
Line 431 
Line 457 
         if "$INSTALL" && [ "${installed[*]:-}" ]; then          if "$INSTALL" && [ "${installed[*]:-}" ]; then
                 for i in "${installed[@]}"; do                  for i in "${installed[@]}"; do
                         if [ "${f##*/}" = "$i.tgz" ]; then                          if [ "${f##*/}" = "$i.tgz" ]; then
                                 [ "$VERBOSE" -gt 0 ] && echo "Keep $i"                                  [ "$VERBOSE" -gt 2 ] && echo "Keep $i"
                                 kept="$kept,$d"                                  kept="$kept,$d"
                                 continue 2                                  continue 2
                         fi                          fi
Line 440 
Line 466 
   
         if [ -e "$f" ]; then          if [ -e "$f" ]; then
                 if "$DOWNLOAD"; then                  if "$DOWNLOAD"; then
                         [ "$VERBOSE" -gt 0 ] && ! "$INSTALL" &&                          if "$verify_existing" && ! "$DRYRUN"; then
                             echo "Keep/Verify ${f##*/}"                                  [ "$VERBOSE" -gt 1 ] && ! "$INSTALL" &&
                         "$DRYRUN"  || verify "$f" || continue                                      echo "Keep/Verify ${f##*/}"
                                   verify "$f" || continue
                           else
                                   [ "$VERBOSE" -gt 1 ] && ! "$INSTALL" &&
                                       echo "Keep ${f##*/}"
                           fi
                         "$INSTALL" || kept="$kept,$d"                          "$INSTALL" || kept="$kept,$d"
                 # else assume it was verified when downloaded                  # else assume it was verified when downloaded
                 fi                  fi
Line 454 
Line 485 
                         fetch  "$f" &&                          fetch  "$f" &&
                         verify "$f" ||                          verify "$f" ||
                             { [ "$VERBOSE" -eq 1 ] && echo " failed."; continue; }                              { [ "$VERBOSE" -eq 1 ] && echo " failed."; continue; }
                         [ "$VERBOSE" -eq 1 ] && echo " done."                          [ "$VERBOSE" -eq 1 ] && ! "$INSTALL" && echo " done."
                 fi                  fi
                 "$INSTALL" || added="$added,$d"                  "$INSTALL" || added="$added,$d"
         elif "$INSTALL"; then          elif "$INSTALL"; then
Line 464 
Line 495 
   
         "$INSTALL" || continue          "$INSTALL" || continue
   
         removed=false          update=''
         if [ "${installed[*]:-}" ]; then          if [ "${installed[*]:-}" ]; then
                 for i in "${installed[@]}"; do                  for i in "${installed[@]}"; do
                         "$DRYRUN" || delete_firmware "$i"                          "$DRYRUN" || delete_firmware "$i"
                         removed=true                          update="Update"
                 done                  done
         fi          fi
   
         "$DRYRUN" || add_firmware "$f"          "$DRYRUN" || add_firmware "$f" "$update"
   
         f="${f##*/}"          f="${f##*/}"
         f="${f%.tgz}"          f="${f%.tgz}"
         if "$removed"; then          if [ "$update" ]; then
                 "$DRYRUN" && [ "$VERBOSE" -gt 0 ] && echo "Update $f"                  if [ "$VERBOSE" -eq 1 ] && "$DOWNLOAD" && ! "$DRYRUN"; then
                           echo " updated."
                   elif [ "$VERBOSE" -eq 1 ]; then
                           echo "Update $f"
                   elif [ "$VERBOSE" -gt 0 ] && "$DRYRUN"; then
                           echo "Update $f"
                   fi
                 updated="$updated,$d"                  updated="$updated,$d"
         else          else
                 "$DRYRUN" && [ "$VERBOSE" -gt 0 ] && echo "Install $f"                  if [ "$VERBOSE" -eq 1 ] && "$DOWNLOAD" && ! "$DRYRUN"; then
                           echo " installed."
                   elif [ "$VERBOSE" -eq 1 ]; then
                           echo "Install $f"
                   elif [ "$VERBOSE" -gt 0 ] && "$DRYRUN"; then
                           echo "Install $f"
                   fi
                 added="$added,$d"                  added="$added,$d"
         fi          fi
 done  done

Legend:
Removed from v.1.138  
changed lines
  Added in v.1.146

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