Differenze tra le versioni di "Linux minimale per PC i386/i486"

Da GolemWiki.
Jump to navigation Jump to search
 
(34 versioni intermedie di 2 utenti non mostrate)
Riga 1: Riga 1:
Esistono decine di distribuzioni Linux leggere, studiate appositamente per girare su hardware obsoleto
+
=Distribuzioni per i386-i486=
* [http://www.connochaetos.org ConnochaetOS]
+
Per il recupero di macchine particolarmente vecchie esistono delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.
* [http://www.damnsmalllinux.org Damn Small]
 
* [http://www.puppylinux.com Puppy]
 
* [http://www.slitaz.org SliTaz]
 
* [http://www.tinycorelinux.com Tiny Core]
 
  
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.
+
NB: i386 non più supportato dal kernel 3.8 (2012), i486 dal kernel 7.1
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.
 
  
Su Internet se ne possono trovare di già pronte
+
{| class="wikitable sortable"
* [http://www.fdlinux.com/download.php Fd Linux]
+
! Distribuzione
* [http://www.zelow.no/floppyfw/ floppyfw]
+
! Versione Kernel
* [http://chris.silmor.de/hal91/ HAL91]
+
! Supporto avvio
* [http://www.micheleandreoli.it/mulinux/ MuLinux]
+
! CPU minima
* [http://smartlinux.sourceforge.net S.M.A.R.T.]
+
! RAM minima
* [http://www.superant.com/smalllinux/ Small Linux]
+
! Uso ideale
* [http://www.toms.net/rb/ tomsrtbt]
 
* [http://sourceforge.net/projects/trinux/files/ Trinux]
 
* [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.
+
|-
 +
| [http://delicate-linux.net/ DeLi(cate) Linux]
 +
| 2.4.37.11
 +
| CDROM
 +
| i386
 +
| 8 MB (console) - 64 MB (GUI)
 +
| Trashware
  
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.
+
|-
L'ultima versione disponibile e scaricabile da questo [http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2 indirizzo].
+
| [http://www.fdlinux.com/download.php FD Linux]
 +
| 2.4.20
 +
| 1 floppy
 +
| 386SX
 +
| 4 MB
 +
| DOS/Linux compatto
  
La procedura che utilizzeremo è di fatto analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...
+
|-
 +
| [http://www.zelow.no/floppyfw floppyfw]
 +
| 2.4.37.11
 +
| 1 floppy
 +
| 386SX
 +
| 12 MB
 +
| Router/firewall embedded (iptables)
  
 +
|-
 +
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]
 +
| 2.0.39
 +
| 1 floppy
 +
| i386
 +
| 8 MB
 +
| Network solo con scheda NE2000 ISA
  
Scompattiamo buildroot
+
|-
$ tar -xjvf buildroot-snapshot.tar.bz2
+
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]
 +
| 2.0.36
 +
| 1+ floppy modulari
 +
| 386SX
 +
| 4 MB
 +
| Recupero PC vintage
  
Entriamo nella directory principale
+
|-
$ cd buildroot
+
| [http://www.tinycorelinux.com Tiny Core Linux]
 +
| 6.18.2
 +
| CDROM
 +
| i486DX
 +
| 80 MB
 +
| Minimalismo estremo, appliance
  
Configuriamo il toolchain
+
|-
  $ make menuconfig
+
| [https://sourceforge.net/projects/zool5remastered/ Zool]
 +
| 2.4.37.11
 +
| 1 floppy
 +
| i386
 +
| 12 MB
 +
| Networking completo (httpd, ftpd, telnetd)
 +
|}
 +
 
 +
=Distribuzioni per i586-i686=
 +
{| class="wikitable sortable"
 +
! Distribuzione Linux
 +
! Versione Kernel
 +
! CPU minima
 +
! RAM minima
 +
! Uso ideale
 +
 
 +
|-
 +
| [http://alpinelinux.org Alpine]
 +
| 6.18.1-lts
 +
| i686
 +
| 128 MB (console)
 +
| Server Minimali, Container
 +
 
 +
|-
 +
| [http://www.damnsmalllinux.org Damn Small Linux 2024]
 +
| 5.10.188
 +
| i686
 +
| 128 MB (console)
 +
| Desktop leggero
 +
 
 +
|-
 +
| [http://www.puppylinux.com Puppy]
 +
| 6.6.137
 +
| i686
 +
| 128 MB (console)
 +
| Desktop leggero (Slackware 15 base)
 +
 
 +
|-
 +
| [http://www.slitaz.org SliTaz]
 +
| 3.16.55
 +
| i686
 +
| 64 MB (console) - 256 MB (GUI)
 +
| Desktop leggero
 +
 
 +
|}
 +
 
 +
{| class="wikitable sortable"
 +
! BSD
 +
! Versione
 +
! CPU minima
 +
! RAM minima
 +
! Uso ideale
 +
 
 +
|-
 +
| [http://www.openbsd.org OpenBSD]
 +
| 7.8
 +
| i586
 +
| 32 MB (console)
 +
| Server/router
 +
 
 +
|-
 +
| [http://www.netbsd.org NetBSD]
 +
| 10
 +
| i586
 +
| 64 MB (console)
 +
| Server/router
 +
 
 +
|}
  
Indichiamo:
+
Se si cerca un'esperienza desktop per un Pentium 100-200Mhz con 32-64 MB RAM ci si dovrà rassegnare a recuperare una distribuzione dell'epoca come [https://archive.org/download/mandrake-7.2-i386_202304/mandrake-7.2-i386.iso Mandrake 7.2]
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 (es. dropbear, un client/server ssh)
 
il root filesystem di destinazione
 
  
Come filesystem esistono varie opzioni, tra le quali ext2 compresso con bzip2 o lzma.
+
=Buildroot=
Con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, il sistema però necessiterà di maggiore memoria (RAM) per caricarli.
+
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati, driver o applicativi mancanti.
  
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.
+
In questi casi la soluzione più rapida è quella di costruirsi un sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), applicazioni e l'indispensabile busybox.
  
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.
+
Scompattare il tool
 +
$ tar -xzvf buildroot-2026.02.tar.gz
  
'''Per poter caricare correttamente il prompt del login è necessario sostituire'''
+
Entrare nella directory principale
  '''ttyS0 con tty1 nelle opzioni di configurazione del getty.'''
+
  $ cd buildroot-2026.02/
  
Configuriamo busybox selezionando i programmi di cui abbiamo bisogno
+
==BusyBox==
 +
Configurare busybox selezionando i programmi che si ritengono necessari
 
  $ make busybox-menuconfig
 
  $ make busybox-menuconfig
  
Creiamo un kernel ridotto all’osso
+
==Kernel==
 +
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
 +
 
 +
* Processor type and features-> Support for your processor
 +
 
 +
* General setup-> kernel support for ELF binaries
 +
 
 +
* 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 (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)
 +
 
 +
* Iptables se si necessita di un firewall
 +
 
 +
* Un driver IDE generico (generic ATA) su libata
 +
 
 +
* Block devices-> Normal PC floppy disk support, se ci interesse il supporto al floppy
 +
 
 +
 
 +
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.
 +
 
 +
 
 +
==Configurazione generale==
 +
$ make menuconfig
 +
 
 +
Indicare:
 +
 
 +
* Architettura di destinazione (i386, i486, i586…)
 +
 
 +
* Opzioni di compilazione
 +
 
 +
* Versione del kernel da usare
 +
 
 +
* Configurazione di partenza del kernel
 +
Kernel  ---> Kernel configuration (Use the architecture default configuration)
 +
 
 +
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)
 +
 
 +
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari
  
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.
+
===Filesystem images===
 +
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB).  
  
Una volta configurato tutto possiamo procedere con la compilazione
+
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.
+
===output===
 
+
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.
Nella directory buildroot/output/images troveremo il prodotto finito, pronto per essere utilizzato.
+
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.
Si tratterà di 2 o 3 file: bzImage, rootfs.i486.ext2 e la sua versione compressa rootfs.i486.ext2.bz2.
 
Controlliamo le dimensioni dei file bzImage e rootfs.i486.ext2.bz2, dobbiamo accertarci che non siano eccessivamente grandi altrimenti non entreranno su un floppy.
 
  
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.
+
==Immagine per floppy disk==
 +
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
 
  $ 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
 
  $ sudo mkdir /mnt/floppy
 
  $ sudo mkdir /mnt/floppy
  
Montate il floppy
+
Montare il floppy
 
  $ sudo 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
 
  $ sudo cp buildroot/output/images/bzImage /mnt/floppy
 
  $ sudo cp buildroot/output/images/bzImage /mnt/floppy
 
  $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /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:
$ sudo cd /mnt/floppy
+
 
Con un editor di testo (es. nano) create il file syslinux.cfg
+
$ sudo apt-get install syslinux
  $ sudo nano syslinux.cfg
+
per sistemi Debian-based
Scrivere 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 116: Riga 253:
 
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…
 
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…
  
Installiamo il bootloader sul floppy
+
Installare il bootloader sul floppy
 
  $ sudo syslinux /dev/fd0
 
  $ sudo syslinux /dev/fd0
  
Smontiamolo e godiamoci il nostro nuovo floppy
+
Smontare il floppy
 
  $ cd
 
  $ cd
 
  $ sudo umount /mnt/floppy
 
  $ sudo 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
+
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 mount /mnt/floppy
 
  $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma
 
  $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma
Riga 140: Riga 277:
 
  $ sudo umount /mnt/floppy
 
  $ sudo umount /mnt/floppy
  
 +
==Immagine per hard disk==
 +
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale
 +
dd if=/dev/zero of=output/images/486linux.img bs=1M count=250
 +
 +
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati
 +
# losetup -Pf 486linux.img
 +
# mkfs.ext2 /dev/loop0p1
 +
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.
 +
# mkfs.ext2 -m 0 -O none /dev/loop0p1
 +
 +
Montiamo il tutto
 +
# mount /dev/loop0p1 /mnt/img
 +
 +
Copiamoci il filesystem ed il kernel
 +
# tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img
 +
# mkdir -p /mnt/img/boot
 +
# cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage
 +
 +
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.
 +
sudo pacman -S syslinux
 +
sudo extlinux --install /mnt/img/boot/
 +
 +
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)
 +
DEFAULT linux
 +
timeout 5
 +
prompt 1
 +
LABEL linux
 +
    KERNEL /boot/bzImage
 +
    APPEND root=/dev/sda1 ro
 +
 +
===Tastiera italiana===
 +
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox
 +
# loadkeys -qb it > it.bmap
 +
# mv it.bmap output/target/etc/
 +
# make
 +
 +
Possiamo creare uno script d'avvio tipo per far caricare automaticamente la tastiera italiana (ricordatevi di renderlo eseguibile).
 +
 +
'''/etc/init.d/S40keyboard'''
 +
#!/bin/sh
 +
loadkmap < /etc/it.bmap
 +
 +
===Hotplug===
 +
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio
 +
 +
'''/etc/init.d/S10mdev'''
 +
#!/bin/sh
 +
case "$1" in
 +
    start)
 +
        echo "Starting mdev..."
 +
        # Scansiona /sys per creare i device node per l'hardware già presente
 +
        /sbin/mdev -s
 +
        # Questo è il "coldplug": trova tutti i moduli dell'hardware già presente e li carica
 +
        echo "Loading kernel modules for existing hardware..."
 +
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq
 +
        ;;
 +
    stop)
 +
        echo "Stopping mdev..."
 +
        ;;
 +
    *)
 +
        echo "Usage: $0 {start|stop}"
 +
        exit 1
 +
        ;;
 +
esac
 
[[Category:howto]]
 
[[Category:howto]]

Versione attuale delle 09:02, 23 mag 2026

Distribuzioni per i386-i486

Per il recupero di macchine particolarmente vecchie esistono delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.

NB: i386 non più supportato dal kernel 3.8 (2012), i486 dal kernel 7.1

Distribuzione Versione Kernel Supporto avvio CPU minima RAM minima Uso ideale
DeLi(cate) Linux 2.4.37.11 CDROM i386 8 MB (console) - 64 MB (GUI) Trashware
FD Linux 2.4.20 1 floppy 386SX 4 MB DOS/Linux compatto
floppyfw 2.4.37.11 1 floppy 386SX 12 MB Router/firewall embedded (iptables)
HAL91 2.0.39 1 floppy i386 8 MB Network solo con scheda NE2000 ISA
muLinux 2.0.36 1+ floppy modulari 386SX 4 MB Recupero PC vintage
Tiny Core Linux 6.18.2 CDROM i486DX 80 MB Minimalismo estremo, appliance
Zool 2.4.37.11 1 floppy i386 12 MB Networking completo (httpd, ftpd, telnetd)

Distribuzioni per i586-i686

Distribuzione Linux Versione Kernel CPU minima RAM minima Uso ideale
Alpine 6.18.1-lts i686 128 MB (console) Server Minimali, Container
Damn Small Linux 2024 5.10.188 i686 128 MB (console) Desktop leggero
Puppy 6.6.137 i686 128 MB (console) Desktop leggero (Slackware 15 base)
SliTaz 3.16.55 i686 64 MB (console) - 256 MB (GUI) Desktop leggero
BSD Versione CPU minima RAM minima Uso ideale
OpenBSD 7.8 i586 32 MB (console) Server/router
NetBSD 10 i586 64 MB (console) Server/router

Se si cerca un'esperienza desktop per un Pentium 100-200Mhz con 32-64 MB RAM ci si dovrà rassegnare a recuperare una distribuzione dell'epoca come Mandrake 7.2

Buildroot

Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati, driver o applicativi mancanti.

In questi casi la soluzione più rapida è quella di costruirsi un sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare Buildroot, un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), applicazioni e l'indispensabile busybox.

Scompattare il tool

$ tar -xzvf buildroot-2026.02.tar.gz

Entrare nella directory principale

$ cd buildroot-2026.02/

BusyBox

Configurare busybox selezionando i programmi che si ritengono necessari

$ make busybox-menuconfig

Kernel

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-> 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 (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)
  • Iptables se si necessita di un firewall
  • Un driver IDE generico (generic ATA) su libata
  • Block devices-> Normal PC floppy disk support, se ci interesse il supporto al floppy


Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.


Configurazione generale

$ make menuconfig

Indicare:

  • Architettura di destinazione (i386, i486, i586…)
  • Opzioni di compilazione
  • Versione del kernel da usare
  • Configurazione di partenza del kernel
Kernel  ---> Kernel configuration (Use the architecture default configuration)
  • Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)
  • Si consiglia l'opzione di compilazione gcc -Os al fine di ridurre al minimo la grandezza dei binari

Filesystem images

Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema necessiterà di maggiore RAM per caricarli (70-80MB).

Terminata la fase di configurazione si può procedere con la compilazione

$ make

output

Nella directory buildroot-2026.02/output/images risiede il prodotto finito. Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.

Immagine per floppy disk

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

Immagine per hard disk

Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale

dd if=/dev/zero of=output/images/486linux.img bs=1M count=250

Montiamo l'immagine per poter formattare il filesystem e copiarci i dati

# losetup -Pf 486linux.img
# mkfs.ext2 /dev/loop0p1

Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.

# mkfs.ext2 -m 0 -O none /dev/loop0p1

Montiamo il tutto

# mount /dev/loop0p1 /mnt/img

Copiamoci il filesystem ed il kernel

# tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img
# mkdir -p /mnt/img/boot
# cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage

Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.

sudo pacman -S syslinux
sudo extlinux --install /mnt/img/boot/

Configuriamo il bootloader (/mnt/boot/syslinux.cfg)

DEFAULT linux
timeout 5
prompt 1
LABEL linux
   KERNEL /boot/bzImage
   APPEND root=/dev/sda1 ro

Tastiera italiana

Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox

# loadkeys -qb it > it.bmap
# mv it.bmap output/target/etc/
# make

Possiamo creare uno script d'avvio tipo per far caricare automaticamente la tastiera italiana (ricordatevi di renderlo eseguibile).

/etc/init.d/S40keyboard

#!/bin/sh
loadkmap < /etc/it.bmap

Hotplug

Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio

/etc/init.d/S10mdev

#!/bin/sh
case "$1" in
   start)
       echo "Starting mdev..."
       # Scansiona /sys per creare i device node per l'hardware già presente
       /sbin/mdev -s
       # Questo è il "coldplug": trova tutti i moduli dell'hardware già presente e li carica
       echo "Loading kernel modules for existing hardware..."
       find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq
       ;;
   stop)
       echo "Stopping mdev..."
       ;;
   *)
       echo "Usage: $0 {start|stop}"
       exit 1
       ;;
esac