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

Da GolemWiki.
Jump to navigation Jump to search
Riga 146: Riga 146:
  
 
=Buildroot=
 
=Buildroot=
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.
+
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione 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 [http://buildroot.uclibc.org Buildroot], un tarball che permette la cross-compilazione di un ambiente Linux completo usando le leggerissime librerie uClibc o musl e l'eseguibile busybox.
+
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [http://buildroot.org Buildroot], un tarball che permette la cross-compilazione di un ambiente Linux (con glibc, uclibc-ng o musl) 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].
 
  
 
Questa procedura è 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...
Riga 158: Riga 157:
  
 
Entrare nella directory principale
 
Entrare nella directory principale
  $ cd buildroot
+
  $ cd buildroot-snapshot
  
Configurare il toolchain
+
==BusyBox==
  $ make menuconfig
+
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
  
Indicare:
+
* Character devices-> Virtual terminal
  
architettura di destinazione (i386, i486, i586…)
+
* Character devices-> Support for console on virtual terminal
  
opzioni di compilazione
+
* Console drivers-> VGA text console
  
versione del kernel da usare
+
* General setup-> PCI support
  
impostare la configurazione di default del kernel
+
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)
Kernel  ---> Kernel configuration (Use the architecture default configuration)
 
  
eventuali altri programmi non presenti in busybox (es.: dropbear, nano, iptables, mutt)
+
* Iptables se si necessita di un firewall
  
root filesystem di destinazione
+
* Un driver IDE generico (generic ATA) su libata
  
Esistono varie tipologie di filesystem tra cui scegliere, tra queste l'ext2 compresso con bzip2 o lzma.
+
* Block devices-> Normal PC floppy disk support, se ci interesse il supporto al floppy
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'''
+
Per risparmiare spazio si può comprimere l'immagine del kernel (bzImage) con un algoritmo di compressione come lzma, ma questo aumenterà il consumo di RAM. Per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.
'''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
+
==Configurazione generale==
  $ make linux-menuconfig
+
  $ make 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.
+
Indicare:
  
Code maturity level-> Prompt for development
+
* Architettura di destinazione (i386, i486, i586…)
  
Processor type and features-> Support for your processor
+
* Opzioni di compilazione
  
General setup-> kernel support for ELF binaries
+
* Versione del kernel da usare
  
Block devices-> Normal PC floppy disk support
+
* Configurazione di partenza del kernel
 +
Kernel  ---> Kernel configuration (Use the architecture default configuration)
  
Block devices-> RAM disk support
+
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, mutt)
  
File systems-> /proc filesystem, tmpfs, ext2
+
root filesystem di destinazione
  
Character devices-> Virtual terminal
+
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.
  
Character devices-> Support for console on virtual terminal
+
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.
  
Console drivers-> VGA text console
+
'''Per poter caricare correttamente il prompt del login è necessario sostituire'''
 +
'''ttyS0 con tty1 nelle opzioni di configurazione del getty.'''
  
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
 
Terminata la fase di configurazione si può procedere con la compilazione

Versione delle 21:37, 14 mag 2026

Distribuzioni per i486-i586

Distro CPU minima RAM minima Disco/ISO Uso ideale
DeLi Linux i486 8–16 MB ~200 MB installazione Retrocomputing puro, PC anni '90
SliTaz i486 24–64 MB ISO 30–60 MB Pentium II/III molto leggeri
Tiny Core Linux i486DX 46 MB 20–200 MB Minimalismo estremo, appliance
Puppy Linux Pentium II 128-256 MB 300–500 MB ISO Desktop leggero usabile
Damn Small Linux 2024 i686 256-512 MB ~700 MB ISO Hardware datato ma moderno

Floppy Linux

Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.

NB: su Linux è stato rimosso il supporto al 386 nel 2012 (kernel 3.8) ed al 486 nel 2026 (kernel 7.1)

Distribuzione Supporto avvio CPU minima RAM minima Dimensione tipica Uso ideale
FLOPPINUX 1 floppy 386 4–8 MB 1.44 MB Mini Linux educativo/sperimentale
Fluxflop 1–2 floppy 386 ~4 MB 1.44–2.88 MB Networking minimale
FD Linux 1 floppy 386SX 4 MB 1.44 MB DOS/Linux compatto
floppyfw 1 floppy 386 8 MB 1.44 MB Router/firewall embedded
HAL91 1 floppy 386 2–4 MB 1.44 MB Esperimenti ultra-minimali
muLinux 1+ floppy modulari 386SX 4 MB 1.44 MB base Recupero PC vintage
S.M.A.R.T. Linux 1 floppy 386 4–8 MB 1.44 MB Toolkit floppy generale
Small Linux 1–2 floppy 386 4–8 MB ~2 MB Sistema Linux minimale
tomsrtbt 1 floppy 386SX 8 MB 1.72 MB Rescue disk
Trinux 1–2 floppy 486 8–16 MB 1.44–3 MB Sicurezza/network auditing
Zool 1 floppy 386 ~4 MB 1.44 MB Linux ultra-compatto

Buildroot

Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.

In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare Buildroot, un tarball che permette la cross-compilazione di un ambiente Linux (con glibc, uclibc-ng o musl) 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-snapshot

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


Per risparmiare spazio si può comprimere l'immagine del kernel (bzImage) con un algoritmo di compressione come lzma, ma questo aumenterà il consumo di RAM. 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, mutt)

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.



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.