version 1.111, 2021/12/23 20:25:40 |
version 1.117, 2021/12/23 21:52:21 |
|
|
} |
} |
|
|
usage() { |
usage() { |
echo "usage: ${0##*/} [-d | -D | -L] [-v] [driver | file ...]" |
echo "usage: ${0##*/} [-d | -D | -L] [-av] [driver | file ...]" |
exit 2 |
exit 2 |
} |
} |
|
|
|
ALL=false |
OPT_D= |
OPT_D= |
OPT_L= |
OPT_L= |
while getopts :dDLv name |
while getopts :adDLv name |
do |
do |
case "$name" in |
case "$name" in |
|
a) ALL=true ;; |
d) DELETE=true ;; |
d) DELETE=true ;; |
D) OPT_D=true ;; |
D) OPT_D=true ;; |
L) OPT_L=true ;; |
L) OPT_L=true ;; |
|
|
if "$DELETE"; then |
if "$DELETE"; then |
[ "$OPT_D" ] || [ "$OPT_L" ] && usage 22 |
[ "$OPT_D" ] || [ "$OPT_L" ] && usage 22 |
|
|
[ "${devices[*]:-}" ] || usage 22 |
set -A installed |
|
if [ "${devices[*]:-}" ]; then |
|
"$ALL" && usage 22 |
|
|
deleted='' |
set -A installed -- $( |
for d in "${devices[@]}"; do |
for d in "${devices[@]}"; do |
f="${d##*/}" # don't just uninstall from anywhere |
f="${d##*/}" # only care about the name |
f="${f%.tgz}" # allow specifying the package name |
f="${f%.tgz}" # allow specifying the package name |
|
[ "$( firmware_devicename "$f" )" = "$f" ] && f="$f-firmware" |
|
|
set -A installed -- $( installed_firmware '' "$f" '*' ) |
set -A i -- $( installed_firmware '' "$f-" '*' ) |
|
|
if [ ! "${installed[*]:-}" ]; then |
if [ "${i[*]:-}" ]; then |
echo "No firmware found for '$d'" >&2 |
echo "${i[@]}" |
continue |
else |
fi |
echo "No firmware found for '$d'" >&2 |
|
fi |
|
done |
|
) |
|
elif "$ALL"; then |
|
set -A installed -- $( installed_firmware '*' '-firmware-' '*' ) |
|
fi |
|
|
|
deleted='' |
|
if [ "${installed:-}" ]; then |
for fw in "${installed[@]}"; do |
for fw in "${installed[@]}"; do |
delete_firmware "$fw" || continue |
delete_firmware "$fw" || continue |
deleted="$deleted,$fw" |
deleted="$deleted,$( firmware_devicename "$fw" )" |
done |
done |
done |
fi |
|
|
deleted="${deleted:+${deleted#,}}" |
deleted="${deleted:+${deleted#,}}" |
echo "${0:##*/}: deleted ${deleted:-none}"; |
echo "${0:##*/}: deleted ${deleted:-none}"; |
|
|
exit |
exit |
fi |
fi |
|
|
if [ ! "${devices[*]:-}" ]; then |
if [ "${devices[*]:-}" ]; then |
|
"$ALL" && usage 22 |
|
else |
"$VERBOSE" && echo -n "Detecting firmware ..." |
"$VERBOSE" && echo -n "Detecting firmware ..." |
set -A devices -- $( devices_needing_firmware ) |
set -A devices -- $( devices_needing_firmware ) |
"$VERBOSE" && |
"$VERBOSE" && |
|
|
[ "${devices[*]:-}" ] || exit |
[ "${devices[*]:-}" ] || exit |
|
|
if "$DOWNLOAD"; then |
if "$DOWNLOAD"; then |
|
set +o noclobber # we want to get the latest CFILE |
fetch "$CFILE" |
fetch "$CFILE" |
|
set -o noclobber |
! 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 |
fi |
fi |
|
|
added='' |
added='' |
updated='' |
updated='' |
|
kept='' |
for f in "${devices[@]}"; do |
for f in "${devices[@]}"; do |
d="$( firmware_devicename "$f" )" |
d="$( firmware_devicename "$f" )" |
|
|
|
|
for i in "${installed[@]}"; do |
for i in "${installed[@]}"; do |
if [ "${f##*/}" = "$i.tgz" ]; then |
if [ "${f##*/}" = "$i.tgz" ]; then |
"$VERBOSE" && echo "$i already installed" |
"$VERBOSE" && echo "$i already installed" |
|
kept="$kept,$d" |
continue 2 |
continue 2 |
fi |
fi |
done |
done |
|
|
if "$DOWNLOAD"; then |
if "$DOWNLOAD"; then |
"$VERBOSE" && echo "Verify existing ${f##*/}" |
"$VERBOSE" && echo "Verify existing ${f##*/}" |
verify "$f" || continue |
verify "$f" || continue |
|
"$INSTALL" || kept="$kept,$d" |
# else assume it was verified when downloaded |
# else assume it was verified when downloaded |
fi |
fi |
elif "$DOWNLOAD"; then |
elif "$DOWNLOAD"; then |
fetch "$f" || continue |
fetch "$f" || continue |
verify "$f" || continue |
verify "$f" || continue |
|
"$INSTALL" || added="$added,$d" |
elif "$INSTALL"; then |
elif "$INSTALL"; then |
echo "Cannot install ${f##*/}, not found" >&2 |
echo "Cannot install ${f##*/}, not found" >&2 |
continue |
continue |
|
|
add_firmware "$f" |
add_firmware "$f" |
|
|
if "$removed"; then |
if "$removed"; then |
[ "$updated" ] && updated="$updated," |
updated="$updated,$d" |
updated="$updated$d" |
|
else |
else |
[ "$added" ] && added="$added," |
added="$added,$d" |
added="$added$d" |
|
fi |
fi |
done |
done |
|
|
if ! $VERBOSE && { [ "$added" ] || [ "$updated" ]; }; then |
added="${added:#,}" |
echo "${0##*/}: $( |
updated="${updated:#,}" |
[ "$added" ] && echo -n "added ${added}" |
kept="${kept:#,}" |
[ "$added" ] && [ "$updated" ] && echo -n "; " |
if "$INSTALL"; then |
[ "$updated" ] && echo -n "updated ${updated}" |
echo "${0##*/}: added ${added:-none}; updated ${updated:-none}; kept ${kept:-none}" |
)" |
else |
|
echo "${0##*/}: downloaded ${added:-none}; kept ${kept:-none}" |
fi |
fi |