# Buildsheet autogenerated by ravenadm tool -- Do not edit. NAMEBASE= cpu-microcode-rc VERSION= 1.0 KEYWORDS= sysutils VARIANTS= standard SDESC[standard]= RC script for CPU microcode updates HOMEPAGE= none CONTACT= nobody DOWNLOAD_GROUPS= none SPKGS[standard]= single OPTIONS_AVAILABLE= none OPTIONS_STANDARD= none NOT_FOR_ARCH= aarch64 FPC_EQUIVALENT= sysutils/cpu-microcode-rc SKIP_BUILD= yes SKIP_INSTALL= yes RC_SUBR= microcode_update:single SUB_FILES= pkg-message-single SUB_LIST= DATADIR="{{PREFIX}}/share/cpucontrol" [FILE:215:descriptions/desc.single] An RC script for use with the cpuctl(4) microcode update facility to keep your processor's firmware up-to-date. CPU microcode data must be installed from a vendor. See devcpu-data-amd and devcpu-data-intel ports. [FILE:2251:files/microcode_update.in] #!/bin/sh # PROVIDE: microcode_update # REQUIRE: root mountcritlocal # KEYWORD: nojail # BEFORE: SERVERS # # Add the following line to /etc/rc.conf to enable flow-capture: # microcode_update_enable (bool): Set it to "YES" to update microcode on startup # Set to "NO" by default. # microcode_update_datadir (str): Directory, microcode updates stored in. # Default is "%%DATADIR%%" # microcode_update_cpus (str): A list of cpus to update on startup, or "ALL" for all. # Example: microcode_update_cpus="0 1" # Set to "ALL" by default. # microcode_update_flags (str): Flags for cpucontrol(8). . /etc/rc.subr name="microcode_update" rcvar=microcode_update_enable stop_cmd=":" start_cmd="microcode_update_start" required_modules="cpuctl" CMT="/usr/sbin/cpucontrol" microcode_update_start() { echo "Updating CPU Microcode..." if [ "${microcode_update_cpus}" = "ALL" ]; then ncpu=`/sbin/sysctl -n hw.ncpu` cpus=`jot ${ncpu} 0`; else cpus=${microcode_update_cpus} fi for i in ${cpus}; do ${CMT} -u ${microcode_update_flags} \ -d "${microcode_update_datadir}" /dev/cpuctl${i} 2>&1 | \ logger -p daemon.notice -t microcode_update || \ (echo "Microcode Update Failed." && exit 1) done if [ "${microcode_update_cpus}" = "ALL" ]; then CPUCONTROL_UPDATED=$(cpucontrol -h 2>&1 | grep -q -- -e; echo $?) if [ ${CPUCONTROL_UPDATED} -ne 0 ]; then echo "Please update your system in order to update CPU microcode." else ${CMT} -e /dev/cpuctl0 >/dev/null 2>&1 if [ $? -ne 0 ]; then echo "Re-evalulation of CPU flags Failed." exit 1 fi fi fi echo "Done." } load_rc_config $name # Set default values if [ -n "${microcode_cpus}" ]; then if [ -n "${microcode_update_cpus}" ]; then echo "Warning: Ignoring deprecated rc variable, microcode_cpus." else echo "Warning: rc variable microcode_cpus is deprecated. Warning: Set microcode_udpate_cpus instead." microcode_update_cpus="${microcode_cpus}" fi fi : ${microcode_update_enable="NO"} : ${microcode_update_datadir="%%DATADIR%%"} : ${microcode_update_cpus="ALL"} : ${microcode_update_flags=""} run_rc_command "$1" [FILE:1554:files/pkg-message-single.in] This port includes an RC script, which is one of two methods to update the CPU microcode on a FreeBSD system. 1. The first method does not require the RC script included here and is only supported with Intel processors. It is the preferred method, because it ensures that any CPU features introduced by a microcode update are visible to the kernel by applying the update before the kernel performs CPU feature detection. To enable updates using the first method, add the following lines to /boot/loader.conf: cpu_microcode_load="YES" cpu_microcode_name="/boot/firmware/intel-ucode.bin" The microcode update will be loaded when the system is rebooted. 2. The second method, which uses the RC script included here, can be enabled by adding the following line to /etc/rc.conf: microcode_update_enable="YES" The microcode update is then applied upon reboot or when the microcode update service is run via: # service microcode_update start If the CPU requires a microcode update, a console message such as the following will appear: Updating CPU Microcode... %%DATADIR%%/m32306c3_00000022.fw: updating cpu /dev/cpuctl0 from rev 0x17 to rev 0x22... done. %%DATADIR%%/m32306c3_00000022.fw: updating cpu /dev/cpuctl2 from rev 0x17 to rev 0x22... done. %%DATADIR%%/m32306c3_00000022.fw: updating cpu /dev/cpuctl4 from rev 0x17 to rev 0x22... done. %%DATADIR%%/m32306c3_00000022.fw: updating cpu /dev/cpuctl6 from rev 0x17 to rev 0x22... done. Done. It is safe to enable both methods.