Differences between revisions 1 and 30 (spanning 29 versions)
Revision 1 as of 2008-09-12 15:09:54
Size: 2502
Editor: ?AlexOwen
Comment:
Revision 30 as of 2012-02-13 23:58:45
Size: 3713
Comment: Add link to french translation
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
Some network cards annoyingly do not have their firmware in ROM but rather load the firmware from the host operating system. This is not too much of a problem until you realise that much of the firmware is non-free and so cannot be included in the standard debian-installer images. #language en
~-[[DebianWiki/EditorGuide#translation|Translation(s)]]: English - [[fr/DebianInstaller/NetbootFirmware|Français]] - [[it/DebianInstaller/NetbootFirmware|Italiano]]-~
----
Line 3: Line 5:
A similar problem can be found with some storage adapters. The proposed debian-installer solution there is to produce non-free udebs containing the firmware and adjust the installer to give the user the option of installing these firmware udebs at install time downloading from a non-free archive via perhaps the network. = Netbooting and Firmware =
This page describes how to include non-free firmware within Debian netboot images.
Line 5: Line 8:
It can be seen that this approach does not work well with netboot images that need ethernet firmware... the Ethernet firmware really needs to be in the initrd.gz before the kernel boots. One solution is to build your own custom debian-installer images. This is possible and the debian-installer build process is described elsewhere. <<TableOfContents(3)>>
Line 7: Line 10:
I am capable of building debian installer images but I prefer to use a different approach based on the fact that the Linux 2.6 Kernel uses initramfs rather that initrd. == Introduction ==
Some network cards annoyingly do not have their firmware in ROM, but rather load it from the host operating system. This is not too much of a problem until you realise that much of the firmware is non-free and cannot be included in standard Debian Installer images.
Line 9: Line 13:
Initramfs is essentially a concatination of gziped cpio archives that are extrated into a ram disk and used as an early userspace by the Linux Kernel. The debian initaller initrd.gz is infact a single gzipped cpio archive containing all the files the installer needs at boot time. By simply appending another gzipped cpio archive containing the firmware files that we are missing we get the show on the road! ## not strictly relevant to discussion
## A similar problem can be found with some storage adapters.
The proposed [[DebianInstaller|Debian Installer]] solution is to produce non-free udebs containing the firmware and adjust the installer, to give the user the option of installing these firmware udebs at installation time, by downloading from a non-free archive (e.g. via the network).
Line 11: Line 17:
== The Problem ==
It can be seen this approach does not work well with netboot images which need Ethernet firmware... the Ethernet firmware really needs to be in the initrd.gz before the kernel boots. One solution is to build your own custom Debian Installer images. This is possible and the Debian Installer build process is described in [[DebianInstaller/Build|the Debian Installer (d-i) wiki page]].
Line 12: Line 20:
For example I need the firmware from the firmware-bnx2 package to install an HP DL380G5 with lenny. I am capable of building Debian Installer images, but prefer to use a different approach based on the fact the Linux 2.6 kernel uses initramfs rather than [[Initrd|initrd]].
Line 14: Line 22:
#clear and cd into a temp directory
rm -rf /tmp/firmware-bnx2
mkdir /tmp/firmware-bnx2
cd /tmp/firmware-bnx2
#get the lenny deb package containing the firmware
wget http://ftp.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-bnx2_0.12_all.deb
#extract the files from the deb in the temp directory
ar -p firmware-bnx2_0.12_all.deb data.tar.gz | tar -zxf -
#create the cpio using pax, contain stuff under lib but root it in "/" in the archive
pax -x sv4cpio -s '%lib%/lib%' -w lib | gzip -c >bnx2-fw.cpio.gz
== The Solution: Add Firmware to Initramfs ==
[[initramfs|Initramfs]] is essentially a concatenation of gzipped cpio archives which are extracted into a ramdisk and used as an early userspace by the Linux kernel. Debian Installer's initrd.gz is in fact a single gzipped cpio archive containing all the files the installer needs at boot time. By simply appending another gzipped cpio archive - containing the firmware files we are missing - we get the show on the road!
Line 25: Line 25:
#change to Debian Installer directory... (ie where you have your initrd.gz)
cd $debian-installer-dir
#make a backup!
cp -p initrd.gz initrd.gz.orig
#concatinate the firmware
cat initrd.gz.orig /tmp/firmware-bnx2/bnx2-fw.cpio.gz >initrd.gz
== Examples for Squeeze ==
New features in the Squeeze version of debian-installer give us a simpler method of adding firmware to the debian-installer initramfs.
Line 32: Line 28:
Now boot with your new initrd.gz and original vmlinuz and you should be on the road! === Squeeze Example #1 : add single firmware deb ===
{{{
FWTMP=/tmp/d-i_firmware
rm -rf $FWTMP
mkdir -p $FWTMP/firmware
cd $FWTMP/firmware
wget http://ftp.us.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-bnx2_0.28+squeeze1_all.deb
cd ../
pax -x sv4cpio -w firmware | gzip -c >firmware.cpio.gz

# cd to the directory where you have your initrd
cd /tftpboot/debian-installer/i386
[ -f initrd.gz.orig ] || cp -p initrd.gz initrd.gz.orig
cat initrd.gz.orig $FWTMP/firmware.cpio.gz > initrd.gz
}}}

=== Squeeze Example #2 : add debs from firmware.tar.gz ===
{{{
FWTMP=/tmp/d-i_firmware
rm -rf $FWTMP
mkdir -p $FWTMP/firmware
cd $FWTMP

wget http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/squeeze/current/firmware.tar.gz

tar -C firmware -zxf firmware.tar.gz

pax -x sv4cpio -s'%firmware%/firmware%' -w firmware | gzip -c >firmware.cpio.gz

# cd to the directory where you have your initrd
cd /tftpboot/debian-installer/i386
[ -f initrd.gz.orig ] || cp -p initrd.gz initrd.gz.orig
cat initrd.gz.orig $FWTMP/firmware.cpio.gz > initrd.gz
}}}

=== Squeeze Preseed Configuration ===

Remember, you will need to enable the non-free repository to ensure that the firmware packages receive security updates (should there be any).

This can be done by preseeding the following:

 {{{
base-config apt-setup/non-free boolean true
 }}}

== See Also ==
 * [[DebianInstaller]]

----
CategoryNetwork

Translation(s): English - Français - Italiano


Netbooting and Firmware

This page describes how to include non-free firmware within Debian netboot images.

Introduction

Some network cards annoyingly do not have their firmware in ROM, but rather load it from the host operating system. This is not too much of a problem until you realise that much of the firmware is non-free and cannot be included in standard Debian Installer images.

The proposed Debian Installer solution is to produce non-free udebs containing the firmware and adjust the installer, to give the user the option of installing these firmware udebs at installation time, by downloading from a non-free archive (e.g. via the network).

The Problem

It can be seen this approach does not work well with netboot images which need Ethernet firmware... the Ethernet firmware really needs to be in the initrd.gz before the kernel boots. One solution is to build your own custom Debian Installer images. This is possible and the Debian Installer build process is described in the Debian Installer (d-i) wiki page.

I am capable of building Debian Installer images, but prefer to use a different approach based on the fact the Linux 2.6 kernel uses initramfs rather than initrd.

The Solution: Add Firmware to Initramfs

Initramfs is essentially a concatenation of gzipped cpio archives which are extracted into a ramdisk and used as an early userspace by the Linux kernel. Debian Installer's initrd.gz is in fact a single gzipped cpio archive containing all the files the installer needs at boot time. By simply appending another gzipped cpio archive - containing the firmware files we are missing - we get the show on the road!

Examples for Squeeze

New features in the Squeeze version of debian-installer give us a simpler method of adding firmware to the debian-installer initramfs.

Squeeze Example #1 : add single firmware deb

FWTMP=/tmp/d-i_firmware
rm -rf $FWTMP
mkdir  -p $FWTMP/firmware
cd $FWTMP/firmware
wget http://ftp.us.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-bnx2_0.28+squeeze1_all.deb
cd ../
pax -x sv4cpio -w firmware | gzip -c >firmware.cpio.gz

# cd to the directory where you have your initrd
cd /tftpboot/debian-installer/i386
[ -f initrd.gz.orig ] || cp -p initrd.gz initrd.gz.orig
cat initrd.gz.orig $FWTMP/firmware.cpio.gz > initrd.gz

Squeeze Example #2 : add debs from firmware.tar.gz

FWTMP=/tmp/d-i_firmware
rm -rf $FWTMP
mkdir  -p $FWTMP/firmware
cd $FWTMP

wget http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/squeeze/current/firmware.tar.gz

tar -C firmware -zxf firmware.tar.gz

pax -x sv4cpio -s'%firmware%/firmware%' -w firmware | gzip -c >firmware.cpio.gz

# cd to the directory where you have your initrd
cd /tftpboot/debian-installer/i386
[ -f initrd.gz.orig ] || cp -p initrd.gz initrd.gz.orig
cat initrd.gz.orig $FWTMP/firmware.cpio.gz > initrd.gz

Squeeze Preseed Configuration

Remember, you will need to enable the non-free repository to ensure that the firmware packages receive security updates (should there be any).

This can be done by preseeding the following:

  • base-config     apt-setup/non-free      boolean true

See Also


CategoryNetwork