Manuale di Live Systems

A proposito

A proposito di questo manuale

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 Applying changes
1.4.2 Traduzione

About the Live Systems Project

2. About the Live Systems Project

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 da Debian "main", inalterati.
2.2.2 Nessun pacchetto di configurazione per il sistema live
2.3 Contatti

Utente

Installazione

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 Installare live-boot e live-config
3.3.1 Dal repository Debian
3.3.2 Da sorgenti
3.3.3 Da "istantanee"

Nozioni di base

4. Nozioni di base

4.1 Cos'è un sistema live?
4.2 Scaricare immagini precompilate
4.3 Utilizzare il web builder per le immagini live
4.3.1 Utilizzo del web builder e raccomandazioni
4.4 Primi passi: creare un'immagine ISO ibrida
4.5 Utilizzare un'immagine ISO live ibrida
4.5.1 Masterizzare un'immagine ISO su un supporto fisico
4.5.2 Copiare un'immagine ISO ibrida su una penna USB
4.5.3 Usare lo spazio rimanente su una penna USB
4.5.4 Avviare il supporto live
4.6 Utilizzare una macchina virtuale per le prove
4.6.1 Provare un'immagine ISO con QEMU
4.6.2 Testing an ISO image with VirtualBox
4.7 Creare e utilizzare un'immagine HDD
4.8 Creare un'immagine netboot
4.8.1 Server DHCP
4.8.2 Server TFTP
4.8.3 Server NFS
4.8.4 Come provare una netboot
4.8.5 Qemu
4.9 Webbooting
4.9.1 Getting the webboot files
4.9.2 Booting webboot images

Panoramica degli strumenti

5. Panoramica degli strumenti

5.1 Il pacchetto 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

Gestire una configurazione

6. Gestire una configurazione

6.1 Gestire i cambiamenti di configurazione
6.1.1 Perché utilizzare gli script automatici? Cosa fanno?
6.1.2 Esempi d'uso di script automatici
6.2 Clonare una configurazione pubblicata tramite Git.

Personalizzazione dei contenuti

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

Personalizzare l'installazione dei pacchetti

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 Elenchi di pacchetti
8.2.2 Usare metapacchetti
8.2.3 Elenchi locali dei pacchetti
8.2.4 Elenchi locali di pacchetti binari
8.2.5 Elenchi di pacchetti generati
8.2.6 Usare condizioni all'interno degli elenchi di pacchetti
8.2.7 Removing packages at install time
8.2.8 Task per desktop e lingua
8.2.9 Tipi e versioni del kernel
8.2.10 Kernel personalizzati
8.3 Installare pacchetti modificati o di terze parti
8.3.1 Utilizzare packages.chroot 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 compilazione
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

Personalizzazione dei contenuti

9. Personalizzazione dei contenuti

9.1 Include
9.1.1 Live/chroot include locali
9.1.2 Include locali 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

Personalizzare i comportamenti durante l'esecuzione

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 Il file persistence.conf
10.3.2 Utilizzare più di un'archiviazione persistente
10.4 Using persistence with encryption

Personalizzare l'immagine binaria

11. Personalizzare l'immagine binaria

11.1 Bootloader
11.2 Metadati ISO

Personalizzare l'Installatore Debian

12. Personalizzare l'Installatore Debian

12.1 Tipologie dell'Installatore Debian
12.2 Personalizzare il Debian Installer con la preconfigurazione
12.3 Personalizzare il contenuto dell'Installatore Debian

Progetto

Contribuire al progetto

13. Contribuire al progetto

13.1 Applicare le modifiche

Segnalare bug

14. Segnalare bug

14.1 Problemi noti
14.2 Ricompilare da zero
14.3 Usare pacchetti aggiornati
14.4 Raccogliere informazioni
14.5 Se possibile isolare il caso non andato a buon fine
14.6 Segnalare il bug del pacchetto giusto
14.6.1 Durante la compilazione mentre esegue il bootstrap
14.6.2 Durante la compilazione mentre installa i pacchetti
14.6.3 In fase di avvio
14.6.4 In fase di esecuzione
14.7 Fare la ricerca
14.8 Dove segnalare i bug

Lo stile nello scrivere codice

15. Lo stile nello scrivere codice

15.1 Compatibilità
15.2 Rientri
15.3 Ritorno a capo
15.4 Variabili
15.5 Varie

Procedure

16. Procedure

16.1 Rilasci importanti
16.2 Rilasci minori
16.2.1 Ultimo rilascio minore di un rilascio di Debian.
16.2.2 Modello per l'annuncio di un rilascio minore.

Repository Git

17. Repository Git

17.1 Gestire repository multipli

Esempi

Esempi

18. Esempi

18.1 Usare gli esempi
18.2 Tutorial 1: un'immagine predefinita
18.3 Tutorial 2: servizio browser web
18.4 Tutorial 3: un'immagine personalizzata
18.4.1 Prima revisione
18.4.2 Seconda revisione
18.5 Un client Kiosk VNC
18.6 Un'immagine base per una chiavetta USB da 128MB
18.7 Un desktop GNOME localizzato e l'installatore

Appendice

Style guide

19. Style guide

19.1 Guidelines for authors
19.1.1 Linguistic features
19.1.2 Procedures
19.2 Guidelines for translators
19.2.1 Translation hints

Metadata

Manuale di Live Systems

Esempi

18. Esempi

This chapter covers example builds for specific use cases with live systems. If you are new to building your own live system images, we recommend you first look at the three tutorials in sequence, as each one teaches new techniques that will help you use and understand the remaining examples.

18.1 Usare gli esempi

Per usare questi esempi è necessario un sistema per costruirveli sopra che soddisfi i requisiti elencati in Requisiti e avere live-build installato come descritto in Installare live-build.

È da notare che per brevità in questi esempi non specifichiamo un mirror locale da usare per la costruzione. Usando un mirror locale, si possono accelerare considerevolmente i download. Si possono specificare le opzioni quando si usa lb config, come descritto in Mirror delle distribuzioni usati in fase di compilazione o, più convenientemente, impostare il predefinito per il proprio sistema in /etc/live/build.conf. Si crei semplicemente questo file e si impostino in esso le corrispondenti variabili LB_MIRROR_* per il mirror desiderato. Tutti gli altri mirror utilizzati nella costruzione avranno questi valori, ad esempio:

LB_MIRROR_BOOTSTRAP="http://mirror/debian/"
LB_MIRROR_CHROOT_SECURITY="http://mirror/debian-security/"
LB_MIRROR_CHROOT_BACKPORTS="http://mirror/debian-updates/"

18.2 Tutorial 1: un'immagine predefinita

Caso d'uso: creazione di una prima semplice immagine, imparando i fondamenti di live-build.

In this tutorial, we will build a default ISO hybrid live system image containing only base packages (no Xorg) and some live system support packages, as a first exercise in using live-build.

Non può essere più semplice:

$ mkdir tutorial1 ; cd tutorial1 ; lb config

Esaminare i contenuti della directory config/; si noterà uno scheletro di configurazione pronto per essere personalizzato o, in questo caso, usato immediatamente per costruire un'immagine predefinita.

Ora, come utente root, generare l'immagine salvando un log con tee.

# lb build 2>&1 | tee build.log

Assuming all goes well, after a while, the current directory will contain live-image-i386.hybrid.iso. This ISO hybrid image can be booted directly in a virtual machine as described in Testing an ISO image with Qemu and Testing an ISO image with VirtualBox, or else imaged onto optical media or a USB flash device as described in Burning an ISO image to a physical medium and Copying an ISO hybrid image to a USB stick, respectively.

18.3 Tutorial 2: servizio browser web

Caso d'uso: creazione di un'immagine per servizio browser web, imparando come applicare le personalizzazioni.

In this tutorial, we will create an image suitable for use as a web browser utility, serving as an introduction to customizing live system images.

$ mkdir tutorial2
$ cd tutorial2
$ lb config
$ echo "task-lxde-desktop iceweasel" >> config/package-lists/my.list.chroot
$ lb config

La scelta di LXDE per questo esempio riflette il desiderio di fornire un ambiente desktop minimale, dato che il punto focale dell'immagine è il singolo uso che abbiamo in mente, il browser web. Potremmo anche spingerci oltre e fornire una configurazione predefinita per il browser web in config/includes.chroot/etc/iceweasel/profile/, o pacchetti addizionali di supporto per la fruizione di vari tipi di contenuti web, ma lasciamo questo come esercizio per il lettore.

Generare l'immagine, ancora come utente root, conservando un log come in Tutorial 1:

# lb build 2>&1 | tee build.log

Di nuovo, verificare che l'immagine sia a posto e collaudarla, come in Tutorial 1.

18.4 Tutorial 3: un'immagine personalizzata

Caso d'uso: creazione di un progetto per costruire un'immagine personalizzata che contiene i pacchetti preferiti da portare con sé in una chiavetta USB ovunque si vada, e che evolve in revisioni successive allorché i bisogni o le preferenze cambino.

Dal momento che la nostra immagine personalizzata cambierà con le successive revisioni e che vogliamo tener traccia di questi cambiamenti, andando per tentativi ed eventualmente tornando indietro se qualcosa non funziona, conserveremo la nostra configurazione nel popolare sistema di controllo di versione git. Useremo anche le migliori pratiche di auto-configurazione tramite gli script auto come descritto in Gestire una configurazione.

18.4.1 Prima revisione

$ mkdir -p tutorial3/auto
$ cp /usr/share/doc/live-build/examples/auto/* tutorial3/auto/
$ cd tutorial3

Modificare auto/config come segue:

#!/bin/sh

lb config noauto \
     --architectures i386 \
     --linux-flavours 686-pae \
     "${@}"

Eseguire lb config per generare l'albero di configurazione utilizzando lo script auto/config appena creato:

$ lb config

Popolare ora l'elenco locale dei pacchetti:

$ echo "task-lxde-desktop iceweasel xchat" >> config/package-lists/my.list.chroot

Per prima cosa, --architectures i386 assicura che sul nostro sistema amd64 costruiamo una versione a 32-bit utilizzabile sulla maggior parte delle macchine. In secondo luogo, usiamo --linux-flavours 686-pae dato che non prevediamo di usare questa immagine su sistemi troppo vecchi. Terzo, abbiamo scelto il metapacchetto task lxde per avere un desktop minimale. Infine abbiamo aggiunto due pacchetti preferiti: iceweasel e xchat.

Costruire quindi l'immagine:

# lb build

Notare che diversamente dai primi due tutorial non occorre più digitare 2>&1 | tee build.log dato che questo è ora incluso in auto/build.

Una volta che l'immagine è stata collaudata (come in Tutorial 1) e che si è sicuri che funzioni correttamente, è il momento di inizializzare il repository git, aggiungendo solo gli script auto appena creati, e di fare poi il primo commit:

$ git init
$ cp /usr/share/doc/live-build/examples/gitignore .gitignore
$ git add .
$ git commit -m "Initial import."

18.4.2 Seconda revisione

In questa revisione ripuliremo la prima compilazione, aggiungeremo il pacchetto vlc alla configurazione, dunque avverrà una ricompilazione, verifica e commit.

Il comando lb clean ripulirà tutti i file ottenuti con la precedente generazione eccetto la cache, che ci evita un nuovo download dei pacchetti. Ciò assicura che il successivo lb build eseguirà di nuovo tutti i passaggi per rigenerare i file dalla nuova configurazione.

# lb clean

Ora inserire il pacchetto vlc all'elenco locale dei pacchetti config/package-lists/my.list.chroot:

$ echo vlc >> config/package-lists/my.list.chroot

Rigenerare nuovamente:

# lb build

Verificare e, quando soddisfatti, eseguire il commit della revisione successiva:

$ git commit -a -m "Adding vlc media player."

Ovviamente sono possibili cambiamenti alla configurazione più complicati, magari aggiungendo file in sottodirectory di config/. Quando si esegue il commit di nuove revisioni, si faccia solo attenzione a non modificare manualmente o fare un commit dei file al livello superiore di config che contengono le variabili LB_*, giacché sono anche prodotti dell'assemblaggio, e che sono sempre ripuliti da lb clean e ricreati con lb config attraverso i loro rispettivi script auto.

We've come to the end of our tutorial series. While many more kinds of customization are possible, even just using the few features explored in these simple examples, an almost infinite variety of different images can be created. The remaining examples in this section cover several other use cases drawn from the collected experiences of users of live systems.

18.5 Un client Kiosk VNC

Caso d'uso: creazione di un'immagine con live-build per avviare direttamente un server VNC.

Creare una directory per la compilazione e una configurazione di base al suo interno disabilitando i raccomandati per ottenere un sistema minimale. Quindi creare due elenchi di pacchetti: il primo generato con uno script fornito da live-build chiamato Packages (vedere Elenchi di pacchetti generati) e il secondo che include xorg, gdm3, metacity e xvnc4viewer.

$ mkdir vnc-kiosk-client
$ cd vnc-kiosk-client
$ lb config -a i386 -k 686-pae --apt-recommends false
$ echo '! Packages Priority standard' > config/package-lists/standard.list.chroot
$ echo "xorg gdm3 metacity xvnc4viewer" > config/package-lists/my.list.chroot

Come spiegato in Modificare APT per risparmiare spazio potrebbe essere necessario riaggiungere alcuni pacchetti raccomandati al fine di far funzionare l'immagine correttamente.

Un modo semplice per elencare i raccomandati è usare apt-cache, ad esempio:

$ apt-cache depends live-config live-boot

In questo esempio abbiamo scoperto che dobbiamo iserire nuovamente svariati pacchetti raccommandati da live-config e live-boot: user-setup perché il login automatico funzioni e sudo come programma essenziale per spegnere il sistema. Oltretutto può essere comodo aggiungere live-tools per poter copiare l'immagine in RAM e eject per espellere il supporto live alla fine. Quindi:

$ echo "live-tools user-setup sudo eject" > config/package-lists/recommends.list.chroot

Successivamente creare la directory /etc/skel in config/includes.chroot e inserirvi un .xsession personalizzato per l'utente predefinito che lancerà metacity e avvierà xvncviewer connesso alla porta 5901 su un server con indirizzo 192.168.1.2:

$ mkdir -p config/includes.chroot/etc/skel
$ cat > config/includes.chroot/etc/skel/.xsession << EOF
#!/bin/sh

/usr/bin/metacity &
/usr/bin/xvncviewer 192.168.1.2:1

exit
EOF

Compilare l'immagine:

# lb build

Buon divertimento.

18.6 Un'immagine base per una chiavetta USB da 128MB

Caso d'uso: creazione di un'immagine predefinita con alcuni componenti rimossi affinché possa stare su una chiavetta USB da 128MB, con un po' di spazio libero da usarsi come meglio si crede.

Quando si cerca di ottimizzare un'immagine affinché sia contenuta in un supporto, è necessario capire il compromesso che si deve fare tra la dimensione e la funzionalità. In questo esempio, taglieremo solo quanto basta per far sì che il tutto stia in 128M, senza fare nient'altro che distrugga l'integrità dei pacchetti contenuti, come eliminare localizzazioni con il pacchetto localepurge o altre ottimizzazioni "intrusive". È da notare che per creare un sistema minimale da zero viene utilizzata l'opzione --debootstrap-options.

$ lb config -k 486 --apt-indices false --apt-recommends false --debootstrap-options "--variant=minbase" --firmware-chroot false --memtest none

Affinché l'immagine funzioni correttamente dobbiamo riaggiungere almeno due pacchetti raccomandati lasciati fuori dall'opzione --apt-recommends false. Vedere Modificare APT per risparmiare spazio

$ echo "user-setup sudo" > config/package-lists/recommends.list.chroot

Costruire quindi l'immagine nel modo consueto:

# lb build 2>&1 | tee build.log

All'autore del sistema al momento di scrivere, la seguente configurazione ha prodotto un'immagine di 77MB. Comparabile favorevolmente con i 177MB prodotta dalla configurazione predefinita nel Tutorial 1.

Ciò che fa risparmiare più spazio, comparato alla creazione di un'immagine predefinita su un sistema con architettura i386, è la selezione del solo kernel 486 invece che quello predefinito -k "486 686-pae". Lasciando fuori anche gli indici di APT con --apt-indices false si può salvare una certa quantità di spazio, il compromesso è usare apt-get update prima di usare apt nel sistema live. Saltare i pacchetti raccomandati con --apt-recommends false salva altro spazio, a scapito di alcuni pacchetti che ci si aspetta di trovare. --debootstrap-options "--variant=minbase" fa il bootstrap di un sistema minimale partendo da zero. Evitare di includere automaticamente pacchetti di firmware con --firmware-chroot false fa risparmiare altro spazio. E infine, --memtest none evita l'installazione del programma per testare la memoria.

Note: A minimal system can also be achieved using hooks, like for example the stripped.hook.chroot hook found in /usr/share/doc/live-build/examples/hooks. It may shave off additional small amounts of space and produce an image of 62MB. However, it does so by removal of documentation and other files from packages installed on the system. This violates the integrity of those packages and that, as the comment header warns, may have unforeseen consequences. That is why using a minimal debootstrap is the recommended way of achieving this goal.

18.7 Un desktop GNOME localizzato e l'installatore

Caso d'uso: creazione di un'immagine con il desktop GNOME, localizzato in svizzero e che includa l'installatore.

Si vuole creare un'immagine iso ibrida per architettura i386 usando il nostro desktop preferito, in questo caso GNOME, contenente tutti gli stessi pacchetti che verrebbero installati dall'installatore Debian standard per GNOME.

Il problema iniziale è di scoprire i nomi dei task della lingua appropriati, attualmente, live-build non aiuta in questo. Si può essere fortunati o arrivarci con vari tentativi, ma c'è uno strumento grep-dctrl il quale può essere utilizzato per scavare nelle descrizioni in tasksel-data, perciò assicursi di avere entrambi questi pacchetti:

# apt-get install dctrl-tools tasksel-data

Ora si possono cercare i task appropriati:

$ grep-dctrl -FTest-lang de /usr/share/tasksel/descs/debian-tasks.desc -sTask
Task: german

Con questo comando, si è chiaramente scoperto che il task si chiama german. Ora per trovare i task correlati:

$ grep-dctrl -FEnhances german /usr/share/tasksel/descs/debian-tasks.desc -sTask
Task: german-desktop
Task: german-kde-desktop

Durante il boot verrà generata la localizzazione de_CH.UTF-8 e selezionato il layout di tastiera *{ch}, mettiamo ora insieme questi pezzi. Ricordando che i metapacchetti task iniziano con task- (come descritto in Usare metapacchetti), specifichiamo questi parametri d'avvio per la lingua, quindi aggiungiamo i pacchetti con priorità standard e tutti i metapacchetti task al nostro elenco in questo modo:

$ mkdir live-gnome-ch
$ cd live-gnome-ch
$ lb config \
     -a i386 \
     -k 486 \
     --bootappend-live "boot=live components locales=de_CH.UTF-8 keyboard-layouts=ch" \
     --debian-installer live
$ echo '! Packages Priority standard' > config/package-lists/standard.list.chroot
$ echo task-gnome-desktop task-german task-german-desktop >> config/package-lists/desktop.list.chroot
$ echo debian-installer-launcher >> config/package-lists/installer.list.chroot

Notare che è stato incluso il pacchetto debian-installer-launcher in modo da poter lanciare l'installer dal desktop della live, e che è stato anche specificato il kernel 486, dato che attualmente è necessario che il kernel dell'installer e quello del sistema live coincidano affinché il launcher funzioni correttamente.