Integrare il supporto a SquashFS+LZMA nel kernel 2.6.28

Mi sono trovato a dover integrare il supporto a SquashFS nel kernel 2.6.28. SquashFS è un filesystem compresso a sola lettura. Nella versione base, esso utilizza unicamente la compressione GZIP, in quanto è l’unica supportata nativamente dal kernel linux. Per ottenere maggiori prestazioni nella compressione, è stato sviluppato un fork il quale fa uso dell’algoritmo LZMA (lo stesso usato da 7zip). Installare questa versione, però, risulta un pò complicato. Per questo ho deciso di postare questa guida, la quale si rifà ad un articolo pubblicato qui.


La versione base di SquashFS supporta unicamente compressione gzip. Per il supporto alla compressione LZMA esiste un fork su http://www.squashfs-lzma.org/ .
Da squashfs-lzma.org bisogna scaricare i seguenti pacchetti:

  • squashfs 3.4
  • LZMA SDK 4.57
  • SquashFS-LZMA 3.4-457

Nella lista sopra riportata, e presente sul sito appena citato, vengono riportati anche come necessari (ovviamente) i sorgenti del kernel. Assumo che li abbiate già scaricati e scompattati in /usr/src/linux-2.6.28.
Una volta copiati tutti i files scaricati in una directory, ad esempio /usr/src/squashfs, avremo 3
files:

  • squashfs3.4.tar.gz
  • lzma457.tar.bz2
  • sqlzma3.4-457.tar.bz2

Scompattiamo il primo file:
tar zxvf squashfs3.4.tar.gz

il quale creerà una directory, squashfs3.4 nella dir /usr/src/squashfs.
Quindi creiamo una directory chiamata lzma457 in /usr/src/squashfs, e vi estraiamo
i files da lzma457.tar.bz2:
mkdir lzma457 && tar -C lzma457 -jxf lzma457.tar.bz2

Quindi estraiamo sqlzma3.4 direttamente in /usr/src/squashfs:
tar xjvf sqlzma3.4-457.tar.bz2

Quindi ci spostiamo nella directory dei sorgenti del kernel:
cd /usr/src/linux-2.6.28
e applichiamo le patch, usando i comandi:
patch -p1 < /usr/src/squashfs/squashfs3.4/kernel-patches/linux-2.6.27-rc4-next/squashfs3.4-patch
patch -p1 < /usr/src/squashfs/sqlzma2k-3.4.patch

Fatto ciò diamo un make menuconfig al kernel e andiamo ad abilitare come modulo (<M>) SquashFS 3.4.
(lo troviamo sotto File systems->Miscellaneous filesystems)

Quindi spostiamoci nella directory /usr/src/squashfs/lzma457 e patchiamo i sorgenti eseguendo il comando:
patch -p1 < ../sqlzma1-457.patch

Fatto ciò, torniamo nella directory /usr/src/squashfs, ed editiamo il file Makefile. Dobbiamo adattare la variabile KVer per la nostra versione kernel:
KVer = linux-2.6.28

Quindi, linkiamo simbolicamente ai sorgenti del kernel la directory squashfs3.4/kernel-patches/ :
ln -s /usr/src/linux-2.6.28 squashfs3.4/kernel-patches/
e patchiamo:
patch -p0 < sqlzma2u-3.4.patch

Ora siamo pronti per compilare. Diamo il comando make

Se tutto è andato a buon fine, siamo pronti per copiare i moduli appena compilati sotto /lib/modules/2.6.28/:
creiamo la directory extra sotto /lib/modules/2.6.28/:
mkdir /lib/modules/2.6.28/extra
copiamo il modulo di squashfs:
cp /usr/src/linux-2.6.28/fs/squashfs/*.ko /lib/modules/2.6.28/extra/
quindi copiamo i moduli sqlzma e unlzma:
cp lzma457/C/Compress/Lzma/kmod/*.ko /lib/modules/2.6.28/extra/
infine, copiamo i tools di squashfs:
cp squashfs3.4/squashfs-tools/mksquashfs /sbin/mksquashfs.lzma

Quasi finito! Refreshiamo le dipendenze dei moduli del kernel:
depmod -ae

e proviamo a caricare il modulo squashfs:
modprobe squashfs

All done! Se proviamo ad avere la lista dei moduli caricati con lsmod, dovremmo quindi trovare, tra gli altri, squashfs, sqlzma, unlzma.
Per un’ulteriore sicurezza, proviamo a leggere la lista dei filesystems supportati dal kernel, dando cat /proc/filesystems. In fondo alla lista, dovremmo trovare “squashfs”.

Spero che questa mia esperienza con squashfs possa tornarvi utile.

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...