2. Preparativi per SquashFS

2.1. Ottenere SquashFS

La pagina web di SquashFS è all'indirizzo http://squashfs.sourceforge.net/ - Si tratta di un changelog, che contiene le informazioni sull'ultimo rilascio del software ed informazioni generali su SquashFS. E' possibile ottenere l'ultima versione di SquashFS alla pagina web del progetto SquashFS su SourceForge.

SquashFS è anche disponibile con l'algoritmo di compressione Lempel-Ziv-Markov (LZMA) all'indirizzo http://www.squashfs-lzma.org/

2.2. Preparazione di un kernel che supporta SquashFS

Per la lettura del file system SquashFS, è necessario che esso sia supportato dal kernel - proprio come si trattasse di un file system reiserfs o ext3. Bisogna assicurarsi che vi sia una patch appropriata per la versione del kernel che si intende utilizzare nella sotto-directory kernel-patches/linux-2.x.y, all'interno della directory dei sorgenti di SquashFS. Inoltre, si ricordi che, nella maggior parte dei casi, saranno necessari i sorgenti del kernel Linux originale, a cui non siano state applicate patch, rilasciato da kernel.org. Se il codice sorgente del proprio kernel proviene da una distribuzione, potrebbe essere già stato modificato con le patch proprie della distribuzione e l'applicazione della patch di SquashFS quasi certamente non potrà funzionare, dato che le patch di SquashFS sono fatte per i kernel Linux originali. Tuttavia alcune distribuzioni rendono disponibili i moduli del kernel per SquashFS ed i relativi strumenti sotto forma di pacchetto nei repository. Se si pensa di utilizzare tali pacchetti, non sarà necessario applicare la patch di SquashFS al kernel e neppure compilare gli strumenti a partire dal codice sorgente. In tal caso, è comunque necessario assicurarsi di acquisire dalla distribuzione il modulo del kernel appropriato alla propria architettura. Si noti che, in questo modo, la procedura d'installazione è più semplice, ma non si ha alcun controllo sulla configurazione dei parametri del kernel, nel caso si voglia utilizzare SquashFS per scopi particolari (ad esempio per sistemi integrati).

2.2.1. Applicare la patch ai sorgenti del kernel

Ottenuto il codice sorgente del kernel e la relativa patch per SquashFS, (si assuma che i sorgenti del kernel siano collocati nella directory /usr/src/linux e che il codice sorgente di SquashFS sia in /usr/src/SquashFS) tutto ciò che si deve fare è:

Portarsi nella directory dei sorgenti di SquashFS e copiare la patch per il kernel (assumendo che il nome del file sia SquashFS-patch) in /usr/src/linux.


	bash# cd /usr/src/SquashFS
	bash# cp linux-2.x.y/SquashFS-patch /usr/src/linux

Portarsi nella directory dei sorgenti del kernel /usr/src/linux:


	bash# cd /usr/src/linux

Nota: Le ulteriori procedure relative alla preparazione del kernel saranno tutte svolte all'interno di questa directory. I percorsi saranno quindi espressi relativamente a /usr/src/linux.

Ora, applicare la patch di SquashFS al codice sorgente del kernel:


	bash# patch -p1 < SquashFS-patch

2.2.2. Compilazione per un kernel 2.6.x

Pulire e preparare i sorgenti del kernel:


	bash# make distclean
	bash# make mrproper

Configurare il kernel utilizzando il proprio metodo preferito (config/menuconfig/xconfig/gconfig):


	bash# make menuconfig

  1. Nella sezione"File systems", sotto-sezione "Miscellaneous file systems", abilitare l'opzione "Squashed file system", sotto forma di modulo o compilato nel kernel. E' obbligatorio compilare il supporto di SquashFS all'interno del kernel solo se si intende utilizzare ramdisk iniziali (initrd) compressi con SquashFS.

  2. Nella stessa sotto-sezione NON si abiliti l'opzione "Additional option for memory-constrained system", a meno che non si stia configurando un kernel per un sistema integrato.

  3. Nel caso si voglia utilizzare un ramdisk iniziale compresso con SquashFS, selezionare l'opzione "Initial RAM disk support" nella sotto-sezione "Block devices" della sezione "Device drivers".

  4. Se si vuole eseguire il mount del file system SquashFS attraverso un dispositivo di loopback, abilitare il supporto "Loopback device support" nella sotto-sezione "Block devices" della sezione "Device drivers"

Ora si potrà compilare il kernel ed i moduli:


	bash# make

2.2.3. Compilazione per un kernel 2.4.x

Configurare il kernel:


	bash# make menuconfig

  1. Nella sezione "File systems" abilitare l'opzione "Squashed filesystem", sotto forma di modulo o compilandone il supporto nel kernel. E' obbligatorio compilare SquashFS all'interno del kernel solo se si intende utilizzare ramdisk inziali (initrd).

  2. Nel caso si voglia utilizzare un ramdisk inziale, abilitare "Initial RAM disk support" nella sezione "Block devices".

  3. Se si vuole eseguire il mount del file system SquashFS attraverso un dispositivo di loopback, abilitare " Loopback device support " nella sezione "Block devices ".

Ora è possibile compilare il kernel ed i moduli:


	bash# make dep
	bash# make bzImage
	bash# make modules

2.2.4. Installazione e test del kernel

E' giunto il momento di installare il nuovo kernel con il supporto di SquashFS. Le istruzioni sotto riportate serviranno ad installare ed avviare il kernel sulla macchina host. Si potrà volerlo installare e testare sul sistema di destinazione.

Si assume che il kernel sia stato compilato per una architettura x86, e che l'immagine compressa del kernel sia collocata nella sotto-directory arch/i386/boot/ della directory dei sorgenti del kernel. Ora, copiare il kernel nella directory /boot (se si vuole, rinominandolo bzImage-sqsh per convenienza):


	bash# cp arch/i386/boot/bzImage /boot/bzImage-sqsh

Non dimenticare di installare i moduli del kernel se presenti:


	bash# make modules_install

Modificare il file di configurazione del boot loader per includere il nuovo kernel ed installare (aggiornare) il boot loader. Ora è possibile riavviare con il nuovo kernel. Al riavvio verificare che tutto sia andato bene:


	bash# cat /proc/filesystems

Oppure, se il supporto per SquashFS è stato compilato come modulo del kernel:


	bash# insmod SquashFS
	bash# cat /proc/filesystems

Se è visibile la linea di SquashFS tra altri file system, significa che SquashFS è supportato correttamente dal proprio kernel.

2.3. Compilare gli strumenti di SquashFS

Ora sarà necessario compilare mksquashfs - lo strumento per creare file system compressi e unsquashfs, che serve ad estrarre file da un file system SquashFS esistente.


	bash# cd /usr/src/SquashFS/SquashFS-tools

Compilare ed installare gli strumenti:


	bash# make
	bash# cp mkSquashFS /usr/sbin
	bash# cp unSquashFS /usr/sbin

Se tutto è andato bene, digitando mksquashfs oppure unsquashfs al prompt della shell, dovrebbe essere mostrato il messaggio di utilizzo.

2.4. Installare SquashFS su Debian

Se si utilizza Debian (o un'altra distribuzione Linux) è possibile ottenere il modulo di SquashFS ed i relativi tool dai repository. Con Debian, si devono installare il modulo appropriato del kernel e gli strumenti di SquashFS con i seguenti comandi:

(Assumendo che la propria architettura sia x86)


	bash# apt-get install SquashFS-modules-2.6-486 

	bash# apt-get install SquashFS-tools

Ora, caricare il modulo di SquashFS per il kernel Linux e se caricato in modo corretto, si dovrebbe poterlo trovare nel elenco relativo


	bash# modprobe SquashFS
	
	bash# lsmod|grep squash
	squashfs              39620  0

	

Quindi, se è necessario caricare il modulo di SquashFS all'avvio del sistema, aggiungere la relativa voce al file /etc/modules


	bash# echo squashfs >> /etc/modules

Notare che al momento della scrittura di questo HOWTO, i pacchetti Debian (Etch. 4.0 r2) sono relativi al rilascio 3.1 di SquashFS. Alcune opzioni e caratteristiche recenti della versione 3.3 del software possono non essere supporate. Si veda la sezione seguente per approfondimenti.