| version 1.68, 2021/12/11 03:56:35 |
version 1.69, 2021/12/11 05:08:38 |
|
|
| 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 |
| |
|
|
|
| } |
} |
| |
|
| 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 |
| } |
} |
|
|
| 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 |
|
|
| |
|
| INSTALL=true |
INSTALL=true |
| DOWNLOAD=true |
DOWNLOAD=true |
| LOCALDIR=false |
|
| |
|
| while getopts dL name |
while getopts dL name |
| do |
do |
| case "$name" in |
case "$name" in |
| # "download only" means local dir and don't install |
# "download only" means local dir and don't install |
| d) LOCALDIR=true INSTALL=false ;; |
d) LOCALSRC=. INSTALL=false ;; |
| L) LOCALDIR=true ;; |
L) LOCALSRC=. ;; |
| ?) usage 2 ;; |
?) usage 2 ;; |
| esac |
esac |
| done |
done |
|
|
| |
|
| # If we're installing from a local dir |
# If we're installing from a local dir |
| # we don't want to download anything |
# we don't want to download anything |
| "$LOCALDIR" && "$INSTALL" && DOWNLOAD=false |
[ "$LOCALSRC" ] && "$INSTALL" && DOWNLOAD=false |
| |
[ "$LOCALSRC" ] || LOCALSRC="$( tmpdir "${DESTDIR}/tmp/fw_install" )" |
| |
|
| set -A devices -- "$@" |
set -A devices -- "$@" |
| |
|
|
|
| i=$((i + 1)) |
i=$((i + 1)) |
| done |
done |
| |
|
| if ! "$LOCALDIR"; then |
|
| cd "$( tmpdir "${DESTDIR}/tmp/fw_install" )" |
|
| fi |
|
| |
|
| if "$DOWNLOAD" && ! [[ -e "$CFILE" ]]; then |
if "$DOWNLOAD" && ! [[ -e "$CFILE" ]]; then |
| fetch "$CFILE" |
fetch "$CFILE" |
| ! signify -qVep "$FWPUB_KEY" -x "$CFILE" -m "$CFILE" && |
! signify -qVep "$FWPUB_KEY" -x "$CFILE" -m "$CFILE" && |
|
|
| 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 |
|
|
| |
|
| if [ ! -e "$f" ]; then |
if [ ! -e "$f" ]; then |
| "$INSTALL" && ! "$DOWNLOAD" && |
"$INSTALL" && ! "$DOWNLOAD" && |
| echo "Cannot install $f, not found" >&2 && continue |
echo "Cannot install ${f##*/}, not found" >&2 && continue |
| fetch "$f" || continue |
fetch "$f" || continue |
| verify "$f" || continue |
verify "$f" || continue |
| elif $DOWNLOAD; then |
elif $DOWNLOAD; then |