Manuale di Debian Live

A proposito

1. A proposito di questo manuale

1.1 Per gli impazienti
1.2 Glossario
1.3 Autori
1.4 Contribuire a questo documento
1.4.1 Applicare le patch
1.4.2 Traduzione

2. A proposito del progetto Debian Live

2.1 Motivazioni
2.1.1 Cosa c'è di sbagliato con gli attuali sistemi live
2.1.2 Perché creare il proprio sistema live?
2.2 Filosofia
2.2.1 Solamente pacchetti ufficiali inalterati
2.2.2 Nessun pacchetto di configurazione per il sistema live
2.3 Contatti

Utente

3. Installazione

3.1 Requisiti
3.2 Installare live-build
3.2.1 Dal repository Debian
3.2.2 Da sorgenti
3.2.3 Da 'istantanee'
3.3 live-boot e live-config
3.3.1 Dal repository Debian
3.3.2 Da sorgenti
3.3.3 Da 'istantanee'

4. Nozioni di base

4.1 Che cos'è un sistema live?
4.2 Primi passi: creare un'immagine ISO
4.2.1 Provare un'immagine ISO con Qemu
4.2.2 Provare un'immagine ISO con virtualbox-ose
4.2.3 Masterizzare un'immagine ISO su un supporto fisico
4.3 Creare un'immagine USB/HDD
4.3.1 Copiare un'immagine USB/HDD su una penna USB
4.3.2 Provare un'immagine USB/HDD con Qemu
4.3.3 Usare lo spazio rimanente su una penna USB
4.4 Creare un'immagine netboot
4.4.1 Server DHCP
4.4.2 Server TFTP
4.4.3 Server NFS
4.4.4 Come provare una netboot
4.4.5 Qemu
4.4.6 VMWare Player

5. Panoramica degli strumenti

5.1 live-build
5.1.1 Il comando lb config
5.1.2 Il comando lb build
5.1.3 Il comando lb clean
5.2 Il pacchetto live-boot
5.3 Il pacchetto live-config

6. Gestire una configurazione

6.1 Utilizzare auto per gestire i cambiamenti di configurazione
6.2 Esempi di auto script

7. Panoramica sulla personalizzazione

7.1 Configurazione in fase di compilazione e di avvio
7.2 Fasi della creazione
7.3 Integrare la configurazione di lb con dei file
7.4 Personalizzazione dei compiti

8. Personalizzare l'installazione dei pacchetti

8.1 Sorgenti dei pacchetti
8.1.1 Distribuzione, le aree di archivio e le modalità
8.1.2 Mirror delle distribuzioni
8.1.3 Mirror delle distribuzioni usati in fase di compilazione
8.1.4 Mirror delle distribuzioni usate durante l'esecuzione
8.1.5 Repository addizionali
8.2 Scegliere i pacchetti da installare
8.2.1 Scegliere pochi pacchetti
8.2.2 Elenchi di pacchetti
8.2.3 Elenchi predefiniti di pacchetti
8.2.4 Elenchi locali dei pacchetti
8.2.5 Elenchi locali di pacchetti binari
8.2.6 Estendere un'elenco di pacchetti usando gli include
8.2.7 Usare condizioni all'interno degli elenchi di pacchetti
8.2.8 Task
8.2.9 Task per desktop e lingua
8.3 Installare pacchetti modificati o di terze parti
8.3.1 Utilizzare chroot_local-packages per installare pacchetti personalizzati
8.3.2 Utilizzare un repository APT per installare pacchetti personalizzati
8.3.3 Pacchetti personalizzati e APT
8.4 Configurare APT in fase di costruzione
8.4.1 Scegliere apt o aptitude
8.4.2 Utilizzare un proxy con APT
8.4.3 Modificare APT per risparmiare spazio
8.4.4 Passare opzioni ad apt o aptitude
8.4.5 APT pinning

9. Personalizzazione dei contenuti

9.1 Include
9.1.1 Live/chroot include locali
9.1.2 Include locali binari
9.1.3 Include binari
9.2 Hook
9.2.1 Live/chroot hook locali
9.2.2 Hook in fase di avvio
9.2.3 Hook binari locali
9.3 Preconfigurare le domande di Debconf

10. Personalizzare i comportamenti durante l'esecuzione

10.1 Personalizzare l'utente live
10.2 Personalizzare la localizzazione e la lingua
10.3 Persistenza
10.3.1 Persistenza completa
10.3.2 Mount automatico della home
10.3.3 Istantanee
10.3.4 Sottotesto persistente
10.3.5 Rimasterizzazione parziale

11. Personalizzare l'immagine binaria

11.1 Bootloader
11.2 Metadati ISO

12. Personalizzare il Debian Installer

12.1 Tipologie del Debian Installer
12.2 Personalizzare il Debian Installer con la preconfigurazione
12.3 Personalizzare il contenuto del Debian Installer

Progetto

13. Segnalare bug

13.1 Problemi noti
13.2 Ricostruire da zero
13.3 Usare pacchetti aggiornati
13.4 Raccogliere informazioni
13.5 Se possibile isolare il caso non andato a buon fine
13.6 Segnalare il bug del pacchetto giusto
13.6.1 Durante la compilazione mentre esegue il bootstrap
13.6.2 Durante la compilazione mentre installa i pacchetti
13.6.3 In fase di avvio
13.6.4 In fase di esecuzione
13.7 Fare la ricerca
13.8 Dove segnalare i bug

14. Lo stile nello scrivere codice

14.1 Compatibilità
14.2 Rientri
14.3 Ritorno a capo
14.4 Variabili
14.5 Varie

15. Procedure

15.1 Aggiornamenti degli udeb
15.2 Rilasci importanti
15.3 Rilasci minori
15.3.1 Modello per l'annuncio di un rilascio minore.

Esempi

16. Esempi

16.1 Usare gli esempi
16.2 Tutorial 1: un'immagine standard
16.3 Tutorial 2: servizio browser web
16.4 Tutorial 3: un'immagine personalizzata
16.4.1 Prima revisione
16.4.2 Seconda revisione
16.5 Un client Kiosk VNC
16.6 Un'immagine base per una chiavetta USB da 128M
16.7 Un desktop KDE localizzato e l'installer

Manuale di Debian Live

Utente

4. 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, la usb-hdd potrebbe essere più adatta per i dispositivi USB. Il capitolo termina con le istruzioni per costruire e usare un'immagine di tipo net, 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.

4.1 Che 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 auto-configurazione fatta durante l'esecuzione (vedere Glossario).

Con Debian Live, si tratta di un sistema operativo Debian GNU/Linux, generato per una delle architetture previste (attualmente amd64, i386, powerpc e sparc). È 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).
  • 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.)

    4.2 Primi passi: creare un'immagine ISO

    La seguente sequenza di comandi di live-build creerà un'immagine ISO ibrida di base contenente soltanto il sistema Debian standard senza X.org. È adatta per essere masterizzata su CD o DVD e anche per essere copiata su una penna USB (come per Copiare un'immagine USB/HDD su una penna USB, specificando l'estensione ".iso" dove è indicato ".img").

    In primo luogo eseguire il comando lb config, il quale creerà una gerarchia "config/" nella directory corrente e che verrà utilizzata da altri comandi:

       $ lb config

    Non passando alcun parametro a lb config, si indica che si intende utilizzare le impostazione predefinite (vedere Il comando lb config).

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

       # lb build

    Questo processo può richiedere tempo, a seconda della velocità della connessione di rete (vedere Il comando lb build).

    4.2.1 Provare un'immagine ISO con Qemu

    Collaudare una ISO è semplice:

       # apt-get install qemu

       $ qemu -cdrom binary.iso

    4.2.2 Provare un'immagine ISO con virtualbox-ose

    Per provare la ISO con virtualbox-ose:

       # apt-get install virtualbox-ose virtualbox-ose-dkms

       $ virtualbox

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

    Nota: per sistemi live contenenti X.org che si vogliono provare con virtualbox-ose, si può voler includere il pacchetto dei driver per X.org di VirtualBox, virtualbox-ose-guest-x11, nella configurazione di live-build. Altrimenti, la risoluzione è limitata a 800x600.

       $ lb config --packages virtualbox-ose-guest-x11

    4.2.3 Masterizzare un'immagine ISO su un supporto fisico

    Masterizzare un'immagine ISO è semplice:

       # apt-get install wodim

       $ wodim binary.iso

    4.3 Creare un'immagine USB/HDD

    La seguente sequenza di comandi creerà un'immagine USB/HDD di base contenente solo un sistema Debian standard senza X.org. È 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, o si vuole usare lo spazio rimanente sul supporto per una partizione persistente, allora occorre un'immagine USB/HDD.

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

       # lb clean --binary

    Eseguire il comando lb config con i parametri atti a configurare la struttura config/ per creare un'immagine di tipo USB/HDD:

       $ lb config -b usb-hdd

    Si crei ora l'immagine con il comando lb build:

       # lb build

    4.3.1 Copiare un'immagine USB/HDD su una penna USB

    L'immagine binaria generata contiene una partizione VFAT e il bootloader syslinux, pronti per essere scritti direttamente su una penna USB. Inserire una chiavetta USB con una dimensione maggiore di quella di binary.img e digitare:

       $ dd if=binary.img of=${USBSTICK}

    dove ${USBSTICK} è il nome del device, come /dev/sdb (non una partizione come /dev/sdb1!); si può trovare il nome corretto del device guardando l'output di dmesg dopo aver inserito la chiavetta USB, o meglio ancora ls -l /dev/disk/by-id.

    Questo sovrascriverà definitivamente qualsiasi dato in precedenza sulla chiavetta!

    Nota: come disquisito in precedenza, questo stesso processo può essere usato per immagini di tipo iso-hybrid (con suffisso -hybrid.iso), ma non per le immagini di tipo iso.

    4.3.2 Provare un'immagine USB/HDD con Qemu

       # apt-get install qemu

       $ qemu -hda binary.img

    4.3.3 Usare lo spazio rimanente su una penna USB

    Se si vuole usare lo spazio libero che rimane dopo l'installazione di binary.img, si può usare uno strumento di partizionamento come gparted o parted per creare una nuova partizione sulla penna. La prima partizione verrà utilizzata dal sistema Debian Live.

       # gparted ${USBSTICK}

    Dopo aver creato la partizione, si deve creare su di essa un filesystem. Una scelta possibile potrebbe essere ext4.

       # mkfs.ext4 ${USBSTICK}

    Usare FAT32 se si vuole usare questa partizione dati con Windows.

       # mkfs.vfat -F 32

    Ricorda: ogni volta che si installa un nuovo file binary.img sulla penna, tutti i dati sulla chiavetta saranno persi perché la tabella delle partizioni viene sovrascritta con i contenuti dell'immagine.

    4.4 Creare un'immagine netboot

    La seguente sequenza di comandi creerà un'immagine netboot di base contenente il sistema Debian standard 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:

       # lb clean --binary

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

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

    Diversamente dalle immagini ISO e USB/HDD, il boot via rete non fornisce un'immagine del filesytem al client, perciò i file devono essere forniti via NFS. 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.

    Si crei ora l'immagine con il comando lb build:

       # lb build

    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-net.tar.gz 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.

    4.4.1 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:

       # /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";
      }

    4.4.2 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:

       # dpkg-reconfigure -plow tftpd-hpa

    e inserire la nuova directory del server tftp quando viene richiesto.

    4.4.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:

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

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

       # exportfs -rv

    Configurare questi tre servizi può essere un po' problematico. Serve un po' di pazienza per farli funzionare assieme. Per ulteriori informazioni, si veda il wiki syslinux ‹http://syslinux.zytor.com/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.

    4.4.4 Come provare una netboot

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

    Per semplificarsi la vita, si può usare la virtualizzazione. Ci sono due soluzioni.

    4.4.5 Qemu

  • Installare qemu, bridge-utils, sudo.
  • Modificare /etc/qemu-ifup:

       #!/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

    Procurarsi o compilare grub-floppy-netboot (su svn).

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

    4.4.6 VMWare Player

  • Installare VMWare Player (edizione "free as in beer")
  • Creare una directory PXETester, e crearvi all'interno un file di testo chiamato pxe.vwx
  • Vi si copi dentro questo testo:
  •    #!/usr/bin/vmware
       config.version = "8"
       virtualHW.version = "4"
       memsize = "512"
       MemAllowAutoScaleDown = "FALSE"

       ide0:0.present = "FALSE"
       ide1:0.present = "FALSE"
       floppy0.present = "FALSE"
       sound.present = "FALSE"
       tools.remindInstall = "FALSE"

       ethernet0.present = "TRUE"
       ethernet0.addressType = "generated"

       displayName = "Test Boot PXE"
       guestOS = "other"

       ethernet0.generatedAddress = "00:0c:29:8d:71:3b"
       uuid.location = "56 4d 83 72 5c c4 de 3f-ae 9e 07 91 1d 8d 71 3b"
       uuid.bios = "56 4d 83 72 5c c4 de 3f-ae 9e 07 91 1d 8d 71 3b"
       ethernet0.generatedAddressOffset = "0"

  • Si può giocare con questo file di configurazione (ad esempio portando a 256 il limite della memoria)
  • Fare doppio click su questo file (o avviare il player VMWare e selezionare questo file).
  • Se viene posta qualche strana domanda durante l'esecuzione premere il tasto spazio...