Floppy Linux
Esistono decine di distribuzioni Linux leggere, studiate appositamente per girare su hardware obsoleto
A volte però, quando si tenta di recuperare qualche macchina particolarmente vecchia (magari per trasformarla in router, server web o proxy), anche queste soluzioni possono risultare inadeguate. Ecco che possono venire in nostro soccorso delle mini distribuzioni Linux prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.
Soluzioni preconfezionate (come quelle sopra elencate) possono talvolta non rispondere completamente alle nostre esigenze. Spesso hanno kernel datati (2.0, 2.2) o magari mancano proprio dell'applicazione o del driver di cui abbiamo bisogno.
In questi casi l'unica strada percorribile è quella di costruirsi il proprio floppy Linux personalizzato. Per farlo il metodo più semplice è utilizzare Buildroot, un tarball che permette la cross-compilazione di un ambiente Linux completo usando le leggerissime librerie uClibc e l'eseguibile busybox. L'ultima versione disponibile e scaricabile da questo indirizzo.
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...
Scompattare il buildroot
$ tar -xjvf buildroot-snapshot.tar.bz2
Entrare nella directory principale
$ cd buildroot
Configurare il toolchain
$ make menuconfig
Indicare:
architettura di destinazione (i386, i486, i586…)
opzioni di compilazione
versione del kernel da usare
eventuali altri programmi non presenti in busybox (es. dropbear, un client/server ssh)
root filesystem di destinazione
Esistono varie tipologie di filesystem tra cui scegliere, tra queste l'ext2 compresso con bzip2 o lzma. Con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema necessiterà di maggiore memoria (RAM) per caricarli.
In seguito ad alcune prove ho riscontrato che lo stesso disco compresso con lzma necessitava di almeno 74 MB di RAM per completare il boot, mentre compresso con bzip2 si accontentava di 20 MB.
Se il PC che che avete a disposizione non ha almeno 70-80 MB di RAM (cosa rarissima per un i486) è preferibile optare per la compressione con bzip2, se la quantità di memoria non è un problema la compressione con lzma è sicuramente preferibile.
Per poter caricare correttamente il prompt del login è necessario sostituire ttyS0 con tty1 nelle opzioni di configurazione del getty.
Configuriamo busybox selezionando i programmi di cui abbiamo bisogno
$ make busybox-menuconfig
Creiamo un kernel ridotto all’osso
$ make linux-menuconfig
Inseriamo unicamente ciò di cui non possiamo fare a meno:
Code maturity level-> Prompt for development
Processor type and features-> Support for your processor
General setup-> kernel support for ELF binaries
Block devices-> Normal PC floppy disk support
Block devices-> RAM disk support
File systems-> /proc filesystem, tmpfs, ext2
Character devices-> Virtual terminal
Character devices-> Support for console on virtual terminal
Console drivers-> VGA text console
General setup-> PCI support
I driver delle schede di rete che volete supportare, iptables se ne avete bisogno, un driver ide generico se volete montare un hard disk ATA.
Per risparmiare qualche decina di KB è preferibile comprimere l'immagine del kernel (bzImage) con l’algoritmo di compressione lzma.
Una volta configurato tutto possiamo procedere con la compilazione
$ make
Se qualcosa dovesse andare storto normalmente è sufficiente identificare il programma incriminato e vedere se cambiando versione la compilazione va buon fine.
Nella directory buildroot/output/images risiede il prodotto finito. Si tratterà di 2 o 3 file: bzImage, rootfs.i486.ext2 e la sua versione compressa rootfs.i486.ext2.lzma. Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy. Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.
$ sudo mknod /dev/fd0u1722 b 2 60 $ fdformat /dev/fd0u1722 $ mkfs.vfat /dev/fd0u1722
Se non presente creare un mount point per il floppy
$ sudo mkdir /mnt/floppy
Montare il floppy
$ sudo mount /dev/fd0u1722 /mnt/floppy
Copiarvi i due file
$ sudo cp buildroot/output/images/bzImage /mnt/floppy $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.
Se syslinux non fosse presente sul vostro sistema installatelo con:
$ sudo apt-get install syslinux
per sistemi Debian-based
O con
# pacman -S syslinux
su Arch Linux
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg
$ sudo nano /mnt/floppy/syslinux.cfg
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:
default start timeout 5 prompt 1 label start kernel bzImage append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…
Installare il bootloader sul floppy
$ sudo syslinux /dev/fd0
Smontare il floppy
$ cd $ sudo umount /mnt/floppy
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:
$ sudo mount /mnt/floppy $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma $ sudo lzma -d rootfs.i486.ext2.lzma $ sudo mkdir /mnt/tmp $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp $ cd /mnt/tmp
Effettuare le modifiche e poi smontare il tutto
$ cd $ sudo umount /mnt/tmp
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio
$ sudo lzma -c9 rootfs.i486.ext2 > rootfs.i486.ext2.lzma $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy $ sudo umount /mnt/floppy
Un floppy già pronto con le seguenti caratteristiche e presente qui
- Linux kernel 3.2.9
- Busybox 1.19.4
- Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.
- Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5"
- Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.