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


Démarrage réseau et firmware

Cette page explique comment inclure un firmware non-libre dans les images Debian de démarrage réseau.

Introduction

Certaines cartes réseau n'ont pas leur firmware en mémoire morte (ROM) : elles doivent le charger à partir du système d'exploitation hôte. Ce n'est pas vraiment un problème jusqu'au moment où vous vous rendez compte que ce firmware est non-libre et donc qu'il ne peut-être inclus dans les images ordinaires de l'installateur Debian.

La solution proposée pour l'installateur Debian est de construire des udeb (micro paquets .deb) contenant le firmware et de modifier l'installateur pour qu'il laisse à l'utilisateur la possibilité d'installer ces udeb de firmware au moment de l'installation (en les téléchargeant par exemple par le réseau à partir d'une archive non-libre).

Le problème

On peut voir que cette approche ne fonctionne pas très bien pour des images de démarrage réseau qui ont besoin d'un firmware Ethernet... Le firmware Ethernet a besoin d'être dans l'initrd.gz avant le démarrage du noyau. Une solution est de construire ses propres images de l'installateur Debian. Cela est possible et le processus de création d'un installateur Debian est décrit dans la page wiki de l'installateur Debian (d-i).

L'auteur préfère une approche différente basée sur le fait que le noyau Linux 2.6 utilise initramfs plutôt que initrd.

La solution: ajoutez le firmware à initramfs

Initramfs est essentiellement la concaténation d'archives de format cpio, compressées avec gzip qui sont extraites dans un disque virtuel (ramdisk) utilisé par le noyau Linux comme un premier espace utilisateur. L'initrd.gz de l'installateur Debian est en fait une seule archive cpio compressée contenant tous les fichiers dont l'installateur à besoin au moment du démarrage. Il suffit simplement d'ajouter l'archive cpio compressée qui contient les fichier du firmware qui manque et ça marche !

Exemples pour Debian 7 "Wheezy"

Les nouvelles fonctionnalités de l'installateur Debian disponibles depuis la version 6.0 de Debian (Squeeze) nous donnent une méthode plus simple d'ajouter le firmware à initramfs.

Des premiers essais avec la version beta 4 de l'installateur Debian de Wheezy montre que la méthode utilisée avec Squeeze fonctionne encore. Voici les exemples pour Wheezy avec les adresse web mises à jour :

Wheezy, exemple n°1 : ajouter un fichier .deb de firmware

FWTMP=/tmp/d-i_firmware
rm -rf $FWTMP
mkdir -p $FWTMP/firmware
cd $FWTMP/firmware
wget http://http.debian.net/debian/pool/non-free/f/firmware-nonfree/firmware-bnx2_0.36+wheezy.1_all.deb
cd ../
pax -x sv4cpio -w firmware | gzip -c >firmware.cpio.gz

# allez dans le répertoire où se trouve 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

Stable, exemple n°2 : ajouter des fichiers .deb à partir d'un fichier 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/stable/current/firmware.tar.gz

tar -C firmware -zxf firmware.tar.gz

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

# allez dans le répertoire où se trouve 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

Pré-définition de l'installateur de Wheezy

N'oubliez pas que vous devrez activer la source non-libre pour garantir que les paquets du firmware recevront leurs mises à jour de sécurité (s'il y en a).

Cela peut être fait en pré-définissant l'installeur avec les valeurs suivante :

Exemples pour Debian 6.0 "Squeeze"

Les nouvelles fonctionnalités de la version Squeeze de l'installateur Debian nous donnent une méthode plus simple d'ajouter le firmware à initramfs.

Squeeze, exemple n°1 : ajouter un fichier .deb de firmware

FWTMP=/tmp/d-i_firmware
rm -rf $FWTMP
mkdir  -p $FWTMP/firmware
cd $FWTMP/firmware
wget http://http.debian.net/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

# allez dans le répertoire où se trouve 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

Oldstable, exemple n°2 : ajouter des fichiers .deb à partir d'un fichier 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/oldstable/current/firmware.tar.gz

tar -C firmware -zxf firmware.tar.gz

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

# allez dans le répertoire où se trouve 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

Pré-définition de l'installateur de Squeeze

N'oubliez pas que vous devrez activer la source non-libre pour garantir que les paquets du firmware recevront leurs mises à jour de sécurité (s'il y en a).

Cela peut être fait en pré-définissant l'installeur avec les valeurs suivante :

Voir aussi


CategoryNetwork