[LinuxFocus-icon]
LinuxFocus article number 298
http://linuxfocus.org

[Photo of the Author]
Tjabo Kloppenburg (homepage)

L'autore:

Sono stato infettato nel 1996. Slackware 3.1. Mi piace scriptare in linguaggi come Python, Perl, GAWK e così via. E sono interessato nei dispositivi di boot.



Tradotto in Italiano da:
Alessandro Pellizzari <alex(at)neko.it>

CDROM da 8cm Multiboot con Knoppix linux modificato

[Illustration]

Premessa:

Dopo aver letto qualche articolo su LinuxFocus e su altre pagine web ho finalmente trovato un metodo sicuro per creare CD-Rom bootabili, dischi di boot puliti (senza virus), distribuzioni linux singolo-disco o sistemi knoppix adattati.
Masterizzati in un CD da 8 cm con 183 Mb. Entra in tutte le tasche e puó essere utile in molte situazioni.


_________________ _________________ _________________

 

Prerequisiti

Assumeró che abbiate una conoscenza base di Linux e che sappiate come masterizzare un CD. Dovreste avere un masterizzatore che possa masterizzare anche i CD-RW. É utile perchè dagli errori si impara... Dovreste avere un disco CD-RW, qualche CD-R (o CD-RW) da 8cm e un sistema Linux funzionante con qualche centinaio di Mb liberi.
Piú tardi, per l'integrazione con knoppix, avremo bisogno di un collegamento veloce a Internet, perchè installeremo alcuni pacchetti dalla rete. Se sapete come configurare samba o nfs per avere un mirror debian locale non avrete bisogno del collegamento veloce. Infine dovreste avere qualche conoscenza di debian (installazione e disinstallazione dei pacchetti), o un amico/canale irc a cui chiedere. E dovreste sapere anche come usare il device loopback.

 

Le basi

Fare il boot da CD é molto simile al boot da disco o hard-disk. Qualcosa viene letto dal disco in memoria dal BIOS e quindi viene avviato. All'inizio dell'epoca dei CD-Rom non erano pensati per farci il boot, quindi i progettisti di hardware hanno dovuto creare una piccola magia: dopo aver bruciato qualche cambiamento al BIOS proprietario per ogni fornitore hanno finalmente definito lo standard "el torito".

Questo formato definisce una struttura nel CD-Rom che contiene un'immagine di disco bootabile e un po' di codice nel BIOS che carica la struttura in memoria - emulando un floppy in memoria. Dopo aver caricato il disco in memoria fa il boot come qualsiasi altro disco.

Con questa emulazione di floppy possiamo costruire un CD-Rom bootabile con una singola immagine di floppy da 1.44 Mb, o una da 2.88 Mb. Non avete mai visto un floppy del genere, ma il BIOS puó usarlo. Facendo il boot da CD-Rom non ci serve un disco da 2.88 Mb - solo un'immagine di disco creata con il loop device e qualche tool.

Un singolo disco non é ancora un disco multi-boot. Ci serve un tool per caricare e far partire altre immagini di boot da un filesystem. Boot-Scriptor é nostro amico. Con boot-scriptor faremo il boot da CD-Rom con un loader (senza emulazione di disco. É possibile anche questo), quindi sceglieremo l'immagine di boot da un elenco. Boot-scriptor fará qualche magia per caricare l'immagine in un'emulazione di floppy, facendo il boot come se il floppy fosse nel lettore.

Questi dischi di boot possono essere immagini di dischi come i dischi di boot di Windows in diverse versioni, un password-changer per NT, mini-distribuzioni Linux o un disco di boot di Knoppix per caricare un sistema Knoppix di medie dimensioni.

 

Basta parlare, cominciamo

ci serve una directory con abbastanza spazio libero per costruire la struttura di directory del nostro CD-Rom. Supponiamo di avere abbastanza spazio in "/data". La directory di base del nostro progetto potrebbe essere "/data/mboot". Qui dentro creiamo due directory, "/toolcd" (contenuto del CD-Rom) e "/archive" (versioni originali degli strumenti che uso, come i virus scanner).

 

Un menu di boot con boot scriptor

Prelevate l'archivio e i file INI da Boot-Scriptor (bootscriptor.org). Non c'é documentazione nell'archivio, la troverete solo sul sito web.

Boot-scriptor ha bisogno di una sua directory "bscript/" sul CD-Rom con il loader, un file grafico opzionale (vedi documentazione) e il file chiamato "bscript.ini".
Questo file definisce il menu di boot in un linguaggio simile al basic, con comandi come "print", "onkey" (esegue qualcosa alla pressione di un tasto) e "memdisk" (immagine del disco di boot).

Date un'occhiata a questo piccolo esempio, e scrivete il vostro file ini:

print "\ac\c0e--=> my multi boot cdrom with linux <=--"
print "F1 Bootdisk1"
print " w warm reboot"

MenuLoop:
onkey f1 goto bootDisk1
onkey w reboot warm
goto MenuLoop

bootDisk1:
memdisk \images\boot1.img


C'é una manciata di altri comandi. Fatevi una copia in locale della documentazione di boot-scriptor e mettetela da qualche parte nella struttura di directory del CD-Rom. Ne avrete bisogno per muovere i primi passi nella comprensione dei comandi di base.

 

Come creare immagini di dischi di boot?

Per un primo CD-Rom di test abbiamo bisogno di un singolo disco di boot come può essere quello di windoze. O di un disco di boot di Linux creato con lilo. O provate una di quelle mini-distribuzioni Linux su singolo disco come HAL o TomsRtBt (2.88 Mb). Chiedete al vostro motore di ricerca preferito.

Useremo "dd" per creare l'immagine del disco dal disco stesso:

  ( inserite il disco )
  # cd /data/mboot/toolcd
  # mkdir images         (directory for the disk images)
  # dd if=/dev/fd0 of=images/boot1.img


 

Ora creiamo il file ISO e masterizziamolo.

Il programma "mkisofs" deve essere richiamato con l'opzione "-b" per fargli installare il boot loader. Il path dell'argomento "-b" é relativo alla directory base del CD-Rom ("toolcd/"):

# cd /data/mboot
# mkisofs -r -o iso.01 -b bscript/loader.bin \
          -no-emul-boot -boot-load-size 4 toolcd

Ora rimane una sola cosa da fare: masterizzare il file ISO su CD-RW. Potete anche usare un CD-R. Ma bastano uno o due caratteri sbagliati nel file "bscript.ini" per trasformare il vostro nuovo CD-Rom in qualcosa che cerca la strada del cestino. Quindi meglio masterizzare un CD-RW :-).
Se avete un CD-RW usato dovete prima svuotarlo. "cdrecord" ha due possibilità: "blank=fast" e "blank=all". Il modo fast è piú veloce :)

Prima di masterizzare dovete scoprire il parametro dev del masterizzatore. Scrivete "cdrecord -scanbus" per vedere tutti i dispositivi disponibili.. Se non ci sono dispositivi probabilmente dovete caricare un modulo come "ide-scsi" con un comando come "modprobe ide-scsi".

Ora riproviamo. Ecco un esempio su come trovare il dispositivo (qui 0,0,0) e masterizzare l'immagine su CD-RW:
# cdrecord -scanbus
Cdrecord 1.10 (i686-pc-linux-gnu) (C) 1995-2001 J. Schilling
Linux sg driver version: 3.1.22
Using libscg version 'schily-0.5'
scsibus0:
  0,0,0   0) 'LG   ' 'CD-RW CED-8083B ' '1.05' Removable CD-ROM
  ...

# cdrecord -v dev=0,0,0 speed=32 iso.01

Alcuni CD-RW hanno velocità basse (per esempio 4x). Ma non importa, "cdrecord" legge la descrizione del supporto dal CD-RW e usa automagicamente la velocità massima consentita dal supporto inferiore o uguale a quella specificata (32).

Quando la masterizzazione è finita dovreste provare a riavviare facendo il boot dal CD.

 

Usare un Makefile

La chiamata a "mkisofs" ha parecchi caratteri, il che la rende facile da sbagliare. "cdrecord" ha bisogno di parametri corretti, quindi è una buona idea usare uno script o un Makefile per essere sicuri di passare i parametri corretti. Useremo un Makefile per il comando "make". Installatelo, se non l'avete nel sistema. "make" è uno dei comandi che i programmatori dovrebbero conoscere.

Metteremo il Makefile nella struttura di directory del CD-Rom, creando un link nella directory "mboot/" È una buona idea mettere tutto quello che ci serve per ri-masterizzare dentro il CD-Rom. Rende possibile la creazione di una versione migliore del CD-Rom anche se non avete piú i file sull'hard disk, quindi è anche un buon backup... :-).

Il Makefile può essere molto semplice. Ecco un esempio:

BASE = toolcd
DEV = 0,0,0
SPEED = 4
VERSION = 01
ISO = iso.$(BASE).$(VERSION)
OPTIONS= -b bscript/loader.bin -no-emul-boot -boot-load-size 4

blank:
    cdrecord -v dev=$(DEV) blank=fast

blankall:
    cdrecord -v dev=$(DEV) blank=all

iso:
    echo "deleting ~ files:"
    @find $(BASE) -name "*~" -exec rm {} \;
    echo "creating iso file:"
    @mkisofs -r -o $(ISO) $(OPTIONS) $(BASE)
    @echo
    ls -al $(ISO)

burn:
    cdrecord -v dev=$(DEV) speed=$(SPEED) $(ISO)

L'indentazione deve essere fatta con TAB. Non usate spazi per farla!

Come detto prima mettiamo il Makefile in una directory dentro la struttura del CD-Rom. Un posto come "/data/mboot/toolcd/scripts" va benissimo. Faremo un soft-link verso "/data/mboot/Makefile":
# cd /data/mboot
# ln -s toolcd/scripts/Makefile Makefile

Per creare un nuovo CD-Rom dopo aver modificato alcune cose (immagini dei dischi di boot, antivirus) dobbiamo solo dare questi tre semplici comandi nella directory "mboot/":
# make blank
# make iso
# make burn

Facile, no?

 

Altri dischi di boot

Troverete altri dischi di boot nei vostri porta-dischi e sul web. Ma ricordatevi che non sapete cosa ci sia nei dischi scaricati da Internet. Io credo sia sempre una buona idea chiedere a un motore di ricerca come google se altri hanno avuto problemi con i dischi scaricati da un sito. E fate una scansione del disco per cercare virus.

Ho preso alcuni dischi di boot da www.bootdisk.com. I dischi sono in versione inglese, la maggior parte con supporto CD. Potete accedere a un virus scanner sul CD o lanciare un update del BIOS da un altro CD. Mi piace molto l'immagine di disco di boot "drdflash" che fornisce un disco minimo con abbastanza spazio per un flasher di BIOS. Usate "rawrite" (dos) o "dd" (linux) per scrivere l'immagine su disco e avrete un flasher in pochi minuti. Sono stato a un LAN party e ho visto quanto un gruppo di utenti linux abbia bisogno di trovare un disco bootabile per il flash del BIOS... ;-)

Nota: Potete trovare "rawrite.exe" sulla gran parte dei CD delle distribuzioni Linux.

 

Più contenuto

Col vostro piccolo e pratico CD da 8 cm avete qualcosa con cui fare un boot pulito dappertutto. Perché non mettere un virus scanner sul CD? Ho preso "F-Prot" da F-Secure. Hanno una versione Linux e una Dos liberamente scaricabili.

L'unico problema è come aggiornare le definizioni dei virus sul CD. Ho sentito parlare di CD-RW da 8 cm, ma non ne ho mai visto uno in vendita. Pessima cosa. Un'altra soluzione sarebbe di fare il boot di un sistema Linux minimo da un CD da 8 cm e di scaricare le nuove definizioni da Internet.

Due dei problemi che ho riscontrato con f-prot sono stati:

La mia soluzione è stata di rinominare il binario in 'fprot' e di dimenticarmi dello script :).

La prossima parte di questo articolo spiega come integrare una distribuzione Linux su CD, per fornirci un utile tool per praticamente tutte le situazioni di emergenza.

 

Integrare knoppix

Se ancora non conoscete Knoppix dategli un'occhiata! È una versione completa, bootabile, di Linux con 2-3 Gb di software su un singolo CD da 650 Mb, live. Con rilevazione automatica dell'hardware e altre cose utilissime. Ma non ci sta sul nostro mini-CD.
Non disperatevi, perché è possibile rimasterizzare il CD-Rom di Knoppix (o un progetto simile). Vi servono solo alcune conoscenze di base di Debian, e un po' di spazio sul vostro HD.

Knoppix usa un po' di magia per far stare 2-3 Gb di software su un CD da 650 Mb: il filesystem è stato compresso in un file "/KNOPPIX/KNOPPIX" e viene montato dal processo init lanciato all'avvio del floppy di boot (*) usando un particolare modulo driver di nome "cloop". (* In effetti è il contenuto di un'immagine di disco di boot usata chiamando "mkisofs" con l'opzione "-b".

L'immagine del disco di boot usato per creare il CD di Knoppix si trova nella directory "/KNOPPIX" del CD di Knoppix: "boot.img". C'è ancora l'idea di avere tutti i geni pronti per il prossimo salto evoluzionistico "a bordo"...

Suggerisco di montare il disco di boot di Knoppix con il device loop per cercare di capire come funziona il processo di boot. Cercate nel web il "bootdisk HOWTO" per avere maggiori informazioni. Uno dei file che trovate sull'immagine è un ".gz", compresso con gzip, con un'immagine di filesystem all'interno. È il ramdisk iniziale (NdT: Initial RamDisk, initrd) usato per le prime fasi del boot.

Quando caricate Knoppix succede questo: Il file "boot.img" scritto nell'immagine ISO carica il kernel dal floppy emulato, caricando il ramdisk iniziale. Il processo linuxrc carica il modulo "cloop.o" e cerca un file "/KNOPPIX/KNOPPIX" su tutti i dispositivi collegati con un filesystem conosciuto. Sí, sarebbe possibile caricare l'immagine compressa di KNOPPIX anche da HD. Ma non ho mai provato.
Dopo aver trovato un dispositivo con il filesystem compresso, viene montato e iniziano il rilevamento dell'hardware e tutto il resto.

Il floppy "boot.img" non si interessa del dispositivo da cui viene caricato (floppy reale o emulato), quindi è abbastanza semplice integrarlo nel nostro CD-Rom multi-boot: copiate "boot.img" nella directory "images/" e aggiungete una voce al menu in "bscript.ini".

 

Adattare knoppix

Un CD-Rom originale Knoppix è troppo grosso per il nostro piccolo CD da 8 cm. Ricordate che abbiamo 183 Mb a disposizione. Dobbiamo cancellare un sacco di roba, ma è un lavoraccio. Perché non usufruire del lavoro di qualcun'altro? Il sito Knoppix Customizations elenca un paio di versioni modificate di Knoppix, alcune ridotte fino a una dimensione, compressa, di 50-60 Mb. Ho deciso di usare "Model_k". È piccola ma non c'è GUI e manca il supporto per tastiere non US. Forse "Damn Small Linux" è meglio...

Ho preso le istruzioni che trovate qui sotto da un documento di Sunil Thomas Thonikuzhiyil, che descrive il processo di rimasterizzazione molto dettagliatamente. Leggetelo se volete sapere come cambiare il kernel o l'initrd del disco di boot. Ma normalmente non ci serve sapere tutto questo se usiamo "Model_k" o un sistema simile per il nostro mini-CD...

L'idea di base per cui rimasterizzare Knoppix risiede nel fatto che è un sistema Debian completo - quando c'è un filesystem scrivibile [un CD è a sola lettura :)]. La parte principale della rimasterizzazione è l'installazione e disinstallazione dei pacchetti. Niente di troppo complicato.

Per modificare una Knoppix dobbiamo proma farci il boot. Dopodiché si devono seguire questi passi:

Il nuovo filesystem compresso va copiato in "/KNOPPIX/KNOPPIX" nella struttura di directory del nostro CD-Rom dove il processo di boot possa trovarlo.

Ora facciamo il boot di Knoppix e...:

Montiamo uno spazio per i dati e copiamo i file:
# mkdir /1
# mount -t ext2 /dev/hda<n> /1
# cp -Rp /KNOPPIX /1

Spostiamoci nell'ambiente non compresso e scrivibile:
# chroot /1/KNOPPIX
# mount -t proc /proc proc

Configuriamo la rete:
# (usare ifconfig se non c'è un server DHCP nella rete.)
# (cambiate la configurazione dei nameserver quando non c'è un DHCP. Cancellate il link
  "/etc/resolv.conf" e create un vostro file.)

Installiamo / disinstalliamo pacchetti:
# apt-get install joe   (Model_k 1.2 non ha un editor :) )
# ...

Quando abbiamo finito, usciamo dal sistema
# (Se avete modificato /etc/resolv.conf, cancellatelo e rimettete il link.)
# umount /proc
# exit


Ora dobbiamo comprimere il filesystem smontato. Il processo di boot monta "/KNOPPIX/KNOPPIX" con "cloop". Conosciamo già "loop" - l'abbiamo usato per montare un file con un filesystem all'interno. "cloop" è un "loop" con la (de)compressione, quindi dobbiamo creare un filesystem con "mkisofs" e comprimerlo con uno speciale programma da Knoppix: "create_compressed_fs":

# mkisofs -R /1/KNOPPIX | create_compressed_fs - 65536 > /1/KNOPPIX.2
Come vedete mandiamo in pipe l'output di mkisofs direttamente nel tool di compressione. Fate una copia del file KNOPPIX originale e copiate il risultato di "KNOPPIX.2" in "KNOPPIX/KNOPPIX" nella vostra struttura di directory per il CD-Rom. A questo punto preparate e masterizzate un altro CD e provate la vostra "nuova" variante di Knoppix.

 

Conclusioni

Abbiamo visto che non è poi cosí difficile creare un pratico CD multi-boot, con utili tool che ci possono essere d'aiuto in molte situazioni. Non abbiamo inventato tutte le ruote, ma abbiamo usato ruote inventate da altri con un po' di magia aggiunta.

Abbiamo messo tutto quello che ci serviva in quel CD, quindi abbiamo un backup sottomano - ed è possibile rimasterizzare il CD solo con i tool contenuti nello stesso.

Spero vi sia piaciuto il mio piccolo articolo.

A presto!



Webpages maintained by the LinuxFocus Editor team
© Tjabo Kloppenburg
"some rights reserved" see linuxfocus.org/license/
http://www.LinuxFocus.org
Translation information:
de --> -- : Tjabo Kloppenburg (homepage)
de --> en: Tjabo Kloppenburg (homepage)
en --> it: Alessandro Pellizzari <alex(at)neko.it>

2005-01-14, generated by lfparser_pdf version 2.51