[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

options for adding non-free drivers to images



In the 2.6.11 kernel, the kernel team chose to drop some popular NIC
drivers which have non-free firmware. This included the tg3 driver,
which is apparently too hard to patch to a firmwareless state anymore. 

Some of these modules (the ones whose firmware has a license allowing
distribution at all) will eventually be uploaded in a
kernel-modules-nonfree-2.6.11 package. d-i trunk is already set up to
build udebs of those.

But making a udeb is only the first step. We need to find a way to let
users use this udeb. One way would be to require them to use a driver
floppy. But floppies suck. Since my main i386 d-i test machine uses tg3
and I do not want to have to use driver floppies for all my d-i work, I
looked for a better way[1].

I considered just adding the nic-modules-nonfree udeb to the
package-lists, but I doubt we want all the d-i images to be in non-free.

I considered making an alternate d-i images build that includes the
non-free modules, done in paralell to the free build. But I suspect the
end result would be that nearly everyone would just use the non-free
build when possible, to avoid trouble. And we'd still not be able to
include it on debian CDs.

So I got to thinking about letting the user assemble the peices; adding
non-free udebs to d-i images if they desired to. This seemed to strike
the right balance between convenience and idealology. How to implement
it?

The 2.6 kernel has the new initramfs filesystem, which is a cpio archive
appended to the kernel. One neat thing is that it can really be multiple
cpio archives; the kernel assembles them all into one filesystem on
boot. This would let us ship a cpio of non-free drivers and the user
just appends this to thier kernel+initramfs image. It will even work for
supplying non-free firmware files to in-kernel drivers.

That's elegant, but not perfect, since it would only work if the user
can modify the kernel file. It would allow adding non-free drivers to
netboot images on i386, maybe to usb images, but not to iso images. On
other arches that have piggybacked netboot kernel images, it might not
work (dunno). So you'd still need a driver floppy for isos and floppy
installs on i386, and maybe for netboot too on !i386 (some of which
arches don't have floppies..). It also wouldn't work for 2.4, if they
begin removing firmware from that kernel too..

Apparently there's also the possibility for a smart bootloader to load
user-supplied cpio files and pass them to the kernel as it's booting,
which might fill in some of these holes, but I don't know of any boot
loaders that can do it yet.

A similar idea is adding code to the installer to let the user append
cpios, or udebs, or whatever format we choose to installer images and
have the installer look for such things at the end of its boot image,
CD, whatever. That should be doable for CDs. I don't think it will work
for initrd images on at least i386[2]. Using regular udebs is attractive,
but if we have to mix this with initramfs to cover (most) image types 
then they'd better for cpios, for consistency.

Another approach entirely is to write a program that can take
$RANDOM_DI_IMAGE, unpack it, add $RANDOM_UDEB, and repack it. We'd need
to make the program available on the web or something for users w/o a
debian system to run it on, though. And dealing with all image types of 
all architectures would be a lot of work.

Of course, even though my main reason for wanting d-i to support
something like this is because of non-free firmware, there would be
other applications, including debugging, easier image customisation, and
adding initrd-preseed files.

Anyway, I hope we can solve this soon, I'm dying to get sid d-i using
2.6.11 ...

-- 
see shy jo

[1] Better aside from digging up another NIC card that is.
[2] Since the initrd.gz is unzipped and the content becomes /dev/root;
    anything appended to the end on initrd.gz is discarded.

Attachment: signature.asc
Description: Digital signature


Reply to: