When PXE installing laptops with Debian, I often run into the
problem that the WiFi card require some firmware to work properly.
And it has been a pain to fix this using preseeding in Debian.
Normally something more is needed. But thanks to
my isenkram
package and its recent tasksel extension, it has now become easy
to do this using simple preseeding.
The isenkram-cli package provide tasksel tasks which will install
firmware for the hardware found in the machine (actually, requested by
the kernel modules for the hardware). (It can also install user space
programs supporting the hardware detected, but that is not the focus
of this story.)
To get this working in the default installation, two preeseding
values are needed. First, the isenkram-cli package must be installed
into the target chroot (aka the hard drive) before tasksel is executed
in the pkgsel step of the debian-installer system. This is done by
preseeding the base-installer/includes debconf value to include the
isenkram-cli package. The package name is next passed to debootstrap
for installation. With the isenkram-cli package in place, tasksel
will automatically use the isenkram tasks to detect hardware specific
packages for the machine being installed and install them, because
isenkram-cli contain tasksel tasks.
Second, one need to enable the non-free APT repository, because
most firmware unfortunately is non-free. This is done by preseeding
the apt-mirror-setup step. This is unfortunate, but for a lot of
hardware it is the only option in Debian.
The end result is two lines needed in your preseeding file to get
firmware installed automatically by the installer:
base-installer base-installer/includes string isenkram-cli
apt-mirror-setup apt-setup/non-free boolean true
The current version of isenkram-cli in testing/jessie will install
both firmware and user space packages when using this method. It also
do not work well, so use version 0.15 or later. Installing both
firmware and user space packages might give you a bit more than you
want, so I decided to split the tasksel task in two, one for firmware
and one for user space programs. The firmware task is enabled by
default, while the one for user space programs is not. This split is
implemented in the package currently in unstable.
If you decide to give this a go, please let me know (via email) how
this recipe work for you. :)
So, I bet you are wondering, how can this work. First and
foremost, it work because tasksel is modular, and driven by whatever
files it find in /usr/lib/tasksel/ and /usr/share/tasksel/. So the
isenkram-cli package place two files for tasksel to find. First there
is the task description file (/usr/share/tasksel/descs/isenkram.desc):
Task: isenkram-packages
Section: hardware
Description: Hardware specific packages (autodetected by isenkram)
Based on the detected hardware various hardware specific packages are
proposed.
Test-new-install: show show
Relevance: 8
Packages: for-current-hardware
Task: isenkram-firmware
Section: hardware
Description: Hardware specific firmware packages (autodetected by isenkram)
Based on the detected hardware various hardware specific firmware
packages are proposed.
Test-new-install: mark show
Relevance: 8
Packages: for-current-hardware-firmware
The key parts are Test-new-install which indicate how the task
should be handled and the Packages line referencing to a script in
/usr/lib/tasksel/packages/. The scripts use other scripts to get a
list of packages to install. The for-current-hardware-firmware script
look like this to list relevant firmware for the machine:
#!/bin/sh
#
PATH=/usr/sbin:$PATH
export PATH
isenkram-autoinstall-firmware -l
With those two pieces in place, the firmware is installed by
tasksel during the normal d-i run. :)
If you want to test what tasksel will install when isenkram-cli is
installed, run DEBIAN_PRIORITY=critical tasksel --test
--new-install to get the list of packages that tasksel would
install.
Debian Edu will be
pilots in testing this feature, as isenkram is used there now to
install firmware, replacing the earlier scripts.