Traduzioni: English - Français - Italiano


Avvio da rete e firmware

Questa pagina descrive come includere firmware non liberi nelle immagini Debian per l'avvio da rete.

Introduzione

Alcune schede di rete non hanno un firmware in ROM ma lo caricano piuttosto dal sistema operativo host; non è grosso problema finché non si realizza che gran parte dei firmware non è libera e non può essere inclusa nelle immagini standard del Debian-Installer.

La soluzione dell'installatore Debian proposta è di produrre udeb non liberi che contengano il firmware e modificare l'installatore per dare all'utente la possibilità di inserirli al momento dell'installazione stessa, scaricando da un archivio non-free (ad esempio attraverso la rete).

Il problema

Si può notare che questo approccio non funziona bene con le immagini per l'avvio da rete che hanno bisogno del firmware ethernet, e questo necessita di essere in initrd.gz prima dell'avvio del kernel; una soluzione è quella di costruire la propria immagine del Debian Installer. Ciò è possibile ed il processo di creazione del Debian Installer è descritto nella pagina wiki dell'Installatore Debian (d-i).

L'autore preferisce utilizzare un approccio diverso, basato sul fatto che il kernel Linux 2.6 utilizza initramfs piuttosto che initrd.

La soluzione: aggiungere il firmware ad initramfs

Initramfs è essenzialmente una concatenazione di archivi cpio compressi con gzip che vengono estratti in un ramdisk e usati dal kernel Linux come uno spazio utente anticipato. L'initrd.gz dell'installatore Debian è in realtà un unico archivio contenente tutti i file di installazione necessari all'avvio; con la semplice aggiunta di un altro cpio con i file del firmware mancanti si ottiene quanto desiderato.

Nuovo metodo semplice per Debian 8 Jessie e successive

Debian ora distribuisce anche un firmware cpio.gz che può essere direttamente concatenato a initramfs. Questo semplifica le cose.

Esempio nr.1: aggiungere deb da firmware.cpio.gz

# spostarsi con cd nella directory dove si ha l'initrd
cd /tftpboot/debian-installer/i386
[ -f initrd.gz.orig ] || cp -p initrd.gz initrd.gz.orig
[ -f firmware.cpio.gz ] || wget http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/stable/current/firmware.cpio.gz
cat initrd.gz.orig firmware.cpio.gz > initrd.gz

Configurazione con preseed

Ricordarsi che è necessario abilitare il repository non-free per assicurarsi che i pacchetti del firmware ricevano gli aggiornamenti di sicurezza (in caso ce ne fossero).

Questo può essere fatto mettendo come preseed di configurazione questo:

Esempi per Debian 7 "Wheezy"

Le funzionalità presenti nell'installatore Debian e disponibili a partire dal rilascio Debian 6.0 (Squeeze) forniscono un metodo semplice per aggiungere firmware all'initramfs del debian-installer.

I test iniziali con il debian-installer di Wheezy, versione beta 4, mostrano che il metodo usato per Squeeze funziona ancora. Gli esempi per Wheezy con gli URL aggiornati sono descritti qui di seguito.

Esempio n. 1 per Wheezy: aggiungere un unico deb con 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

# Spostarsi nella directory dell'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

Esempio n. 2 per stable: aggiungere deb da 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

# Spostarsi nella directory dell'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

Configurazione con preseed di Wheezy

Ricordarsi che è necessario abilitare il repository non-free per garantire che i pacchetti firmware ricevano gli aggiornamenti di sicurezza (nell'eventualità che ve ne siano).

Ciò può essere fatto usando con il preseed quanto segue:

Esempi per Debian 6.0 "Squeeze"

Le nuove funzionalità nella versione Squeeze dell'installatore Debian forniscono un metodo più semplice per aggiungere il firmware al suo initramfs.

Esempio n. 1 per Squeeze: aggiungere il firmware da un singolo deb

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

# Spostarsi nella directory dell'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

Esempio n. 2 per oldstable: aggiungere i deb da 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

# Spostarsi nella directory dell'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

Preconfigurazione di Squeeze

Si ricorda che è necessario abilitare il repository non-free per garantire che il pacchetto del firmware riceva gli aggiornamenti di sicurezza (se ce ne sono).

Questo può essere fatto preconfigurando quanto segue:

Vedere anche


CategoryNetwork