[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.64 and 1.69

version 1.64, 2021/12/09 02:37:38 version 1.69, 2021/12/11 05:08:38
Line 32 
Line 32 
 FWURL=http://firmware.openbsd.org/firmware/${HTTP_FWDIR}  FWURL=http://firmware.openbsd.org/firmware/${HTTP_FWDIR}
 FWPUB_KEY=${DESTDIR}/etc/signify/openbsd-${VERSION}-fw.pub  FWPUB_KEY=${DESTDIR}/etc/signify/openbsd-${VERSION}-fw.pub
   
   LOCALSRC=
   
 tmpdir() {  tmpdir() {
         local _i=1 _dir          local _i=1 _dir
   
Line 59 
Line 61 
 }  }
   
 fetch() {  fetch() {
         local _file=$1 _user=_file _exit          local _src="${FWURL}/${1##*/}" _dst=$1 _user=_file _exit
   
         # If we're not in the installer, we have su(1)          # If we're not in the installer, we have su(1)
         # and doas(1) is unlikely to be configured.          # and doas(1) is unlikely to be configured.
         if [ -x /usr/bin/su ]; then          if [ -x /usr/bin/su ]; then
                 /usr/bin/su -s /bin/ksh "$_user" -c \                  /usr/bin/su -s /bin/ksh "$_user" -c \
                     "/usr/bin/ftp -D 'Get/Verify' -Vm \                      "/usr/bin/ftp -D 'Get/Verify' -Vm -o- '$_src'" > "$_dst"
                         -o- '${FWURL}/${_file}'" > "$_file"  
                 _exit="$?"                  _exit="$?"
         else          else
                 /usr/bin/doas -u "$_user" \                  /usr/bin/doas -u "$_user" \
                     ftp -D 'Get/Verify' -Vm \                      /usr/bin/ftp -D 'Get/Verify' -Vm -o- "$_src" > "$_dst"
                         -o- "${FWURL}/${_file}" > "$_file"  
                 _exit="$?"                  _exit="$?"
         fi          fi
   
         if [ "$_exit" -ne 0 ]; then          if [ "$_exit" -ne 0 ]; then
                 rm -f "$_file"                  rm -f "$_dst"
                 echo "Cannot fetch $_file" >&2                  echo "Cannot fetch $_src" >&2
                 return 1                  return 1
         fi          fi
 }  }
   
 verify() {  verify() {
         # 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
 }  }
Line 134 
Line 134 
         local _f="${1##*/}" _pkgdir="${DESTDIR}/var/db/pkg"          local _f="${1##*/}" _pkgdir="${DESTDIR}/var/db/pkg"
         ftp -D "Install" -Vmo- "file:${1}" |          ftp -D "Install" -Vmo- "file:${1}" |
                 tar -s ",^\+,${_pkgdir}/${_f%.tgz}/+," \                  tar -s ",^\+,${_pkgdir}/${_f%.tgz}/+," \
                 -s ",^firmware,${DESTDIR}/etc/firmware," \                      -s ",^firmware,${DESTDIR}/etc/firmware," \
                 -C / -zxphf - "+*" "firmware/*"                      -C / -zxphf - "+*" "firmware/*"
   
         # TODO: Should we mark these so real fw_update can -Drepair?          # TODO: Should we mark these so real fw_update can -Drepair?
         ed -s "${_pkgdir}/${_f%.tgz}/+CONTENTS" <<EOL          ed -s "${_pkgdir}/${_f%.tgz}/+CONTENTS" <<EOL
Line 182 
Line 182 
 }  }
   
 usage() {  usage() {
         echo "Usage: fw_install [ -d dir | -L dir ] [ driver | file [ ... ] ]"          echo "usage: fw_install [-d dir | -L dir] [driver | file [...]]"
         exit 2          exit 2
 }  }
   
 DOWNLOADDIR=  INSTALL=true
 LOCALDIR=  DOWNLOAD=true
 while getopts d:L: name  
   while getopts dL name
 do  do
        case "$name" in         case "$name" in
        d) DOWNLOADDIR=$OPTARG ;;         # "download only" means local dir and don't install
        L) LOCALDIR=$OPTARG    ;;         d) LOCALSRC=. INSTALL=false ;;
          L) LOCALSRC=. ;;
        ?) usage 2 ;;         ?) usage 2 ;;
        esac         esac
 done  done
 shift $((OPTIND - 1))  shift $((OPTIND - 1))
   
 if [[ -n "${DOWNLOADDIR:-}" && -n "${LOCALDIR:-}" ]]; then  # If we're installing from a local dir
         echo "Cannot use -d and -L" >&2  # we don't want to download anything
         usage 2  [ "$LOCALSRC" ] && "$INSTALL" && DOWNLOAD=false
 fi  [ "$LOCALSRC" ] || LOCALSRC="$( tmpdir "${DESTDIR}/tmp/fw_install" )"
   
 set -A devices -- "$@"  set -A devices -- "$@"
   
 [ "${devices[*]:-}" ] ||  [ "${devices[*]:-}" ] ||
     set -A devices -- $( devices_needing_firmware )      set -A devices -- $( devices_needing_firmware )
   
 if [ ! "${devices:-}" ]; then  if [ ! "${devices[*]:-}" ]; then
         echo "No devices found which need firmware files to be downloaded."          echo "No devices found which need firmware files to be downloaded."
         exit          exit
 fi  fi
Line 219 
Line 221 
 while (( i < "${#devices[@]}" )); do  while (( i < "${#devices[@]}" )); do
         f="${devices[$i]}"          f="${devices[$i]}"
         d=$( firmware_devicename "$f" )          d=$( firmware_devicename "$f" )
         [ "$f" = "$d" ] && f="$( echo "$f"-firmware-*.tgz | sed '$!d' )"  
         if [ -e "$f" ]; then          if [ -e "$f" ]; then
                 if [ "${DOWNLOADDIR:-}" ]; then                  if "$DOWNLOAD"; then
                         echo "Cannot download local file $f" >&2                          echo "Cannot download local file $f" >&2
                         exit 2                          exit 2
                 fi                  fi
Line 230 
Line 231 
         i=$((i + 1))          i=$((i + 1))
 done  done
   
 if [ "$DOWNLOADDIR" ]; then  if "$DOWNLOAD" && ! [[ -e "$CFILE" ]]; then
         if ! cd "$DOWNLOADDIR"; then  
                 echo "Unable to use $DOWNLOADDIR, make sure it is a directory"  
                 exit 2  
         fi  
 elif [ "$LOCALDIR" ]; then  
         if ! cd "$LOCALDIR"; then  
                 echo "Unable to use $LOCALDIR, make sure it is a directory"  
                 exit 2  
         fi  
 else  
         TMPDIR=$( tmpdir "${DESTDIR}/tmp/fw_install" )  
         cd "$TMPDIR"  
 fi  
   
 if ! [[ -n "$LOCALDIR" && -e "$CFILE" ]]; then  
         fetch "$CFILE"          fetch "$CFILE"
         ! signify -qVep "$FWPUB_KEY" -x "$CFILE" -m "$CFILE" &&          ! signify -qVep "$FWPUB_KEY" -x "$CFILE" -m "$CFILE" &&
             echo "Signature check of SHA256.sig failed" >&2 && exit 1              echo "Signature check of SHA256.sig failed" >&2 && exit 1
Line 256 
Line 242 
         if [ "$f" = "$d" ]; then          if [ "$f" = "$d" ]; then
                 f=$( firmware_filename "$d" || true )                  f=$( firmware_filename "$d" || true )
                 [ "$f" ] || continue                  [ "$f" ] || continue
                   f="$LOCALSRC/$f"
         else          else
                 d="${d%:*}"                  d="${d%:*}"
         fi          fi
   
         set -A installed -- $( installed_firmware "$d" )          set -A installed -- $( installed_firmware "$d" )
   
         if [ ! "${DOWNLOADDIR:-}" ] && [ "${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
                                 echo "$i already installed"                                  echo "$i already installed"
                                 continue 2                                  continue 2
Line 272 
Line 259 
         fi          fi
   
         if [ ! -e "$f" ]; then          if [ ! -e "$f" ]; then
                 [ "$LOCALDIR" ] && echo "Cannot install $f, not found" >&2 && continue                  "$INSTALL" && ! "$DOWNLOAD" &&
                       echo "Cannot install ${f##*/}, not found" >&2 && continue
                 fetch  "$f" || continue                  fetch  "$f" || continue
                 verify "$f" || continue                  verify "$f" || continue
         elif [ "${DOWNLOADDIR:-}" ]; then          elif $DOWNLOAD; then
                 echo "Already have $f"                  echo "Already have $f"
                 verify "$f" || continue                  verify "$f" || continue
         fi          fi
   
         [ "${DOWNLOADDIR:-}" ] && continue          "$INSTALL" || continue
   
         if [ "${installed:-}" ]; then          if [ "${installed[*]:-}" ]; then
                 for i in "${installed[@]}"; do                  for i in "${installed[@]}"; do
                         delete_firmware "$i"                          delete_firmware "$i"
                 done                  done

Legend:
Removed from v.1.64  
changed lines
  Added in v.1.69

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