| version 1.26, 2021/11/12 02:38:05 | 
version 1.33, 2021/11/19 03:13:11 | 
 | 
 | 
|  #!/bin/ksh | 
 #!/bin/ksh | 
|  set -e | 
 set -e | 
|   | 
  | 
|  scan_dmesg() { | 
  | 
|          # no bsort for now | 
  | 
|          sed -n "$1" /var/run/dmesg.boot | 
  | 
|  } | 
  | 
|   | 
  | 
|  # Fake up some things from install.sub that we don't need to actually do | 
 # Fake up some things from install.sub that we don't need to actually do | 
|  prefetcharea_fs_list() { | 
 prefetcharea_fs_list() { | 
|          echo "/mnt/tmp" | 
         echo "${DESTDIR}/tmp" | 
|  } | 
 } | 
|  reset_watchdog() { | 
  | 
|  } | 
  | 
|   | 
  | 
|  # tmpdir, do_as, unpriv, and unpriv2 are from install.sub | 
 # tmpdir, do_as, unpriv, and unpriv2 are from install.sub | 
|   | 
  | 
 | 
 | 
|          do_as _file "$@" | 
         do_as _file "$@" | 
|  } | 
 } | 
|   | 
  | 
|  # "fail" needs to be replaced with the "ask_yn" loop like in the installer. | 
 VNAME=${VNAME:-$(sysctl -n kern.osrelease)} | 
|  _issue= | 
 VERSION=${VERSION:"${VNAME%.*}${VNAME#*.}"} | 
|  fail() { | 
 FWDIR=${FWDIR:-$VNAME} | 
|          echo $_issue >&2 | 
 MODE=${MODE:-install} | 
|          exit 1 | 
  | 
|  } | 
  | 
|   | 
  | 
|  VNAME=$(sysctl -n kern.osrelease) | 
  | 
|  VERSION="${VNAME%.*}${VNAME#*.}" | 
  | 
|  FWDIR="$VNAME" | 
  | 
|   | 
  | 
|  # TODO: We need the firmware for the system we just installed | 
 # TODO: We need the firmware for the system we just installed | 
|  #       not the one we booted from.  For example: | 
 #       not the one we booted from.  For example: | 
|  #       * booting from a snapshot bsd.rd that thinks it is the 7.0 release | 
 #       * booting from a snapshot bsd.rd that thinks it is the 7.0 release | 
 | 
 | 
|  #       Otherwise, the fw_update after first boot will fix it up for us. | 
 #       Otherwise, the fw_update after first boot will fix it up for us. | 
|   | 
  | 
|  HTTP_FWDIR=$FWDIR | 
 HTTP_FWDIR=$FWDIR | 
|  set -- $(scan_dmesg "/^OpenBSD $VNAME\([^ ]*\).*$/s//\1/p") | 
 set -- sed -n "/^OpenBSD $VNAME\([^ ]*\).*$/s//\1/p" /var/run/dmesg.boot | 
|  [[ $1 == -!(stable) ]] && HTTP_FWDIR=snapshots | 
 [[ $1 == -!(stable) ]] && HTTP_FWDIR=snapshots | 
|   | 
  | 
|  FWURL=http://firmware.openbsd.org/firmware/${HTTP_FWDIR} | 
 FWURL=http://firmware.openbsd.org/firmware/${HTTP_FWDIR} | 
 | 
 | 
|  # TODO: support srclocal installation of firmware somehow | 
 # TODO: support srclocal installation of firmware somehow | 
|  fw_update() { | 
 fw_update() { | 
|          local _src=$1 _tmpfs_list _tmpfs _tmpsrc \ | 
         local _src=$1 _tmpfs_list _tmpfs _tmpsrc \ | 
|                  _t=Get _cfile="/tmp/SHA256" _pkgdir=/mnt/var/db/pkg \ | 
                 _t=Get _cfile="/tmp/SHA256" _pkgdir=${DESTDIR}/var/db/pkg \ | 
|                  _f _r _remove _i _installed | 
                 _f _r _remove _i _installed | 
|          local _srclocal=false _unpriv=unpriv | 
         local _srclocal=false _unpriv=unpriv | 
|   | 
  | 
 | 
 | 
|              echo "Signature check of SHA256.sig failed" >&2 && return 1 | 
             echo "Signature check of SHA256.sig failed" >&2 && return 1 | 
|   | 
  | 
|          for _d in $_drivers; do | 
         for _d in $_drivers; do | 
|                  $UU && reset_watchdog | 
  | 
|                  _f=$( sed -n "s/.*(\($_d-firmware-.*\.tgz\)).*/\1/p" "$_cfile" ) | 
                 _f=$( sed -n "s/.*(\($_d-firmware-.*\.tgz\)).*/\1/p" "$_cfile" ) | 
|                  _installed=$( | 
                 _installed=$( | 
|                  for fw in "${_pkgdir}/$_d-firmware"*; do | 
                 for fw in "${_pkgdir}/$_d-firmware"*; do | 
 | 
 | 
|   | 
  | 
|                          while read c g; do | 
                         while read c g; do | 
|                                  case $c in | 
                                 case $c in | 
|                                  @cwd) cwd="/mnt/$g" | 
                                 @cwd) cwd="${DESTDIR}/$g" | 
|                                    ;; | 
                                   ;; | 
|                                  @*) continue | 
                                 @*) continue | 
|                                    ;; | 
                                   ;; | 
 | 
 | 
|                  # TODO: Should we mark these so real fw_update can -Drepair? | 
                 # TODO: Should we mark these so real fw_update can -Drepair? | 
|                  ftp -D "Install" -Vmo- "file:$_tmpsrc/$_f" | | 
                 ftp -D "Install" -Vmo- "file:$_tmpsrc/$_f" | | 
|                          tar -s ",^\+,${_pkgdir}/${_f%.tgz}/+," \ | 
                         tar -s ",^\+,${_pkgdir}/${_f%.tgz}/+," \ | 
|                          -s ",^firmware,mnt/etc/firmware," \ | 
                         -s ",^firmware,${DESTDIR}/etc/firmware," \ | 
|                          -C / -zxphf - "+*" "firmware/*" | 
                         -C / -zxphf - "+*" "firmware/*" | 
|   | 
  | 
|                  ed -s "${_pkgdir}/${_f%.tgz}/+CONTENTS" <<EOL | 
                 ed -s "${_pkgdir}/${_f%.tgz}/+CONTENTS" <<EOL |