Differences between revisions 5 and 6
Revision 5 as of 2011-10-09 13:49:06
Size: 6644
Comment: sync with English version
Revision 6 as of 2011-10-09 16:28:54
Size: 6653
Comment: sync with English version
Deletions are marked like this. Additions are marked like this.
Line 36: Line 36:
wget http://ftp.us.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-bnx2_0.28_all.deb wget http://ftp.us.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-bnx2_0.28+squeeze1_all.deb

Translation(s): English - 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 altrove.

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.

Esempi per Squeeze

Le nuove funzionalità nella versione Squeeze dell'installatore Debian forniscono un metodo più semplice per aggiungere il firmware al suo initramfs. Si noti che i metodi per Lenny dovrebbero funzionare anche con Squeeze.

Squeeze, esempio #1 : aggiungere il firmware da un singolo 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

# 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

Squeeze, esempio #2 : 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/squeeze/current/firmware.tar.gz

cd firmware
tar -zxf ../firmware.tar.gz
cd ../

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:

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

Esempi per Lenny

Lenny, esempio #1 : aggiungere il firmware da un singolo deb

Installare su un HP DL380G5 con Lenny e il firmware del pacchetto firmware-bnx2.

  1. Creare una directory temporanea ed entrarvi:

    rm -rf /tmp/firmware-bnx2 
    mkdir  /tmp/firmware-bnx2 
    cd /tmp/firmware-bnx2 
  2. Prelevare il pacchetto (firmware-bnx2) che contiene il firmware:

    wget http://ftp.us.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-bnx2_0.14+lenny2_all.deb
  3. Estrarre i file in una directory temporanea:

    ar -p firmware-bnx2_0.14+lenny2_all.deb data.tar.gz | tar -zxf - 
  4. Creare l'archivio cpio con pax, contiene materiale nella directory lib che verrà passata nella root (/) dell'archivio stesso:

    pax -x sv4cpio -s '%lib%/lib%' -w lib | gzip -c >bnx2-fw.cpio.gz
  5. Spostarsi nella directory dell'installatore (dove è situato initrd.gz):

    cd $directory-debian-installer 
  6. Fare un backup:

    cp -p initrd.gz initrd.gz.orig 
  7. Aggiungere il nuovo archivio all'initrd originale:

    cat /tmp/firmware-bnx2/bnx2-fw.cpio.gz >> initrd.gz

Ora si dovrebbe poter avviare con il nuovo initrd.gz e vmlinuz.

Lenny, esempio #2 : aggiunge il firmware da firmware.tar.gz

In alternativa è possibile utilizzare la seguente procedura per trasformare l'archivio del firmware non libero in un cpio.gz che può essere concatenato all'initrd.gz originale:

  • # Creare una directory temporanea e convertire il tarball in un componente aggiuntivo di initramfs
    FWTMP=/tmp/d-i_firmware
    rm -rf $FWTMP
    mkdir  $FWTMP
    cd $FWTMP
    wget http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/lenny/current/firmware.tar.gz
    tar -zxf firmware.tar.gz
    for name in *.deb ; do 
        ar -p $name data.tar.gz | tar -zxf -
    done
    pax -x sv4cpio -s '%lib%/lib%' -w lib | 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 $FWTMP/firmware.cpio.gz >> initrd.gz

Preconfigurazione di Lenny

Si ricorda che è necessario abilitare il repository non-free e installare il pacchetto del firmware adatto per garantire che l'initrd del sistema sia configurato correttamente e riceva gli aggiornamenti di sicurezza (se ce ne sono).

Ciò si ottiene preconfigurando i seguenti:

  • base-config     apt-setup/non-free      boolean true
    d-i     preseed/late_command            string apt-install atmel-firmware; apt-install firmware-bnx2; apt-install firmware-iwlwifi; apt-install firmware-qlogic; apt-install firmware-ralink; apt-install ixp4xx-microcode; apt-install libertas-firmware

Si veda anche


CategoryNetwork