Debian On Toshiba NB200-110

1. Configurazione principale

Tutorial ancora in costruzione...

Questo tutorial sarà raggiungibile (non ho ancora segnalato la pagina) anche dai due seguenti siti, ove sono presenti installazioni di Linux su vari notebooks:

a. Installazione di Debian testing [Wheeezy] su netbook Toshiba NB200-110

Per esigenze di lavoro, mi ritrovo ad acquistare questo un netbook nel Luglio 2009: ciò che cercavo era un PC di dimensione e peso ridotti che comunque avesse una buona potenza. La mia scelta è ricaduta sulla seconda generazione dei netbook di Toshiba. Pienamente soddisfatto dell'acquisto, questo NB200 si dimostra grintoso, dual-core e molto curato nei materiali. Sicuramente dopo un Acer (pessimo!) e un HP (rifiniture scadenti, ma più resistente) le caratteristiche dei materiali sono ottime.

b. Informazioni sull'hardware

stylee@trinityssd:~$ lspci
00:00.0 Host bridge: Intel Corporation Mobile 945GME Express Memory Controller Hub (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Mobile 945GME Express Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03)
00:1b.0 Audio device: Intel Corporation N10/ICH 7 Family High Definition Audio Controller (rev 02)
00:1c.0 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 1 (rev 02)
00:1c.1 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 2 (rev 02)
00:1c.2 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 3 (rev 02)
00:1c.3 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 4 (rev 02)
00:1d.0 USB Controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #3 (rev 02)
00:1d.3 USB Controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #4 (rev 02)
00:1d.7 USB Controller: Intel Corporation N10/ICH 7 Family USB2 EHCI Controller (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)
00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 02)
00:1f.2 SATA controller: Intel Corporation 82801GBM/GHM (ICH7 Family) SATA AHCI Controller (rev 02)
00:1f.3 SMBus: Intel Corporation N10/ICH 7 Family SMBus Controller (rev 02)
03:00.0 Network controller: Atheros Communications Inc. AR9285 Wireless Network Adapter (PCI-Express) (rev 01)
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 02)
stylee@trinityssd:~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 04f2:b128 Chicony Electronics Co., Ltd 
Bus 002 Device 002: ID 05fe:1011 Chic Technology Corp. 
Bus 005 Device 002: ID 0930:0508 Toshiba Corp. Integrated Bluetooth HCI
stylee@trinityssd:~$

Segue la tabella della compatibilità dell'hardware (di seguito lo schema del sommario generato da hardinfo):

Componente Descrizione Stato
CPU 2x Intel(R) Atom(TM) CPU N280 @ 1.66GHz OK - meglio ricompilare il kernel settando Processor type ad
Atom (se il kernel lo permette, opzione introdotta col kernel 2.6.38)
Memoria 1GB OK
Display 1024x600 pixels OK - Testato anche l'aggiunta di un monitor esterno (Asus VH242 1920x1080)
Grafica Intel(R) 945GME x86/MMX/SSE2 OK - Driver open Intel i915. Sono presenti delle opzioni che, a detta di Phoronix, migliorano sia le prestazioni che i consumi
Audio HDA-Intel / Intel Corporation N10/ICH 7 Family High Definition Audio Controller OK
Dispositivi di input AlpsPS/2 ALPS GlidePoint OK
Ethernet Controller Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller OK
Network Controller Atheros Communications Inc. AR9285 Wireless Network Adapter OK - Driver ath9k

c. Distribuzione Linux

- Partizionamento harddisk

Inizialmente era presente un hard-disk meccanico da 250Gb: 2 partizioni di cui una di recupero per il s.o. Windows. Lo schema di partizionamento è come sempre Windows/ntfs - dati/fat32 - Debian/ext4, ma alla fine, non molto felice delle prestazioni del netbook, ho acquistato un hard-disk di tipo SSD (Solid State Disk). Ora sono soddisfatto, ho un'unica partizione Debian/btrfs da 64Gb.

BTRFS
Questo è un filsystem ancora giovane e in sviluppo, infatti fino a poco fa non esisteva ancora un tool di tipo fsck.btrfs per il controllo del disco. Ho anche provato sulla mia pelle il rischio di perdita di tutti i dati così, dall'oggi al domani (ma alla fine me la sono cavate). Quindi se vi interessa l'affidabilità scegliete magari l'ottima ext4

- Scelta della distribuzione

La fissa continua per la Debian Testing. A Febbraio 2011 c'è stato anche il freeze di Squeeze (la fase di transizione che vede il passaggio dei pacchetti da testing alla nuova stabile e infine il rilascio ufficiale). Ora la nuova testing ha nome in codice Wheezy.

d. Kernel

- Scelta

Sono partito dal kernel 2.6.32 e attualmente utilizzo il 3.0.0. Mi rifornisco dei pacchetti del kernel linux-source-X.X.XX provenienti dalla unstable poichè mi piace utilizzare le nuove caratteristiche del kernel (e sfruttare il mio nuovo hardware). Non appena vi è un qualsiasi aggiornamento (sia di versione di pacchetto - tipo 2.6.32-X - che di versione di kernel - tipo 2.6.YY) scarico, ricompilo e installo. Vi posso assicurare che ricompilare un kernel generico i386 variando la configurazione standard anche e solo per il parametro tipologia di processore vi permette di ottenere in incremento di prestazioni a mio avviso anche del 20-30%!

- Ricompilazione

Riporto il ciclo di ricompilazione del kernel che intraprendo (uso come esempio il 3.0.3).

  1. controllo periodicamente sulla pagina dei pacchetti Debian packages.debian.org l'esistenza di una qualsiasi versione nuova rispetto alla mia installata. Prendiamo ad esempio il caso in cui io abbia installata la 3.0.0-1 e sia presente il pacchetto linux-source-3.0.0_3.0.0-3_all.deb. Allora scarico manualmente il nuovo pacchetto.
  2. installo tale pacchetto tramite
    $ sudo dpkg -i linux-source-3.0.0_3.0.0-3_all.deb
  3. ora procedo col processo vero e proprio di ricompilazione. Mi posiziono sulla directory /usr/src/ con utente nominale (stylee); dopodichè rimuovo il link linux che punta ai sorgenti correnti e ripulisco la directory dei sorgenti correnti. Infine estraggo dal file compresso i sorgenti:
    $ rm linux
    $ rm -fr linux-source-3.0.0/
    $ tar xjf linux-source-3.0.0.tar.bz2
  4. se si sta ricompilando da una nuova versione del pacchetto dei sorgenti (come in questo esempio da 3.0.0-1 a 3.0.0-3), supponendo di avere già una configurazione del kernel personalizzata per il nostro netebook si può procedere in questo modo:
    $ cp /boot/config-3.0.0-nb200 ./.config
    $ make oldconfig

    altrimenti, se si proviene da un cambio di versione di kernel (tipo da 2.6.28 a 2.6.29), bisogna digitare i seguenti:

    $ cp /boot/config-2.6.38-nb200 ./.config
    $ make menuconfig
    Prima ricompilazione
    Se si è alla prima ricompilazione del kernel, bisogna lanciare solo il comando make menuconfig e passare con buona pazienza tutte le opzioni del kernel, avendo cura di leggere le sezioni help in linea e i vari documenti sotto /usr/src/linux/Documentation/.
  5. abbiamo estratto i sorgenti del kernel; abbiamo sistemato la configurazione del kernel. Ora non ci rimane altro che avviare la compilazione vera e propria, ovviamente alla Debian-way. Utilizzando make-kpkg si va a ricompilare il kernel e creare un pacchetto Debian contenente il nostro kernel compilato comprensivo di tutti i moduli esterni:
    $ time nice make-kpkg --config oldconfig --append-to-version -nb200 --initrd --revision 20110904 --rootcmd fakeroot --jobs 2 linux-image linux-headers
    Spiegazione parametri
    --config oldconfig si può omettere se si è lanciato precedentemente il comando make oldconfig oppure se avete bisogno di modificare la configurazione del kernel con make menuconfig
    --append-to-version serve per contraddistinguere la nostra versione del kernel personalizzata. Spesso si usa la sigla del modello del notebook.
    --initrd serve per permettere il boot tramite ramdisk: il grub crea una partizione su RAM all'avvio che contiene solitamente i driver più comuni per poter caricare il kernel vero e proprio. Spesso se si ha hardware nuovo è bene metterlo, altrimenti il boot si blocca.
    --revision server per contraddistinguere la versione del pacchetto dell'immagine del kernel che si sta compilando. Se si è appena installato il nostro kernel ricompilato e ci si accorge per esempio che nella fase di configurazione si è dimenticato di includere un modulo vitale per il nostro sistema, ri-ricompilando il kernel si può variare solo la revisione. In tal modo si crea un nuovo pacchetto con l'immagine del kernel che, se installato, va a sostituire e non ad aggiungersi a quello installato. Comodo, no?
    --rootcmd opzione che indica un metodo per poter "fingere" di diventare root. Una volta, quando non esisteva questa opzione, si usava lanciare fakeroot make-kpkg ....
    --jobs 2 nell'era dei processori multi-core, indica il numero di processi paralleli di compilazione che si possono usare. Di solito si pone uguale al numero di core del processore presente nel sistema.
  6. finito il comando precedente ci si ritrova in /usr/src/ il pacchetto bell'e pronto linux-image-3.0.0-nb200_20110904_i386.deb. Ora, se si è ricompilato un kernel con stessa versione ma differente revisione, si deve per sicurezza lanciare anche la prima riga, altrimenti si lancia solo la seconda:
    $ sudo mv /lib/modules/3.0.0-nb200 /lib/modules/3.0.0-nb200
    $ sudo dpkg -i linux-image-3.0.0-nb200_20110904_i386.deb linux-headers-3.0.0-nb200_20110904_i386.deb

    Col primo comando rinominiamo la directory contenente tutti i moduli del kernel attuale, per evitare di sovrascriverli ed eventualmente poter ripristinare la situazione precedente se qualcosa dovesse andare storto. Inoltre, se si necessita la ricompilazione di moduli esterni all'alberatura del kernel (tipo il driver nvidia), siamo "costretti" a farlo visto che al riavvio nella nuova directory manca (spesso è difficile capire perché trova problemi in un modulo piuttosto di ottenere un messaggio tipo "il modulo nvidia manca"). Se tutto va a buon fine l'installazione del pacchetto dell'immagine del kernel va a piazzare tutto nel posto giusto e va ad aggiornare anche il boot loader (GRUB nel mio caso).

    Baco nell'update-initramfs
    A causa forse di un baco, forse di un'errata mia configurazione (anche se un mio collega di lavoro da me contagiato nell'installazione Debian ha il mio stesso problema), ad ogni modifica del boot loader mi ritrovo a dover forzare a mano la creazione/aggiornamento dell'immagine del ramdisk che GRUB utilizza al boot. Per evitare problemi lancio da root i comandi update-initramfs -c -k 2.6.32-dv5-1060el oppure update-initramfs -u -k 2.6.32-dv5-1060el rispettivamente se mantengo la stessa versione di kernel (varia solo la revisione) oppure se cambio versione di kernel (tipo da 2.6.31 a 2.6.32). Se non viene creato o aggiornato quest'immagine ramdisk si rischia di avere al boot un blocco del sistema.
  7. a questo punto bisogna effettuare il reboot. Date un bel
    $ reboot

    da riga di comando oppure da interfaccia grafica. Se avete bisogno di ricompilare ulteriori moduli esterni all'alberatura del kernel, meglio effettuare l'accesso dopo il reboot nella modalità single user anche conosciuta come recovery mode. Dopo il riavvio vi troverete ad inserire la password di root per accedere al sistema in modalità non grafica. Il sistema caricato è minimale in modo tale non ci sia bisogno di caricare l'eventuale modulo che dovete ancora sistemare. Nel mio caso per far fuzionare per esempio il modulo bluetooth ho bisogno di compilare il modulo omnibook.
    Anche qui la ricompilazione dei moduli esterni all'alberatura del kernel alla Debian-way è tutt'altro che complicata: utilizzando il comodo sistema Dynamic Kernel Module System (DKMS). Per utilizzarlo basta installare il pacchetto dkms ed avere una versione dei sorgenti del modulo compatibile con DKMS, per esempio il pacchetto omnibook-dkms, che non è altro che il pacchetto classico dei sorgenti omnibook-module-source con all'interno le direttive per la compilazione per DKMS.
    Tutto il processo si semplifica in pochi passi, addirittura anche più semplici dell'uso di module-assistant, con in pi` il vantaggio che ad ogni update dell'immagine del kernel il sistema DKMS ci compila automaticamente il modulo!
    Aggiungiamo ill modulo al sistema DKMS

    $ dkms add -m omnibook -v 2.20070211+git20110115.208d01c

    Compiliamo specificando la nostra versione del kernel

    $ dkms build -m omnibook -v 2.20070211+git20110115.208d01c -k 3.0.0-nb200

    Installiamo il modulo compilato nell'alberatura dei moduli (/lib/modules/...)

    $ dkms install -m omnibook -v 2.20070211+git20110115.208d01c -k 3.0.0-nb200

    Alla fine verifichiamo che tutto sia a posto con

    $ dkms status

- File di configurazione del kernel

Allego la mia attuale configurazione del kernel, relativo alle versioni che vanno fino alla 3.0.0. Altre configurazioni di kernel successivi saranno aggiunte in allegato a questo post.

AttachmentSize
config-2.6.32-nb200101.05 KB
config-2.6.37-nb200110.56 KB
config-2.6.38-nb200112.34 KB
config-2.6.39-nb200113.98 KB
config-3.0.0-nb200111.23 KB