I updated the BMC firmware on my 45HomeLab-X15 and figured I would document the process in case it helps anyone else.
I noticed my BMC firmware was a few versions behind. The system was running:
BMC firmware: 13.06.21
BIOS firmware: R06
The newer package available was:
BMC firmware: 13.06.26
The release notes showed several changes between my installed version and the newer build. The main item that stood out was a fix in 13.06.26 for an issue where MCTP could occasionally fail to communicate with the IPMI service, causing the BMC to become temporarily unresponsive to IPMI commands. I also noticed security/CVE-related fixes in the newer release chain, so it seemed worth updating.
I used the AMI Linux update method from the firmware package.
My extracted package looked like this:
130626/
├── Tools/
│ ├── gigaflash
│ ├── gigaflash_x64
│ ├── gigaflash.efi
│ └── ...
├── fw/
│ ├── 130626.bin
│ └── rom_v130626.ima_enc
├── ami_bmc_fw_update_linux.sh
├── ami_bmc_fw_update_uefi.nsh
├── ami_bmc_fw_update_win.bat
├── BMC_Release_Note_130626.docx
└── GBT_BMC_Firmware_Upgrade_User_Guide_v007.pdf
I copied the extracted firmware folder to the Unraid host under:
/boot/firmware/gigabyte-bmc/130626
Initial prep/checks:
cd /boot/firmware/gigabyte-bmc/130626
find . -maxdepth 2 -type f | sort
chmod +x ami_bmc_fw_update_linux.sh Tools/gigaflash Tools/gigaflash_x64
file ami_bmc_fw_update_linux.sh Tools/gigaflash Tools/gigaflash_x64 fw/130626.bin
ls -lh fw/
The update command I wanted was:
./ami_bmc_fw_update_linux.sh cs 0 preserve
That means:
cs 0 = active BMC
preserve = preserve existing BMC configuration
I specifically did not use flashall, since I wanted to retain BMC network/user/config settings.
The first attempt failed with:
gigaflash v2.0.16
Loading Firmware...
Failed to connect BMC, try to update BMC!
Fail to get vender info!
Fail
The issue was that the local IPMI character device was not present yet. The kernel had detected the BMC/KCS interface, but /dev/ipmi0 did not exist.
This showed the BMC/KCS interface was detected:
lsmod | egrep 'ipmi|kcs|aspeed' || true
dmesg | egrep -i 'ipmi|kcs|bmc' | tail -80
Relevant output:
ipmi_si: IPMI System Interface driver
ipmi_si ... Found new BMC
ipmi_si ... IPMI kcs interface initialized
Then I loaded the missing device interface:
modprobe ipmi_devintf
ls -l /dev/ipmi* /dev/ipmi/* 2>/dev/null
lsmod | egrep 'ipmi|kcs|aspeed'
After that, /dev/ipmi0 existed:
crw------- 1 root root 236, 0 ... /dev/ipmi0
ipmi_devintf
ipmi_si
Then I reran the update:
cd /boot/firmware/gigabyte-bmc/130626
./ami_bmc_fw_update_linux.sh cs 0 preserve
The second run succeeded. Relevant output:
gigaflash v2.0.16
Loading Firmware...
----get image conf info----
----get onboard conf info----
Find ASPEED Device 1a03:2000 on 7:0.0
Found ASPEED Device 1a03:2600 rev. 52
[Warning] Don't AC OFF or Reboot System During BMC Firmware Update!!
Update Flash Chip #1 O.K.
Update Flash Chip O.K.
Wait 90 seconds for BMC Ready...
Success
After the update, the BMC WebUI confirmed:
BMC Firmware version: 13.06.26
BMC Firmware Build Date: Apr 21 2026
BIOS Firmware version: R06
I also checked the local IPMI path afterward:
ls -l /dev/ipmi0
lsmod | egrep 'ipmi_devintf|ipmi_si'
dmesg | egrep -i 'ipmi|kcs|bmc|error|fail' | tail -80
My main Unraid-specific note is that modprobe ipmi_devintf may be required before running the Gigabyte AMI Linux flasher. Without that, gigaflash may fail to connect to the BMC even though the BMC WebUI is reachable over its own management IP.
Once the update was verified, I removed the staged firmware files.
cd /
rm -rf /boot/firmware/gigabyte-bmc/130626
rmdir /boot/firmware/gigabyte-bmc /boot/firmware 2>/dev/null || true
Final result:
45HomeLab-X15 BMC update completed successfully
13.06.21 → 13.06.26
Preserve mode worked
BMC network/users/config retained