Appunti su Gentoo Linux

Installazione di base

Tratterò ora l'installazione della distribuzione Gentoo Linux sul mio PC Desktop. Per installazione base si intende una installazione minimale senza applicazioni e senza interfaccia grafica; questi programmi saranno installati in un secondo momento.

Prima di tutto dobbiamo controllare di avere tutto a disposizione e aver deciso gli aspetti fondamentali della nostra installazione. Tratterò solo il caso più semplice: PC con architettura x86_64 (anche detto amd64), scheda grafica nVidia e connessione flat ad internet tramite router (sarebbe il mio EeeBoxPC che ha sostituito il mio glorioso Pentium III). Si richiede inoltre una conoscenza basilare dell'hardware e del funzionamento di un PC, delle reti di computer e di internet, un po' di pazienza ed infine un po' di coraggio. Non tratterò una installazione dual boot Windows/Linux bensì faremo in modo che il nostro PC abbia un solo sistema operativo: Gentoo Linux.

Innanzitutto dobbiamo avere a disposizione il CD per l'installazione di Gentoo. Andate sul sito www.gentoo.org, scaricate la ISO più recente del Minimal CD/Install CD (MICD) e masterizzatela. Vi consiglio di masterizzarla su CD-RW in modo da poterlo tenere aggiornato ogni volta che esce una nuova versione del CD di installazione. Scegliete ovviamente quella per amd64.

Andate ora su www.sysresccd.org, scaricate l'ultima versione stabile di SystemRescueCd (SRCD) e masterizzatela anch'essa su un CD-RW per le stesse ragioni di prima. Questo CD è un CD di ripristino basato sul kernel e le applicazioni di Linux. Ci servirà per partizionare il disco in maniera semplice, intuitiva e sicura. In realtà avremmo potuto scaricare una sola ISO, il Live DVD di Gentoo, ma sarebbe stato lungo (circa 3600 MB contro i circa 550 MB (170 + 380) delle due ISO precedenti) e inoltre, secondo me, è meglio avere un CD di ripristino specifico piuttosto che un corposo Live DVD.

Manca poco per cominciare l'installazione. Dobbiamo solamente decidere come partizionare il nostro hard-disk. Per farlo dobbiamo conoscere un minimo l'albero delle directory nei sistemi Linux. Qui vorrei aggiungere una piccola riflessione... L'albero delle directory di Linux è indubbiamente abbastanza complesso rispetto a quello che siamo abituati a vedere, per esempio, su Windows. I vantaggi di questa organizzazione erano molti 30 anni fa ma oramai possono essere ottenuti senza una organizzazione così complessa. Una distribuzione Linux, GoboLinux, sta cercando di cambiare la situazione e rendere il Sistema GNU/Linux meglio organizzato, più moderno, più semplice e intuitivo. Sarebbe interessante se Gentoo adottasse questa filosofia, ovviamente in maniera graduale, ma credo che dovranno passare molti anni...

Decidiamo quindi lo schema delle partizioni che andremo ad utilizzare. Io tendo ad usare questo schema anche se un po' complesso:

/dev/sda1   /boot       16.0 MB
/dev/sda2   swap       512.0 MB
/dev/sda3   /           16.0 GB
/dev/sda4   (extended partition, contenitore di partizioni logiche)
  /dev/sda5 /home       12.0 GB
  /dev/sda6 /mnt/data   resto

Stampate questa pagina e le successive in modo da poterle consultare anche a PC spento o sotto installazione. È sufficiente stampare fino al punto in cui si spiega come configurare la rete perché dopo sarà possibile navigare di nuovo su internet e raggiungere quindi questo sito.
Una lettura da affrontare parallelamente è il classico Gentoo Handbook.

Si comincia! Per prima cosa partizioniamo l'hard-disk con lo schema sopra riportato usando Gparted.
Abilitate il boot da CD/DVD del PC (solitamente accedendo alla pagina di configurazione del BIOS).
Al prompt di SRCD premere invio. Quando il terminale sarà pronto ad accettare comandi vedrete anche una serie di informazioni basilari. Eseguite il comando wizard che farà partire l'interfaccia grafica. Dopodiché fate partire dall'ambiente grafico il programma gparted. Se state reinstallando spesso capita che la tabella delle partizioni faccia delle cose strane, una di queste è l'inversione dell'ordine delle partizioni. Basta eseguire fdisk, comandi avanzati con x, riordinare le partizioni con f ed infine scrivere il risultato con w.
Se non avete ancora configurato il vostro router per l'accesso ad internet potete farlo ora con il SRCD. Non è scopo di questa guida trattare questo argomento comunque sostanzialmente basta avere un NIC funzionante, settate l'IP statico con i DNS o il DHCP, poi usate Firefox ... interfaccia web del dispositivo... provare a navigare...

Introduzione al sistema Linux, agli utenti, all'utente root ecc... da mettere all'inizio...

Comincia l'installazione di Gentoo!

Chiudere gparted, uscire da X, riavviare il PC inserendo MICD. Al prompt scegliere gentoo (se si aspetta parte comunque da solo). Seguite le istruzioni a video finché non avrete il prompt.

Prima di continuare, siccome l'installazione può durare anche un giorno intero, è bene sapere come interromperla a metà strada e poi riprenderla. Finché il sistema non è avviabile, cioè non si è installato il kernel e un boot loader, si dovrà seguire la seguente procedura per interrompere la procedura di installazione

  1. uscire dal chroot con exit
  2. cd
  3. umount -l /mnt/gentoo/dev
  4. umount -l /mnt/gentoo/proc
  5. umount -l /mnt/gentoo/boot
  6. umount -l /mnt/gentoo
  7. halt o reboot

E si dovrà seguire quest'altra procedura per riprendere un'installazione interrotta

  1. Avviare il PC con il MICD
  2. Riconfigurare la rete se non funziona
  3. Montare swap, /, /boot
  4. Impostare date e ora
  5. Montare proc e dev
  6. chrooting nel nuovo ambiente

Il primo passo è avere la rete funzionante. Avendo un router con DHCP dovrebbe già funzionare tutto. Provate con il comando

ping www.google.com

Se non va usate net-setup eth0 e seguite le istruzioni a schermo. E se ancora non va controllate se eth0 c'è (ifconfig). Se non c'è significa che il kernel non ha riconosciuto la vostra scheda di rete. Controllate con lspci il proprio NIC e vedere i moduli disponibili. Eventualmente caricarli con modprobe.

Ora non resta che attivare lo swap e montare le partizioni:

swapon /dev/sda2
mount /dev/sda3 /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/sda1 /mnt/gentoo/boot

Per non avere problemi di download con i server di Gentoo controlliamo la data e l'ora:

date
date MMDDhhmmYYYY

Ora bisogna iniziare l'installazione vera e propria scaricando uno "stage3". Andare in /mnt/gentoo e scaricare stage3 con il browser links e scompattarlo

links http://www.gentoo.org/main/en/mirrors.xml

Scegliere un mirror e poi andare in andare in releases/amd64/autobuilds/ e scaricate la più recente (non hardened!). Si scarica premendo il tasto d (sono circa 150 MiB). Se la vostra connessione ha problemi consiglio di usare wget anziché links perché ha il resume del file! (aspettare il timout oppure ctrl-c e rilanciare con -c. Se la troppa velocità fa cadere la connessione allora usare --limit-rate=70k ovviamente mettendo un limite che ritenete opportuno, poco meno del massimo della vostra connessione di solito.)

Infine non resta che scompattare il file dello stage3

tar xvjpf stage3-*.tar.bz2

Ora si passa all'installazione di portage, il sistema di gestione dei pacchetti di Gentoo. Per installarlo bisogna procedere come per lo stage3. Bisogna scaricare un archivio dai mirror di Gentoo (anche in questo caso meglio wget se avete problemi di connessione). Rimanere sempre nella directory /mnt/gentoo!

links http://www.gentoo.org/main/en/mirrors.xml
andate su snapshots 
scaricate portage-latest.tar.bz2 (circa 40 MB) 

scompattatelo usando esattamente il comando
tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr

Ora potete cancellare i file scaricati

Ora bisogna specificare le "optimization flags" per il compilatore C/C++ (gcc). Aprite il file make.conf

nano -w /mnt/gentoo/etc/make.conf

e inserite le seguenti righe

CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=native -O2 -pipe"
CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j3"

Ora scegliete un buon mirror tramite l'utility mirrorselect

mirrorselect -i -o >> /mnt/gentoo/etc/make.conf
mirrorselect -i -r -o >> /mnt/gentoo/etc/make.conf

copiare i dns

cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

Montare proc e dev

mount -t proc none /mnt/gentoo/proc
mount --rbind /dev /mnt/gentoo/dev

Ora possiamo finalmente spostarci nel nuovo sistema tramite il processo chiamato chrooting

chroot /mnt/gentoo /bin/bash
env-update
source /etc/profile
export PS1="(chroot) $PS1"

Aggiornare portage.

emerge --sync

Se compare un messaggio che dice che c'è una versione aggiornata di portage, aggiornarlo con il comando emerge --oneshot portage (senza mettere DEEP!)

Scegliere il profilo

eselect profile list
eselect profile set <numero>

Configurare le variabili USE. Quelle di default sono tutte quelle del profilo scelto (file make.defaults) più quelle delle directory padre. Le use flag in più o in meno vengono registrate in make.conf a mano o con tool appositi. Non perdeteci troppo tempo. Di solito le use flag è bene impostarle man mano che si installano i vari software. Si vedono le use flag disponibili, si cerca di capire cosa fanno e si abilitano quelle necessarie o disabilitano quelle ritenute inutili. A questo punto forse conviene abilitare solo le use flag del proprio microprocessore: mmx, sse, sse2, sse3, ssse3 per la intel e mmxext, mmx2, 3dnow, 3dnowext per gli AMD. Per vedere quali sono supportate dalla vostra CPU guardate su Wikipedia e nel file /proc/cpuinfo.

Settare la localizzazione en_US.UTF-8 UTF-8 e it_IT.UTF-8 UTF-8 in /etc/locale.gen e, dopo aver salvato, eseguire locale-gen. Creare anche il file /etc/env.d/02locale e metterci

LANG="en_US.UTF-8"
LC_CTYPE="it_IT.UTF-8"
LC_NUMERIC="it_IT.UTF-8"
LC_TIME="it_IT.UTF-8"
LC_COLLATE="it_IT.UTF-8"
LC_MONETARY="it_IT.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="it_IT.UTF-8"
LC_NAME="it_IT.UTF-8"
LC_ADDRESS="it_IT.UTF-8"
LC_TELEPHONE="it_IT.UTF-8"
LC_MEASUREMENT="it_IT.UTF-8"
LC_IDENTIFICATION="it_IT.UTF-8"

Infine

env-update
source /etc/profile

Questo è quanto serve per avere un ambiente pienamente UTF-8 con lingua impostata su inglese ma con tutto il resto impostato su italiano (formato della carta, unità di misura, ecc...).

Purtroppo però se eseguite il comando locale first_weekday otterrete 1, cioè domenica. Impostazione tipica inglese. Questo è un bug che non è mai stato corretto e sembra che nessuno sia intenzionato a farlo. Dovete fare la correzione a mano. Aprite il file /usr/share/i18n/locales/it_IT e nella sezione LC_TIME, alla fine, prima della riga END LC_TIME inserite

...
first_weekday 2
END LC_TIME

Ora, come al solito date locale-gen e poi env-update e infine source /etc/profile.

A questo punto è possibile, ma non obbligatorio, ricompilare la toolchain! Cioè si può ricompilare le librerie e il compilatore C usando le opzioni specificate finora in modo da sostituire quelli non ottimizzati per la propria macchina forniti nello stage3.

cd /usr/portage/scripts
nano -w bootstrap.sh (fare le modifiche che si vogliono)
./bootstrap.sh

gcc-config x86_64-pc-linux-gnu-4.4.4 (cambiare la versione)
source /etc/profile
export PS1="(chroot) $PS1"
emerge -1v libtool
emerge -n gentoolkit
revdep-rebuild --library libstdc++.so.5

Impostare la timezone

ls /usr/share/zoneinfo
cp /usr/share/zoneinfo/Europe/Rome /etc/localtime

Ora manca solo l'installazione di un kernel e di un boot loader. Prima di compilare il kernel abbiamo bisogno degli strumenti necessari per conoscere a fondo il proprio sistema. Dopo averli installati prendete appunti sul vostro sistema.

emerge pciutils
lspci
lsmod per vedere i moduli caricati.

Scaricare i sorgenti del kernel

emerge gentoo-sources

Copiare, se lo avete, un vecchio .config nella cartella /usr/src/... (dove al posto dei puntini c'è la cartella dove risiedono i sorgenti del kernel appena installati) ed eseguite make oldconfig. Ora fate partire l'interfaccia per la scelta delle opzioni del kernel.

make menuconfig

Ora in base alle informazioni raccolte sul vostro sistema e alle vostre esigenze dovete scegliere le corrette opzioni per configurare il kernel prima di compilarlo. Prima o poi metterò un link al mio .config. Una volta finito chiudete menuconfig salvando le impostazioni.

Per compilare il kernel date i comandi

make && make modules_install (circa 30 min)
cp arch/x86_64/boot/bzImage /boot/kernel_2011-07-17

Nel frattempo su un'altra console potete già cominciare a impostare il file /etc/fstab

/dev/sda1   /boot        ext2    noauto,noatime       1 2
/dev/sda2   none         swap    sw                   0 0
/dev/sda3   /            ext3    noatime              0 1
/dev/sda5   /home        ext3    noatime              0 1
/dev/sda6   /mnt/data    ext3    noatime              0 1

/dev/cdrom  /mnt/cdrom   auto    noauto,user          0 0

shm         /dev/shm     tmpfs   nodev,nosuid,noexec  0 0

Dare un nome al proprio pc (HOSTNAME) nel file /etc/conf.d/hostname

hostname="PIPPO"

Configurare la rete. Prima create lo script di avvio per la scheda di rete

cd /etc/init.d
ln -s net.lo net.eth0
rc-update add net.eth0 default

Poi configuratelo aprendo il file /etc/conf.d/net (nano -w /etc/conf.d/net)

config_eth0=( "192.168.1.4/24" )
routes_eth0=( "default via 192.168.0.1" )

Aggiungere la rete all'avvio.

rc-update add net.eth0 default

Modificare il file /etc/hosts (nano -w /etc/hosts)

127.0.0.1   HOMY2.HOMYNET HOMY2 localhost
::1              localhost

192.168.1.3      HOMY.HOMYNET HOMY

Impostare la password dell'amministratore (root)

passwd

Aprire il file /etc/rc.conf (nano -w /etc/rc.conf) e controllare se c'è qualcosa che si vuole cambiare. Solitamente nulla.

Impostate il layout di tastiera da usare per la console (nano -w /etc/conf.d/keymaps). La lista di tastiere disponibili per la console si trava in /usr/share/keymaps.

keymap="it"
windowkeys="YES"
...

Ora impostate l'orologio seguendo la guida apposita che trovate qui sotto. In breve:

ALT-F2
cp /etc/conf.d/clock /mnt/gentoo/etc/conf.d/
exit
ALT-F1
nano -w /etc/conf.d/clock

CLOCK="UTC"
TIMEZONE="Europe/Rome"
CLOCK_SYSTOHC="yes"

date
date MMDDhhmmYYYY

hwclock --systohc --utc

Installare un logger di sistema. Il logger di sistema è un componente fondamentale di un sistema Linux. Tutti i messaggi inviati a /dev/log vengono letti da questo programma e opportunatamente scritti in uno o più file. Questa operazione chiaramente presenta un problema: le dimensioni dei file di log. Esistono programmi che si occupano di ripulire questi file e archiviarli e/o cancellarli con certi criteri (rotazione). Il logger standard di Linux è sysklogd che però non gestisce la "rotazione" dei file di log. Invece di installare altri programmi appositi per gestire la rotazione, come per esempio logrotate, è preferibile usare un altro logger di sistema. Il mio preferito è metalog. Il file di configurazione è /etc/metalog.conf ma le impostazioni di default sono già ottime.

emerge metalog
rc-update add metalog boot

Installare un boot loader. LILO Boot Loader.

In /etc/bash/bash_logout decommentare la riga con il comando clear

  1. uscire dal chroot con exit
  2. cd
  3. umount -l /mnt/gentoo/dev
  4. umount -l /mnt/gentoo/proc
  5. umount -l /mnt/gentoo/boot
  6. umount -l /mnt/gentoo
  7. halt o reboot
  8. al boot togliere il cd in modo che l'avvio avvenga da hd