diff --git a/mxgrub/mxgrub b/mxgrub/mxgrub index 527c143..3b36fa0 100755 --- a/mxgrub/mxgrub +++ b/mxgrub/mxgrub @@ -353,9 +353,23 @@ sub cmd_update { update_grub_cfg(); } +sub build_microcode { + my ($pattern, $image, $binname) = @_; + sys(<<"EOF"); +set -e +DSTDIR=kernel/x86/microcode +mkdir -p /scratch/local/mxgrub-build-microcode/ +cd \$_ +mkdir -p "\$DSTDIR" +cat $pattern > "\$DSTDIR"/$binname +find . | cpio -o -H newc > $image +rm -rf /scratch/local/mxgrub-build-microcode/ +EOF +} + sub cmd_initramfs { - sys('bash','-c','TMPDIR=/scratch/local DSTDIR="$TMPDIR/kernel/x86/microcode"; mkdir -p "$DSTDIR"; cd "$DSTDIR" ; cat /lib/firmware/amd-ucode/microcode_amd*.bin > $DSTDIR/AuthenticAMD.bin ; find . | cpio -o -H newc > /boot/amd-ucode.img ; rm -rf "$TMPDIR/kernel"'); - sys('bash','-c','TMPDIR=/scratch/local DSTDIR="$TMPDIR/kernel/x86/microcode"; mkdir -p "$DSTDIR"; cd "$DSTDIR" ; cat /lib/firmware/intel-ucode/* > $DSTDIR/GenuineIntel.bin ; find . | cpio -o -H newc > /boot/intel-ucode.img ; rm -rf "$TMPDIR/kernel"'); + build_microcode('/lib/firmware/amd-ucode/microcode_amd*.bin', '/boot/amd-ucode.img', 'AuthenticAMD.bin'); + build_microcode('/lib/firmware/intel-ucode/*', '/boot/intel-ucode.img', 'GenuineIntel.bin'); sys('bash','-c','cd /project/admin/initramfs ; find . -name ".git*" -prune -or -print | cpio -H newc -o | gzip > /boot/grub/initramfs.igz'); }