HOWTO: creare un ubuntu live cd 2

Share Button

La creazione di un live cd personalizzato derivato da una distribuzione debian-based (es ubuntu) richiede 4 passaggi:

  1. creazione ambiente di lavoro
  2. personalizzazione dei contenuti software del livecd
  3. creazione dell’ambiente per il cd di boot
  4. creazione del file immagine, test e masterizzazione del livecd

Il presente HOWTO include anche l’uso di ubiquity – l’installer grafico di ubuntu.
Il risultato e’ che, il livecd creato, puo’ essere installato su disco rigido con tutte le personalizzazioni fatte.

Prima di cominciare


Assicurarsi che

  • si stia utilizzando un utente in grado di eseguire il comando sudo o comunque con i permessi di amministrazione
  • il computer su cui si opera abbia un collegamento internet

Nota a margine: negli esempi riportati si fa la directory work nella home utente

mkdir -p $HOME/work

Passo 1

creazione ambiente di lavoro

debian mette a disposizione il tool debootstrap con il quale e’ possibile creare, in una directory, una configurazione di una distribuzione debian di base.
Nel nostro esempio la directory ha nome chroot (i motivi saranno chiari al passo successivo).

Le operazioni da eseguire saranno pertanto:

  • installazione di debootstrap
  • creazione dell’area di lavoro
  • esecuzione di debootstrap selezionado:
    • il tipo di architettura da utilizzare (i386 nel nostro caso)
    • la release ubuntu di riferimento (hardy)
    • la directory di destinazione (chroot)

tradotto in comandi:

apt-get install debootstrap
mkdir -p $HOME/work/chroot
cd $HOME/work/chroot
debootstrap --arch i386 hardy chroot

Passo 2

personalizzazione dei contenuti software del livecd

la directory $HOME/work/chroot conterra’ tutto cio’ che vogliamo sia presente sul nostro livecd.
Quanto prodotto in precedenza da debootstrap e’ un ambiente minimale, occorre pertanto procedere ad una personalizzazione.
Il metodo suggerito e’ quello di fare uso del comando chroot.

Con questo comando si trasforma una qualsiasi directory nella root del disco (chroot = change root), creando una sorta di “prigione” entro la quale tutti i processi all’esterno sono ignorati.Prima di effettuare il comando occorre pero’ copiare alcuni file di configurazione necessari. Nello specifico la configurazione del dns (/etc/resolv.conf) e delle risorse apt (/etc/apt/sources.list).


sudo cp /etc/resolv.conf chroot/etc/resolv.conf
sudo cp /etc/apt/sources.list chroot/etc/apt/sources.list

a questo punto e’ possibile entrare in chroot nell’ambiente creato
sudo chroot chroot
dopo questa operazione il prompt comandi cambia mostrando il simbolo # e il sistema dara’ il messaggio di errore che non riesce ad individuare la home dell’utente (non e’ un problema ai fini del resto delle operazioni).
L’ambiente in chroot pero’ non e’ ancora adeguato per essere utilizzato.
Si deve far conoscere al nuovo ambiente le informazioni che il kernel linux da al suo avvio nelle directory proc e sys e i device a quali collegarsi.
Il tutto lo si ottiene con i seguenti comandi
mount /proc
mount /sys
mount -t devpts none /dev/pts

A questo punto possiamo procedere all’installazione di tutto il software che vogliamo essere presente sul nostro livecd.
Aggiorniamo le risorse apt, scegliamo la lingua e procediamo con l’installazione.
I pacchetti strettamente necessari per l’esecuzione del live-cd sono:

  • ubuntu-standard
  • casper
  • discover1
  • laptop-detect
  • os-prober
  • ubiquity
  • linux-generic

apt-get update
locale-gen it_IT.UTF-8
apt-get install ubuntu-standard casper discover1 laptop-detect os-prober linux-generic ubiquity

da qui in poi aggiungere qualsiasi pacchetto si voglia avere nel cd usando apt-get
es:
apt-get install vlc

Finita ogni installazione si deve ripulire l’ambiente creato e uscire (exit)
apt-get clean
rm -rf /tmp/*
rm /etc/resolv.conf
umount -l -f /proc
umount -l -f /sys
umount /dev/pts
exit

Tutto il contenuto della directory di chroot va archiviata in un file immagine compresso con squashfs (apt-get install squashfs-tools) nella directory $HOME/image/casper/

mkdir -p $HOME/image/casper/
cd $HOME/work/
sudo mksquashfs chroot image/casper/filesystem.squashfs

Il file creato verra’ utilizzato dal tool casper per eseguire il livecd

Passo 3

creazione dell’ambiente per il cd di boot

in questo passaggio occorre preparare l’ambiente necessario per il cd di avvio attraverso il tool syslinux.
mkdir image image/casper image/isolinux image/install
(se non presente occorre installare syslinux e sbm apt-get install syslinux sbm)

nelle directory create copiare il kernel d’avvio

cp chroot/boot/vmlinuz-2.6.**-**-generic image/casper/vmlinuz
cp chroot/boot/initrd.img-2.6.**-**-generic image/casper/initrd.gz

e i tool di syslinux

cp /usr/lib/syslinux/isolinux.bin image/isolinux/
cp /boot/memtest86+.bin image/install/memtest
cp /boot/sbm.img image/install/

E’ possibile personalizzare messaggistica e immagine di boot modificato i file isolinux.txt e splash.rle
Il primo va copiato in image/isolinux qui un esempio

cat > images/isolinux/isolinux.txt << EOF Live CD personalizzato Digitare - "live" (o battere invio) per avviare il cd. - "check" per verificare che il cd non contenga errori - "memtest" per eseguire memtest86+ per testare la ram EOF

La procedura per personalizzare il file splash.rle richiede qualche passaggio in piu'.
La partenza avviene da un file bmp con massimo 15 colori indicizzati di larghezza 480 pixel
che va convertito in ppm (apt-get install netpbm) e successivamente in rle

cp splash.bmp image/isolinux
bmptoppm splash.bmp > splash.ppm
ppmtolss16 '#ffffff=7' < splash.ppm > splash.rle
rm splash.bmp
rm splash.ppm

Per fare in modo che il file ottenuto appaia al boot occorre modificare la prima riga del file isolinux.txt precedentemente creato aggiungendo l'istruzione splash.rle

Le opzioni possibili al boot sono definite nel file isolinux.cfg (per maggiori dettagli leggere la documentazione in /usr/share/doc/syslinux/syslinux.doc)
Il seguente e' un esempio che ricalca le opzioni descritte nel file isolinux.txt descritto sopra

cat > isolinux.cfg<< EOF DEFAULT live LABEL live menu label ^Avvio live cd kernel /casper/vmlinuz append boot=casper initrd=/casper/initrd.gz quiet splash -- LABEL check menu label ^Controllo difetti sul cd kernel /casper/vmlinuz append boot=casper integrity-check initrd=/casper/initrd.gz quiet splash -- LABEL memtest menu label ^Test memoria kernel /install/memtest append - LABEL hd menu label ^Boot dal primo disco rigido localboot 0x80 append - DISPLAY isolinux.txt TIMEOUT 300 PROMPT 1 EOF

Analizzando rapidamente il file:
ogni blocco definito dalla parola LABEL rappresenta una possibile stringa con cui avviare il sistema operativo, ad ogni relativa voce append si definisce quale comportamento avere.
Il parametro boot=casper e' fondamentale per l'avvio del nostro livecd.
Con DEFAULT si stabilisce quale e' l'avvio predefinito qualora l'utente batta invio o attenda la quantita' di millesecondi espressa dalla variabile TIMEOUT.
DISPLAY informa quale file visualizzare come messaggistica verso l'utente.

Con i passaggi ottenuti fino a qui il cd ora e' in grado di avviarsi e di eseguire la parte live creata nei passaggi precedenti.
Occorre pero' aggiungere le informazioni.
Prima fra questa sono i file di manifest che specificano quali sono i pacchetti installati nel livecd e quali invece quelli che andranno installati sul sistema qualora l'utente decida di installare il contenuto del livecd sul proprio computer attraverso ubiquity.
I due file in questione sono filesystem.manifest e filesystem.manifest-desktop.
Attraverso la serie di comandi qui sotto e' possibile creare questa lista in maniera automatica.
La lista dei pacchetti da escludere qualora si voglia fare una installazione su disco rigido e' definita nella variabile REMOVE.
Qualsiasi nome di pacchetto incluso verra' escluso durante l'installazione.

sudo chroot chroot dpkg-query -W --showformat='${Package} ${Version}\n' | sudo tee image/casper/filesystem.manifest
sudo cp -v image/casper/filesystem.manifest{,-desktop}
REMOVE='ubiquity casper live-initramfs user-setup discover1 xresprobe os-prober libdebian-installer4'
for i in $REMOVE
do
sudo sed -i "/${i}/d" image/casper/filesystem.manifest-desktop
done

Altra informazione da aggiungere e' quella della definizione del tipo di cd.
Questo avviene creando il file README.diskdefines nella directory image/
Questo un esempio
cat > image/README.diskdefines << EOF #define DISKNAME My LiveCD #define TYPE binary #define TYPEbinary 1 #define ARCH i386 #define ARCHi386 1 #define DISKNUM 1 #define DISKNUM1 1 #define TOTALNUM 0 #define TOTALNUM0 1 EOF
Infine, va aggiunto il file md5 necessario per le operazioni di checking dell'integrita' del dato.
sudo -s
(cd image && find . -type f -print0 | xargs -0 md5sum > md5sum.txt)
exit

Passo 4

creazione del file immagine, test e masterizzazione del livecd

Finita le operazioni di configurazione descritti nei passi precedenti si passa alla creazione del file immagine attraverso il tool mkisofs.
IMAGE_NAME="LiveCD"
OUTFILE="livecd.iso"
cd image
sudo mkisofs -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../$OUTFILE .

Il file iso creato puo' essere provato con qemu o virtualbox o vmware.
Se il tutto funziona regolarmente allora si puo' procedere alla masterizzazione con cdrecord

cdrecord -eject livecd.iso

Questo documento si rifa' alla pagina:
https://help.ubuntu.com/community/LiveCDCustomizationFromScratch

Share Button

2 thoughts on “HOWTO: creare un ubuntu live cd

  1. Reply Maurizio Mar 18,2009 21:53

    Bene, tutto bello finchè si fa partire l’installazione:
    cp: cannot create /root/var/log/…
    mount: mounting /root/dev on /dev.static/dev failed…
    etc…
    Cosa sarà mai?

  2. Reply Maurizio Mar 18,2009 21:56

    Ah giusto, ho riadattato due cose:
    1) debootstrap –arch i386 hardy chroot
    diventa
    debootstrap –arch i386 intrepid chroot

    2) apt-get install ubuntu-standard casper discover1 laptop-detect os-prober linux-generic ubiquity

    ha il problema (legato ad intrepid) di non riconoscere “discover1” che diventa “discover”

Leave a Reply