[Eisfair] Vorgehensweise um manuell die initrd.gz zu modifizieren

Thomas Bork tom at eisfair.org
Di Okt 15 21:18:52 CEST 2019


Am 15.10.2019 um 21:00 schrieb D. Oezbilen:

> Wo/wie suchst Du? Nur als Info.

Ich weiß, wo sie liegen, denn ich bringe sie mit. Und das sind auch nur 
_mögliche_ Updates, da ich dabei nicht prüfen kann, welche Microcodes 
eventuell schon installiert sind.
Siehe die Routine in /tmp/install.sh der Kernel-Updates:

#-----------------------------------------------------------------------------
# create /var/install/initrd/ucode.img and concatenate with normal initrd.gz
#-----------------------------------------------------------------------------
# remove files from kernel package 3.17.0/3.18.0
rm -f /var/install/initrd/intel-ucode.img
rm -f /var/install/initrd/initrd.gz.with.iucode
rm -f /var/install/initrd/initrd.gz.without.iucode
# remove old files
rm -f /var/install/initrd/ucode.img
rm -f /var/install/initrd/initrd.gz.with.ucode
rm -f /var/install/initrd/initrd.gz.without.ucode
rm -rf /tmp/microcode_mount.?*

# check for virtual environment
lscpu | egrep -qi 'vmware|xen|kvm|qemu|virtualbox|bochs'

# only do this in non vitualized environments
if [ $? -eq 1 ]
then
     message="Running in physical environment, trying to add microcode 
updates ..."
     echo "$message"
     echo "$message" >>"$klogfile"

     microcode_mount=`/bin/mktemp -d -t microcode_mount.XXXXXXXXXX`
     if [ $? -ne 0 ]
     then
         microcode_mount="/__mnt_initrd__.$$"
     fi

     # add intel microcodes if needed
     if [ -d /lib/firmware/intel-ucode ]
     then
         if grep -q 'GenuineIntel' /proc/cpuinfo
         then
             iucode_tool_bin='/tmp/iucode_tool'
             ${iucode_tool_bin} -S -l /lib/firmware/intel-ucode/* 
 >>"$klogfile" 2>&1

             if [ $? -eq 0 ]
             then
                 message="Adding Intel microcode updates to initramfs ..."
                 echo "$message"
                 echo "$message" >>"$klogfile"

                 mkdir -p ${microcode_mount}/kernel/x86/microcode
                 ${iucode_tool_bin} -S -w 
${microcode_mount}/kernel/x86/microcode/GenuineIntel.bin 
/lib/firmware/intel-ucode/* >>"$klogfile" 2>&1
             fi
         fi
     fi

     rm -f /tmp/iucode_tool

     # add amd microcodes if needed
     amd_microcode_files=''
     if [ -d /lib/firmware/amd-ucode ]
     then
         if grep -q 'AuthenticAMD' /proc/cpuinfo
         then
             case `lscpu | grep 'CPU family:' | awk -F':' '{ print $2 }' 
| sed "s#${tabs_or_blanks}##g"`
             in
                 # 10h bis 14h
 
16|17|18|19|20)amd_microcode_files='/lib/firmware/amd-ucode/microcode_amd.bin*'
                 ;;
                 # 15h
 
21)amd_microcode_files='/lib/firmware/amd-ucode/microcode_amd_fam15h.bin*'
                 ;;
                 # 16h
 
22)amd_microcode_files='/lib/firmware/amd-ucode/microcode_amd_fam16h.bin*'
                 ;;
                 # 17h
 
23)amd_microcode_files='/lib/firmware/amd-ucode/microcode_amd_fam17h.bin*'
                 ;;
             esac

             if [ -n "$amd_microcode_files" ]
             then
                 message="Adding AMD microcode updates to initramfs ..."
                 echo "$message"
                 echo "$message" >>"$klogfile"

                 mkdir -p ${microcode_mount}/kernel/x86/microcode
                 ls -l ${amd_microcode_files} >>"$klogfile" 2>&1
                 cat ${amd_microcode_files} 
 >${microcode_mount}/kernel/x86/microcode/AuthenticAMD.bin
             fi
         fi
     fi

     # create /var/install/initrd/ucode.img
     if [ -d ${microcode_mount}/kernel/x86/microcode ]
     then
         cd ${microcode_mount}
         find . | cpio -o -H newc --quiet >/var/install/initrd/ucode.img
     fi

     # delete temp dir
     cd /
     rm -rf ${microcode_mount}

     if [ -f /var/install/initrd/ucode.img ]
     then
         # keep normal initrd.gz
         mv -f /var/install/initrd/initrd.gz 
/var/install/initrd/initrd.gz.without.ucode
         # create combined image
         cat /var/install/initrd/ucode.img 
/var/install/initrd/initrd.gz.without.ucode 
 >/var/install/initrd/initrd.gz.with.ucode
         cp /var/install/initrd/initrd.gz.with.ucode 
/var/install/initrd/initrd.gz
     else
         message="No microcode update for your cpu available."
         echo "$message"
         echo "$message" >>"$klogfile"
     fi
else
     message="Running in virtual environment, don't trying to add 
microcode updates ..."
     echo "$message"
     echo "$message" >>"$klogfile"
     rm -f /tmp/iucode_tool
fi

-- 
der tom
[eisfair-team]


Mehr Informationen über die Mailingliste Eisfair