So, we have these Dell PowerEdge servers at work. Great machines, and they all come with these Broadcom Network cards that use a driver called 'bnx2' under the Linux kernel. As some things do, this requires
special firmware to be made available to the network driver in order to work correctly. As you might imagine, this can become very annoying when you're trying to do a
network install and your network card is greedily asking for files that aren't on the CD.
So, over the course of running into this same issue for almost 2 years now, I've tried a few things to streamline the process:
- Grab the latest Weekly/Testing Installer - Some will ask to load firmware off USB, some won't. None have done it right as of yet.
- Grab special backported images - No luck at first, but the latest version has the files available. Unfortunately they were in the wrong directory, which led me to the solution below.
- Using the first full Debian CD to do a network-less install, and then loading firmware-bnx2 on the finished install, followed by manual network config.
- And I don't remember, I've tried so many different "recommended" ways of loading firmware into the installer that I've forgotten several.
Anyway, here's the easiest way I've found:
- Grab a Network Install image. Real men use the Testing installer because it's pretty obvious if you have a bad image.
- Get one of those fancy USB memory sticks. Or if you're cheap like me, find a coworker with one and "borrow" it.
- Extract the firmware from the bnx2 firmware package (.fw files) into a firmware/ directory on the USB key. Or use mine here.
- Run through the network install until you are just BEFORE the "detect network" steps.
- Hit alt-F2 to switch to a console, and plug the USB key in.
- The kernel should auto-mount the key, and tell you the partition in dmesg: dmesg | tail -30 should show you something like "mounted on sdb1"
- Mount the partition and copy the firmware files to where the kernel needs them: mount -t vfat /dev/sdb1 /mnt;cp -a /mnt/firmware/ /lib/firmware/;umount /mnt
- Hit Alt-F1 to switch back to the Installer, and run the Network detect. If it fails to detect, switch back to the F2 console and look at dmesg. It is likely looking for a different version of one of the firmware files. You can usually get away with renaming another file with the same version to the one it is looking for. The worst that happens is it still won't load the firmware (well, for the bnx2 stuff, I don't know if other firmware will cause your dog to explode for different hardware).
- Once it tries to detect the card and fails to load the firmware, it won't look for new firmware unless you unload the module first. To force it to reload the driver, remove it in the F2 console with: modprobe -r bnx2
- With the firmware there, the network detection should go smoothly, and the Installer will be on its merry way. Once its finished and you're able to run apt in your shiny new shell, install the firmware-bnx2 package, or whatever firmware package you may have used this for if they exist. This should hopefully help any debian kernels keep things in place as you upgrade.
I hope this saves someone a few hours of frustration. At the very least, I have some notes I can look at when this is still happening a year from now.