diff --git a/Makefile b/Makefile index 83a0ec60..50a4c29b 100644 --- a/Makefile +++ b/Makefile @@ -11,3 +11,11 @@ check: install: install -d $(DESTDIR)$(FIRMWAREDIR) ./copy-firmware.sh $(DESTDIR)$(FIRMWAREDIR) + +install-xz: + install -d $(DESTDIR)$(FIRMWAREDIR) + ./copy-firmware.sh --xz $(DESTDIR)$(FIRMWAREDIR) + +install-zst: + install -d $(DESTDIR)$(FIRMWAREDIR) + ./copy-firmware.sh --zstd $(DESTDIR)$(FIRMWAREDIR) diff --git a/WHENCE b/WHENCE index 8566b208..e6309eba 100644 --- a/WHENCE +++ b/WHENCE @@ -3890,14 +3890,19 @@ License: Redistributable. See LICENSE.amd-sev for details Driver: microcode_amd - AMD CPU Microcode Update Driver for Linux File: amd-ucode/microcode_amd.bin +Raw: amd-ucode/microcode_amd.bin Version: 2013-07-10 File: amd-ucode/microcode_amd_fam15h.bin +Raw: amd-ucode/microcode_amd_fam15h.bin Version: 2018-05-24 File: amd-ucode/microcode_amd_fam16h.bin +Raw: amd-ucode/microcode_amd_fam16h.bin Version: 2014-10-28 File: amd-ucode/microcode_amd_fam17h.bin +Raw: amd-ucode/microcode_amd_fam17h.bin Version: 2023-04-13 File: amd-ucode/microcode_amd_fam19h.bin +Raw: amd-ucode/microcode_amd_fam19h.bin Version: 2023-01-31 File: amd-ucode/README diff --git a/copy-firmware.sh b/copy-firmware.sh index 40cec04e..58eb7e39 100755 --- a/copy-firmware.sh +++ b/copy-firmware.sh @@ -6,6 +6,9 @@ verbose=: prune=no +# shellcheck disable=SC2209 +compress=cat +compext= while test $# -gt 0; do case $1 in @@ -20,6 +23,27 @@ while test $# -gt 0; do shift ;; + --xz) + if test "$compext" == ".zst"; then + echo "ERROR: cannot mix XZ and ZSTD compression" + exit 1 + fi + compress="xz --compress --quiet --stdout --check=crc32" + compext=".xz" + shift + ;; + + --zstd) + if test "$compext" == ".xz"; then + echo "ERROR: cannot mix XZ and ZSTD compression" + exit 1 + fi + # shellcheck disable=SC2209 + compress="zstd --compress --quiet --stdout" + compext=".zst" + shift + ;; + *) if test "x$destdir" != "x"; then echo "ERROR: unknown command-line options: $*" @@ -35,18 +59,23 @@ done # shellcheck disable=SC2162 # file/folder name can include escaped symbols grep '^File:' WHENCE | sed -e 's/^File: *//g;s/"//g' | while read f; do test -f "$f" || continue - $verbose "copying file $f" install -d "$destdir/$(dirname "$f")" - cp -d "$f" "$destdir/$f" + $verbose "copying/compressing file $f$compext" + if test "$compress" != "cat" && grep -q "^Raw: $f\$" WHENCE; then + $verbose "compression will be skipped for file $f" + cat "$f" > "$destdir/$f" + else + $compress "$f" > "$destdir/$f$compext" + fi done # shellcheck disable=SC2162 # file/folder name can include escaped symbols grep -E '^Link:' WHENCE | sed -e 's/^Link: *//g;s/-> //g' | while read f d; do - if test -L "$f"; then - test -f "$destdir/$f" && continue - $verbose "copying link $f" + if test -L "$f$compext"; then + test -f "$destdir/$f$compext" && continue + $verbose "copying link $f$compext" install -d "$destdir/$(dirname "$f")" - cp -d "$f" "$destdir/$f" + cp -d "$f$compext" "$destdir/$f$compext" if test "x$d" != "x"; then target="$(readlink "$f")" @@ -58,16 +87,16 @@ grep -E '^Link:' WHENCE | sed -e 's/^Link: *//g;s/-> //g' | while read f d; do $verbose "WARNING: unneeded symlink detected: $f" else $verbose "WARNING: pruning unneeded symlink $f" - rm -f "$f" + rm -f "$f$compext" fi fi else $verbose "WARNING: missing target for symlink $f" fi else - $verbose "creating link $f -> $d" install -d "$destdir/$(dirname "$f")" - ln -sf "$d" "$destdir/$f" + $verbose "creating link $f$compext -> $d$compext" + ln -s "$d$compext" "$destdir/$f$compext" fi done