:B~ Nozioni di base

1~the-basics Nozioni di base

Questo capitolo contiene una breve panoramica del processo di generazione e
le istruzioni per utilizzare i tre tipi di immagine più comunemente
utilizzati. La tipologia di immagine più versatile, #{iso-hybrid}#, può
essere usata su una macchina virtuale, supporto ottico o dispositivo di
archiviazione portatile USB. In alcuni casi particolari, come spiegato più
avanti, la #{hdd}# potrebbe essere più adatta. Il capitolo termina con le
istruzioni per costruire e usare un'immagine di tipo #{netboot}#, che è un
poco più complessa a causa del setup richiesto sul server. Si tratta di un
argomento leggermente avanzato per chi non ha familiarità con l'avvio da
rete, ma è incluso qui perché, una volta che il setup è stato fatto, è un
modo molto comodo per collaudare e distribuire immagini facendo il boot
nella rete locale senza la seccatura di doversi occupare dei mezzi di
divulgazione dell'immagine.

In tutto il capitolo faremo spesso riferimento ai nomi dei file predefiniti
creati da live-build. Se invece si {scarica un'immagine
precompilata}#downloading-prebuilt-images, i nomi possono variare.

2~what-is-live Cos'è un sistema live?

Per sistema live generalmente si intende un sistema operativo che può essere
avviato da un supporto rimovibile, come un CD-ROM o una chiavetta USB oppure
da una rete, pronto per l'uso senza alcuna installazione su hard disk con
una configurazione automatica fatta durante l'esecuzione (vedere
{Glossario}#terms).

Con Debian Live, si tratta di un sistema operativo Debian GNU/Linux,
generato per una delle architetture previste (attualmente amd64 e i386). È
costituito dalle seguenti parti:

_* *{Immagine del kernel Linux}*, comunemente chiamata #{vmlinuz*}#

_* *{Initial RAM disk image (initrd)}*: un disco RAM creato per il boot di
Linux, contenente i moduli potenzialmente necessari per montare l'immagine
di sistema e alcuni script per farlo.

_* *{Immagine di sistema}*: l'immagine del filesystem del sistema
operativo. Normalmente è usato un filesystem compresso SquashFS, per
minimizzare le dimensioni dell'immagine Debian Live. Si noti che è in sola
lettura. Dunque, durante il boot il sistema Debian Live userà un disco RAM e
il meccanismo 'unione' per attivare i file in scrittura all'interno del
sistema in esecuzione. Ad ogni modo, tutte le modifiche verranno perse con
lo spegnimento a meno che non si usi la persistenza opzionale (si veda
{Persistenza}#persistence).

_* *{Bootloader}*: una piccola porzione di codice predisposto per l'avvio
dal supporto scelto, che presenta un prompt o un menu per la selezione di
opzioni/configurazioni. Carica il kernel Linux ed il suo initrd da eseguire
con un filesystem associato. Possono essere usate diverse soluzioni, in base
al supporto di destinazione ed al formato del filesystem contenenti le
componenti precedentemente citate: isolinux per il boot da CD o DVD nel
formato ISO9660, syslinux per supporti HDD o USB che si avviano da una
partizione VFAT, extlinux per le partizioni ext/2/3/4 e btrfs, pxelinux per
il netboot PXE, GRUB per partizioni ext2/3/4, ecc.

È possibile usare live-build per creare l'immagine di sistema secondo le
proprie specifiche, scegliere un kernel Linux, il suo initrd ed un
bootloader per avviarli, tutto in un unico formato che dipende dal mezzo
(immagini ISO9660, immagine disco, ecc.)

2~downloading-prebuilt-images Scaricare immagini precompilate

Nonostante l'obiettivo di questo manuale è di sviluppare e creare le proprie
immagini live si potrebbe semplicemente voler provare una di quelle
precompilate, sia come introduzione al loro uso o per costruirne una
propria. Queste immagini sono create utilizzando il nostro {repository git
live-imagesy}#clone-configuration-via-git e i rilasci ufficiali di stable
pubblicati all'indirizzo http://www.debian.org/CD/live/. In aggiunta,
all'indirizzo http://live.debian.net/cdimage/release/ sono disponibili le
versioni vecchie e future e le immagini non ufficiali contenenti firmware e
driver non-free.

2~using-web-builder Utilizzare il web builder per le immagini live

Come servizio alla comunità, all'indirizzo http://live-build.debian.net/
abbiamo un servizio web per la creazione di immagini live, il sito è
mantenuto col massimo sforzo possibile. Sebbene ci impegnamo nel tenerlo
aggiornato e funzionante e notifichiamo eventuali interruzioni, non possiamo
garantire al 100% la sua disponibilità o una compilazione veloce
dell'immagine; occasionalmente il servizio potrebbe avere problemi che
richiedono tempo per essere risolti. Se si hanno problemi o domande in
proposito {contattarci}#contact fornendo il link della propria compilazione.

3~ Utilizzo del web builder e raccomandazioni

Attualmente l'interfaccia web non previene l'uso di combinazioni non valide
di opzioni, in particolare dove la modifica di un'opzione (ovvero usando
live-build direttamente) cambia i valori predefiniti di altre opzioni
elencate nel form web, il web builder non modifica questi default. Se si
cambia #{--architectures}# da #{i386}# a #{amd64}# è necessario modificare
l'opzione #{--linux-flavours}# corrispondente da #{486}# a #{amd64}#. Per
ulteriori dettagli sulla versione installata sul web builder consultare la
pagina di manuale di #{lb_config}#; il numero della versione è scritto al
fondo della pagina.

Le tempistiche fornite dal web builder sono solo una stima approssimata e
possono non riflettere quanto realmente ci vorrà per compilare, né vengono
aggiornate una volta apparse. Vi preghiamo di essere pazienti e di non
aggiornare la pagina dopo aver commissionato la compilazione in quanto
invierà la richiesta per una nuova operazione con gli stessi parametri. Se,
dopo aver aspettato a sufficienza e verificato che l'email non sia finita
nello spam, non ricevete alcuna notifica allora {contattateci}#contact.

Il web builder ha un limite di tipologie di immagini creabili, mantenendosi
semplice e efficiente da utilizzare e manutenere. Le personalizzazioni non
sono fornite dall'interfaccia web, il resto di questo manuale sipega come
creare le proprie immagini tramite live-build.

2~building-iso-hybrid Primi passi: creare un'immagine ISO ibrida

Indipendentemente dal tipo di immagine, per crearne una è necessario
eseguire ogni volta la stessa procedura. Come primo esempio si creerà una
directory di lavoro, vi si entrerà e si eseguirà la seguente sequenza di
comandi di live-build per creare un'immagine ISO ibrida di base contenente
un sistema live predefinito senza X.org. È adatta per essere masterizzata su
CD o DVD e anche per essere copiata su una penna USB.

Il nome della directory di lavoro è arbitrario ma guardando gli esempi usati
da live-manual è una buona idea utilizzare un nome che aiuta a identificare
in qualsiasi directory l'immagine su cui si sta lavorando, in particolar
modo se si stanno sperimentando tipi di di immagine differenti. In questo
caso stiamo creando un sistema predefinito quindi chiamiamolo ad esempio
live-default.

code{

 $ mkdir live-default && cd live-default

}code

Dopodiché eseguire il comando #{lb config}#, il quale creerà una gerarchia
"config/" nella directory corrente e che verrà utilizzata da altri comandi:

code{

 $ lb config

}code

Non viene passato alcun parametro a #{lb config}#, in modo da utilizzare le
impostazioni predefinite per le varie opzioni, vedere {Il comando lb
config}#lb-config) per maggiori dettagli.

Ora che si ha una gerarchia "config/" si può generare l'immagine con il
comando #{lb build}#:

code{

 # lb build

}code

Questo processo può richiedere tempo, a seconda della velocità del vostro
computer e della connessione di rete. Una volta completato, nell'attuale
directory ci sarà un file immagine #{binary.hybrid.iso}# pronto da usare.

2~using-iso-hybrid Utilizzare un'immagine ISO live ibrida

Dopo aver costruito o scaricato un'immagine ISO ibrida, ottenibile
all'indirizzo http://www.debian.org/CD/live/, il passo successivo è
preparare il supporto per l'avvio, che sia esso un CD-R(W), un DVD-R(W) o
una penna USB.

3~burning-iso-image Masterizzare un'immagine ISO su un supporto fisico

Masterizzare un'immagine ISO è semplice, basta installare /{xorriso}/ e
utilizzarlo da riga di comando; ad esempio:

code{

 # apt-get install xorriso

 $ xorriso -as cdrecord -v dev=/dev/sr0 blank=as_needed binary.hybrid.iso

}code

3~copying-iso-hybrid-to-usb Copiare un'immagine ISO ibrida su una penna USB

Le immagini ISO preparate con #{xorriso}# possono essere semplicemente
copiate su una penna USB con il programma #{dd}# o suo equivalente. Inserire
una penna USB con una dimensione sufficiente a contenere l'immagine e
determinare quale device sia, al quale in seguito si farà riferimento come
#{${USBSTICK}}#.Questo è il device della penna, ad esempio #{/dev/sdb}#, non
una partizione come #{/dev/sdb1}#! È possibile trovare il nome corretto
controllando l'output di #{dmesg}# una volta inserita, o meglio ancora con
il comando #{ls -l /dev/disk/by-id}#.

Una volta che si è certi sul nome del device, usare il comando #{dd}# per
copiare l'immagine sulla penna. *{Questo sovrascriverà qualsiasi dato
presente su di essa!}*

code{

 $ dd if=binary.hybrid.iso of=${USBSTICK}

}code

3~using-usb-extra-space Usare lo spazio rimanente su una penna USB

Per utilizzare lo spazio libero che rimane dopo aver copiato il file
#{binary.hybrid.iso}# su una penna USB, usare uno strumento di
partizionamento come /{gparted}/ o /{parted}/ per creare una nuova
partizione. La prima partizione verrà utilizzata dal sistema Debian Live.

code{

 # gparted ${USBSTICK}

}code

Dopo aver creato la partizione, dove #{${PARTITION}}# è il nome della
partizione, ad esempio #{/dev/sdb2}#, si deve creare su di essa un
filesystem. Una scelta possibile potrebbe essere ext4.

code{

 # mkfs.ext4 ${PARTITION}

}code

*{Nota:}* se si desidera utilizzare lo spazio extra con Windows pare che questo sistema operativo non possa accedere a nessuna partizione eccetto la prima. Alcune soluzioni a questo problema sono state discusse sulla nostra {mailing list}#contact, ma non sembrano esserci risposte semplici.

*{Ricorda: ogni volta che si installa un nuovo file binary.hybrid.iso sulla penna, tutti i dati sulla chiavetta saranno persi perché la tabella delle partizioni viene sovrascritta con i contenuti dell'immagine, per cui salvare prima la propria partizione extra in modo da ripristinarla dopo l'aggiornamento dell'immagine live.}*

3~booting-live-media Avviare il supporto live

La prima volta che si avvia il supporto live, CD, DVD, penna USB o PXE, può
essere necessario impostare il BIOS del computer, ma giacché questi variano
parecchio in opzioni e scorciatoie, non siamo in grado di
descriverli. Alcuni BIOS offrono un menu per selezionare il device in fase
di boot, in caso sia disponibile nel vostro sistema è il modo più
semplice. Altrimenti è necessario accedere alla sua configurazione e
modificare l'ordine di avvio per posizionare la periferica di boot del
sistema live prima di quella usuale.

Avviando il supporto si otterrà un menu, premendo il tasto enter il sistema
partirà utilizzando la voce #{Live}# e le opzioni predefinite. Per ulteriori
informazioni sulle opzioni di boot, si veda la voce "help" nel menu e le
pagine di manuale di live-boot e live-config all'interno del sistema.

Supponendo di aver selezionato #{Live}# e avviato l'immagine desktop
predefinita, dopo i messaggi di avvio si dovrebbe automaticamente accedere
all'account #{user}# e avere il desktop pronto all'uso. Se invece si è
avviata un'immagine per la sola console, come le {immagini
precompilate}#downloading-prebuilt-images #{standard}# o #{rescue}#, si
accederà alla console dell'account #{user}# ed avere un prompt di shell
pronto da usare.

2~using-virtual-machine Utilizzare una macchina virtuale per le prove

Per lo sviluppo delle immagini live, può essere un notevole risparmio di
tempo eseguirle in una macchina virtuale (VM). Non senza qualche
raccomandazione:

_* Eseguire una VM richiede un quantitativo sufficiente di RAM sia per il
sistema ospitato che per quello ospitante; è consigliato un processore che
gestisca la virtualizzazione a livello hardware.

_* Ci sono alcune limitazioni inerenti, quali uno scarso rendimento video e
una scelta limitata di hardware emulato.

_* Quando si sviluppa per un hardware specifico non vi è alcun sostituto
migliore del proprio hardware.

_* Occasionalmente possono esserci dei bug relativi al solo utilizzo di una
VM. Nel dubbio si provi l'immagine direttamente sul proprio hardware.

A condizione che si possa lavorare entro questi vincoli, cercare il software
disponibile per la virtualizzazione e scegliere quello adatto alle proprie
necessità.

3~testing-iso-with-qemu Provare un'immagine ISO con QEMU

Il programma più versatile in Debian è QEMU. Se il processore gestisce la
virtualizzazione hardware utilizzare il pacchetto /{qemu-kvm}/; la
descrizione elenca brevemente i requisiti.

Per prima cosa installare /{qemu-kvm}/ o altrimenti /{qemu}/, nel qual caso
il nome del programma nei successivi sarà #{qemu}# invece di #{kvm}#. Il
pacchetto /{qemu-utils}/ è inoltre utile per creare immagini di dischi
virtuali con #{qemu-img}#.

code{

 # apt-get install qemu-kvm qemu-utils

}code

Avviare un'immagine ISO è semplice:

code{

 $ kvm -cdrom binary.hybrid.iso

}code

Per maggiori dettagli si vedano le pagine di manuale.

3~testing-iso-with-virtualbox Provare un'immagine ISO con virtualbox

Per provare la ISO con /{virtualbox}/:

code{

 # apt-get install virtualbox virtualbox-qt virtualbox-dkms

 $ virtualbox

}code

Creare una nuova macchina virtuale, modificare le impostazione di
archiviazione in modo da usare #{binary.hybrid.iso}# come dispositivo
CD/DVD, e avviare la macchina.

*{Nota:}* per sistemi live contenenti X.org che si vogliono provare con /{virtualbox}/, si può voler includere il pacchetto dei driver per X.org di VirtualBox, /{virtualbox-guest-dkms}/ e /{virtualbox-guest-x11}/, nella configurazione di live-build. In caso contrario la risoluzione è limitata a 800x600.

code{

 $ echo "virtualbox-guest-dkms virtualbox-guest-x11" >> config/package-lists/my.list.chroot

}code

Per far funzionare il pacchetto dkms vanno anche installati gli header per
il kernel utilizzato nell'immagine. Anziché indicare manualmente il
pacchetto /{linux-headers}/ adeguato nell'elenco dei pacchetti creato prima,
la selezione può essere fatta automaticamente da live-build.

code{

  $ lb config --linux-packages "linux-image linux-header"

}code

2~using-hdd-image Creare e utilizzare un'immagine HDD

La creazione di un'immagine HDD è simile alla ISO ibrida sotto tutti gli
aspetti ad eccezione della necessità di specificare l'opzione #{-b hdd}# e
che il nome del file risultante è #{binary.img}# e non può essere
masterizzato. È adatta per avviarsi da chiavette USB, dischi rigidi USB, e
da svariati altri dispositivi di archiviazione portatili. In genere per
questo scopo può essere usata un'immagine ISO ibrida, ma se si ha un BIOS
che non supporta le immagini ibride allora occorre un'immagine HDD.

*{Nota:}* se si è creata un'immagine ISO ibrida con gli esempi precedenti, occorre pulire la directory di lavoro con il comando #{lb clean}# (vedere {Il comando lb clean}#lb-clean):

code{

 # lb clean --binary

}code

Eseguire il comando #{lb config}# come prima, questa volta specificando però
il tipo di immagine HDD:

code{

 $ lb config -b hdd

}code

Creare ora l'immagine con il comando #{lb build}#:

code{

 # lb build

}code

Quando la costruzione è terminata dovrebbe essere presente un file
#{binary.img}# nella directory corrente.

L'immagine binaria generata contiene una partizione VFAT e il bootloader
syslinux, pronti per essere scritti direttamente su un dispositivo
USB. Ricordarsi che utilizzare un'immagine HDD è come utilizzare un'immagine
ISO ibrida via USB, seguire le istruzioni contenute in {Utilizzare
un'immagine live ISO ibrida}#using-iso-hybrid tenendo però conto che il nome
del file sarà #{binary.img}# invece di #{binary.hybrid.iso}#.

Allo stesso modo, per provare un'immagine HDD con Qemu, installare /{qemu}/
come descritto in {Provare un'immagine ISO con QEMU}#testing-iso-with-qemu;
quindi eseguire #{kvm}# o #{qemu}#, a seconda di quale versione è necessaria
al sistema ospitante, specificando #{binary.img}# come disco rigido
principale.

code{

 $ kvm -hda binary.img

}code

2~building-netboot-image Creare un'immagine netboot

La seguente sequenza di comandi creerà un'immagine netboot di base
contenente un sistema live predefinito senza X.org. È adatta per il boot
tramite rete.

*{Nota:}* se qualcuno tra gli esempi precedenti è stato seguito, bisogna pulire la directory di lavoro con il comando #{lb clean}#:

code{

 # lb clean

}code

In questo caso specifico il comando #{lb clean --binary}# non è sufficiente
per pulire le fasi necessarie. La causa è che nelle configurazioni per
l'avvio da rete è necessario usare una configurazione dell'initramfs
differente che viene applicata automaticamente da live-build durante la
creazione di immagini netboot. Dal momento che la creazione dell'initramfs
appartiene alla fase del chroot, passare a netboot in una directory di
lavoro esistente significa ricompilare anche la fase del chroot. Perciò va
usato #{lb clean}# (che rimuoverà anche la fase del chroot).

Per configurare l'immagine per l'avvio da rete, eseguire il comando #{lb
config}# come segue:

code{

 $ lb config -b netboot --net-root-path "/srv/debian-live" --net-root-server "192.168.0.1"

}code

Diversamente dalle immagini ISO e HDD, il boot via rete non fornisce
un'immagine del filesytem al client, perciò i file devono essere forniti via
NFS. Con lb config si possono scegliere filesystem di rete diefferenti. Le
opzioni #{--net-root-path}# e #{--net-root-server}# specificano,
rispettivamente, il percorso e il server del server NFS dove l'immagine del
filesystem sarà situata all'avvio. Accertarsi che questi siano impostati su
valori adeguati alla propria rete.

Creare ora l'immagine con il comando #{lb build}#:

code{

 # lb build

}code

In un avvio tramite rete, il client esegue una piccola parte di software che
normalmente risiede sulla EPROM della scheda Ethernet. Questo programma
invia una richiesta DHCP per ottenere un indirizzo IP e le informazioni su
cosa fare in seguito. In genere il passo successivo è ottenere un bootloader
di di livello superiore attraverso il protocollo TFTP. Questi potrebbe
essere pxelinux, GRUB, o anche avviare direttamente un sistema operativo
come Linux.

Per esempio, estraendo l'archivio generato #{binary.netboot.tar}# nella
directory #{/srv/debian-live}#, si troverà l'immagine del filesystem in
#{live/filesystem.squashfs}# mentre il kernel, initrd ed il bootloader
pxelinux in #{tftpboot/debian-live/i386}#.

Per abilitare l'avvio tramite rete vanno ora configurati tre servizi:i
server DHCP, TFTP e NFS.

3~ Server DHCP

Si deve configurare il server DHCP della rete per essere sicuri di fornire
un indirizzo IP al sistema client che si avvia tramite rete, e notificare la
posizione del bootloader PXE.

Ecco un esempio, scritto per un server DHCP ISC #{isc-dhcp-server}# nel file
di configurazione #{/etc/dhcp/dhcpd.conf}#:

code{

 # /etc/dhcp/dhcpd.conf - configuration file for isc-dhcp-server

 ddns-update-style none;

 option domain-name "example.org";
 option domain-name-servers ns1.example.org, ns2.example.org;

 default-lease-time 600;
 max-lease-time 7200;

 log-facility local7;

 subnet 192.168.0.0 netmask 255.255.255.0 {
   range 192.168.0.1 192.168.0.254;
   next-server servername;
   filename "pxelinux.0";
}

}code

3~ Server TFTP

Fornisce al sistema il kernel e il ramdisk iniziale in fase di esecuzione.

Si installi il pacchetto /{tftpd-hpa}/, che mette a disposizione tutti i
file contenuti in una directory root, di solito #{/srv/tftp}#. Affinché si
possa disporre dei file contenuti in #{/srv/debian-live/tftpboot}#, eseguire
il seguente comando come utente root:

code{

 # dpkg-reconfigure -plow tftpd-hpa

}code

e inserire la nuova directory del server tftp quando richiesto.

3~ Server NFS

Una volta che il computer ospite ha scaricato e avviato un kernel Linux e
caricato il suo initrd, cercherà di montare l'immagine del filesystem Live
tramite un server NFS.

Bisogna installare il pacchetto /{nfs-kernel-server}/.

Quindi, rendere disponibile l'immagine del filesystem via NFS aggiungendo
una riga come la seguente in #{/etc/exports}#:

code{

 /srv/debian-live *(ro,async,no_root_squash,no_subtree_check)

}code

e comunicare il nuovo export al server NFS con il seguente comando:

code{

 # exportfs -rv

}code

Configurare questi tre servizi può essere un po' problematico, serve un
attimo di pazienza per farli funzionare assieme. Per ulteriori informazioni
vedere il wiki syslinux http://www.syslinux.org/wiki/index.php/PXELINUX o il
manuale del Debian Installer alla sezione per l'avvio TFTP da rete
http://d-i.alioth.debian.org/manual/en.i386/ch04s05.html. Ciò può essere
d'aiuto, considerato che il procedimento è molto simile.

3~ Come provare una netboot

La creazione di immagini netboot è resa semplice da live-build, ma provare
le immagini su una macchina reale può essere davvero dispendioso in termini
di tempo.

Per semplificarsi il vita si può usare la virtualizzazione.

3~ Qemu

_* Installare /{qemu}/, /{bridge-utils}/, /{sudo}/.

Modificare #{/etc/qemu-ifup}#:

code{

 #!/bin/sh
 sudo -p "Password for $0:" /sbin/ifconfig $1 172.20.0.1
 echo "Executing /etc/qemu-ifup"
 echo "Bringing up $1 for bridged mode..."
 sudo /sbin/ifconfig $1 0.0.0.0 promisc up
 echo "Adding $1 to br0..."
 sudo /usr/sbin/brctl addif br0 $1
 sleep 2

}code

Procurarsi o compilare #{grub-floppy-netboot}#.

Lanciare #{qemu}# con "#{-net nic,vlan=0 -net tap,vlan=0,ifname=tun0}#"
