Differenze tra le versioni di "Floppy Linux"

Da GolemWiki.
Jump to navigation Jump to search
 
(9 versioni intermedie di 2 utenti non mostrate)
Riga 1: Riga 1:
 
Esistono decine di distribuzioni Linux leggere, studiate appositamente per girare su hardware obsoleto
 
Esistono decine di distribuzioni Linux leggere, studiate appositamente per girare su hardware obsoleto
* [http://www.connochaetos.org ConnochaetOS]
+
 
 
* [http://www.damnsmalllinux.org Damn Small]
 
* [http://www.damnsmalllinux.org Damn Small]
 +
* [https://archiveos.org/deli/ DeLi Linux]
 
* [http://www.puppylinux.com Puppy]
 
* [http://www.puppylinux.com Puppy]
 
* [http://www.slitaz.org SliTaz]
 
* [http://www.slitaz.org SliTaz]
Riga 7: Riga 8:
  
 
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.
 
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 alcune distribuzioni Linux prive di ambiente grafico talmente compatte da poter essere contenute da un unico semplice floppy disk da 1,44 MB.
+
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.
  
Su Internet se ne possono trovare di già pronte
 
 
* [http://www.fdlinux.com/download.php Fd Linux]
 
* [http://www.fdlinux.com/download.php Fd Linux]
 
* [http://www.zelow.no/floppyfw/ floppyfw]
 
* [http://www.zelow.no/floppyfw/ floppyfw]
 
* [http://chris.silmor.de/hal91/ HAL91]
 
* [http://chris.silmor.de/hal91/ HAL91]
* [http://www.micheleandreoli.it/mulinux/ MuLinux]
+
* [http://micheleandreoli.org/public/Software/mulinux/ MuLinux]
 
* [http://smartlinux.sourceforge.net S.M.A.R.T.]
 
* [http://smartlinux.sourceforge.net S.M.A.R.T.]
* [http://www.superant.com/smalllinux/ Small Linux]
+
* [http://distro.ibiblio.org/polypux/external/smalllinux/ Small Linux]
 
* [http://www.toms.net/rb/ tomsrtbt]
 
* [http://www.toms.net/rb/ tomsrtbt]
 
* [http://sourceforge.net/projects/trinux/files/ Trinux]
 
* [http://sourceforge.net/projects/trinux/files/ Trinux]
 
* [http://zoollinux.berlios.de/doku.php Zool]
 
* [http://zoollinux.berlios.de/doku.php Zool]
  
Tuttavia tali soluzioni preconfezionate rispondono alle nostre esigenze, spesso hanno kernel datati (2.0, 2.2), mentre altre volte mancano proprio dell’applicazione o del driver di cui abbiamo bisogno.
+
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, il metodo più semplice è utilizzare [http://buildroot.uclibc.org Buildroot], un tarball che consente la cross-compilazione di un ambiente Linux completo usando le leggerissime librerie uClibc e l'eseguibile busybox.
+
In questi casi l'unica strada percorribile è quella di costruirsi il proprio floppy Linux personalizzato. Per farlo il metodo più semplice è utilizzare [http://buildroot.uclibc.org 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 [http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2 indirizzo].
 
L'ultima versione disponibile e scaricabile da questo [http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2 indirizzo].
  
La procedura che utilizzeremo è di fatto analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...
+
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...
  
  
Scompattiamo buildroot
+
Scompattare il buildroot
 
  $ tar -xjvf buildroot-snapshot.tar.bz2
 
  $ tar -xjvf buildroot-snapshot.tar.bz2
  
Entriamo nella directory principale
+
Entrare nella directory principale
 
  $ cd buildroot
 
  $ cd buildroot
  
Configuriamo il toolchain
+
Configurare il toolchain
 
  $ make menuconfig
 
  $ make menuconfig
  
Indichiamo: l'architettura di destinazione (i386, i486, i586…), le opzioni di compilazione, la versione del kernel che intendiamo usare, l’aggiunta di eventuali programmi non presenti in busybox (io ho aggiunto dropbear, un client/server ssh) ed il root filesystem di destinazione.
 
Come filesystem possiamo scegliere fra varie opzioni, tra le quali ext2 compresso con bzip2 e ext2 compresso con lzma.
 
Ho fatto alcune prove: il mio rootfs compresso con lzma occupava 665 KB, con bzip2 780 KB.
 
Con così poco spazio a disposizione ogni KB è fondamentale, ma mi sono accorto che con lzma il floppy non faceva il boot se il PC non aveva almeno 74 MB di RAM, con bzip2 invece ne bastavano 24. Trovare un i486 con almeno 74 MB di RAM è molto difficile, quindi ho optato per il bzip2. Se però non avete intenzione di usare il floppy su PC così datati potete usare tranquillamente la compressione con lzma.
 
  
  Per poter caricare correttamente il prompt del login è necessario sostituire
+
Indicare:
  il ttyS0 con tty1 nelle opzioni di configurazione del getty.
+
 
 +
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.
 +
 
 +
Se il PC che che avete a disposizione non ha almeno 70-80 MB di RAM è 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
+
Configurare busybox selezionando i programmi che si ritengono necessari
 
  $ make busybox-menuconfig
 
  $ make busybox-menuconfig
  
Creiamo un kernel ridotto all’osso
+
Configurare il kernel per la compilazione
 
  $ make linux-menuconfig
 
  $ 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.
+
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.
 +
 
 +
Code maturity level-> Prompt for development
  
Per risparmiare qualche decina di KB ho compresso l’immagine del kernel (bzImage) con l’algoritmo di compressione lzma, invece che con il solito gzip o bzip2.
+
Processor type and features-> Support for your processor
  
Una volta configurato tutto possiamo procedere con la compilazione
+
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 interessa supportare, iptables se si necessita di un firewall, un driver ide generico per poter montare un hard disk ATA.
 +
 
 +
Per risparmiare spazio è preferibile comprimere l'immagine del kernel (bzImage) con l'algoritmo di compressione lzma.
 +
 
 +
Terminata la fase di configurazione si può procedere con la compilazione
 
  $ make
 
  $ make
  
Se per qualche motivo qualcosa dovesse andare storto, guardate qual è il programma incriminato e provate a vedere se cambiando versione la compilazione va buon fine.
+
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” troveremo il prodotto finito, pronto per essere utilizzato.
+
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.bz2.
+
Si tratterà di 2 o 3 file: bzImage, rootfs.i486.ext2 e la sua versione compressa rootfs.i486.ext2.lzma.
Controlliamo le dimensioni dei file bzImage e rootfs.i486.ext2.bz2, dobbiamo accertarci che non siano eccessivamente grandi altrimenti non entreranno su un floppy.
+
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.
Sfortunatamente i miei file sforavano di 150 KB, così ho dovuto rimediare con un espediente: la formattazione non standard di un floppy a 1.72 MB invece che a 1.44MB.
 
 
  $ sudo mknod /dev/fd0u1722 b 2 60
 
  $ sudo mknod /dev/fd0u1722 b 2 60
 
  $ fdformat /dev/fd0u1722
 
  $ fdformat /dev/fd0u1722
 
  $ mkfs.vfat /dev/fd0u1722
 
  $ mkfs.vfat /dev/fd0u1722
  
Se non avete un mount point per il floppy createlo
+
Se non presente creare un mount point per il floppy
  # mkdir /mnt/floppy
+
  $ sudo mkdir /mnt/floppy
  
Montate il floppy
+
Montare il floppy
  # mount /dev/fd0u1722 /mnt/floppy
+
  $ sudo mount /dev/fd0u1722 /mnt/floppy
  
Così facendo sono riuscito a copiare i due file nel floppy
+
Copiarvi i due file
  # cp buildroot/output/images/bzImage /mnt/floppy
+
  $ sudo cp buildroot/output/images/bzImage /mnt/floppy
  # cp buildroot/output/images/rootfs.i486.ext2.bz2 /mnt/floppy
+
  $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy
  
Ora occorre installare un boot loader sul floppy, dato che è leggero, semplice da usare e che supporta la FAT16 ho deciso di usare syslinux.
+
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.
(Se già non lo avete occorrerà installarlo, su Arch basta il solito pacman -S syslinux)
+
 
Per prima cosa creiamo il file di configurazione
+
Se syslinux non fosse presente sul vostro sistema installatelo con:
# cd /mnt/floppy
+
 
Con un editor di testo create il file syslinux.cfg (io ho usato nano)
+
$ sudo apt-get install syslinux
  # nano syslinux.cfg
+
per sistemi Debian-based
E scrivete qualcosa del tipo:
+
 
 +
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
 
  default start
Riga 103: Riga 134:
 
  label start
 
  label start
 
  kernel bzImage
 
  kernel bzImage
  append initrd=rootfs.i486.ext2.bz2 BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0
+
  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 [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]
 +
 
 +
* Linux kernel 3.2.9
 +
 
 +
* Busybox 1.19.4
  
Se avete usato un altro tipo di filesystem cambiate rootfs.i486.ext2.bz2 in rootfs.i486.ext2.lzma, rootfs.i486.ext2.squashfs…
+
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.
  
Installiamo il bootloader sul floppy
+
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5"
# syslinux /dev/fd0
 
  
Smontiamolo e godiamoci il nostro nuovo floppy
+
* 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.
# cd
 
# umount /mnt/floppy
 
  
Se per qualche ragione dovrete modificare il ramdisk basterà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le dovute modifiche
+
[[Category:howto]]
# mount /mnt/floppy
 
# cp /mnt/floppy/rootfs.i486.ext2.bz2
 
# bzip2 -d rootfs.i486.ext2.bz2
 
# mkdir
 
# mount -o loop rootfs.i486.ext2 /mnt/tmp
 
# cd /mnt/tmp
 
Effettuate le modifiche…
 
e poi smontate il tutto
 
# cd
 
# umount /mnt/tmp
 
Ricomprimete il ramdisk e copiatelo sul floppy per sostituire quello vecchio
 
# bzip2 -c9 rootfs.i486.ext2 > rootfs.i486.ext2.bz2
 
# cp rootfs.i486.ext2.bz2 /mnt/floppy
 
# umount /mnt/floppy
 

Versione attuale delle 10:03, 27 apr 2020

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.

Se il PC che che avete a disposizione non ha almeno 70-80 MB di RAM è 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.

Configurare busybox selezionando i programmi che si ritengono necessari

$ make busybox-menuconfig

Configurare il kernel per la compilazione

$ make linux-menuconfig

Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.

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 interessa supportare, iptables se si necessita di un firewall, un driver ide generico per poter montare un hard disk ATA.

Per risparmiare spazio è preferibile comprimere l'immagine del kernel (bzImage) con l'algoritmo di compressione lzma.

Terminata la fase di configurazione si può 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.