It annoys me when the computer fail to do automatically what it is perfectly capable of, and I have to do it manually to get things working. One such task is to find out what firmware packages are needed to get the hardware on my computer working. Most often this affect the wifi card, but some times it even affect the RAID controller or the ethernet card. Today I pushed version 0.4 of the Isenkram package including a new script isenkram-autoinstall-firmware handling the process of asking all the loaded kernel modules what firmware files they want, find debian packages providing these files and install the debian packages. Here is a test run on my laptop:
# isenkram-autoinstall-firmware info: kernel drivers requested extra firmware: ipw2200-bss.fw ipw2200-ibss.fw ipw2200-sniffer.fw info: fetching http://http.debian.net/debian/dists/squeeze/Contents-i386.gz info: locating packages with the requested firmware files info: Updating APT sources after adding non-free APT source info: trying to install firmware-ipw2x00 firmware-ipw2x00 firmware-ipw2x00 Preconfiguring packages ... Selecting previously deselected package firmware-ipw2x00. (Reading database ... 259727 files and directories currently installed.) Unpacking firmware-ipw2x00 (from .../firmware-ipw2x00_0.28+squeeze1_all.deb) ... Setting up firmware-ipw2x00 (0.28+squeeze1) ... #
When all the requested firmware is present, a simple message is printed instead:
# isenkram-autoinstall-firmware info: did not find any firmware files requested by loaded kernel modules. exiting #
It could use some polish, but it is already working well and saving me some time when setting up new machines. :)
So, how does it work? It look at the set of currently loaded kernel modules, and look up each one of them using modinfo, to find the firmware files listed in the module meta-information. Next, it download the Contents file from a nearby APT mirror, and search for the firmware files in this file to locate the package with the requested firmware file. If the package is in the non-free section, a non-free APT source is added and the package is installed using apt-get install. The end result is a slightly better working machine.
I hope someone find time to implement a more polished version of this script as part of the hw-detect debian-installer module, to finally fix BTS report #655507. There really is no need to insert USB sticks with firmware during a PXE install when the packages already are available from the nearby Debian mirror.