+-----------------------------------------+
              |      muLINUX -- Linux su un floppy      |
              |             Versione 10^-6              | 
              |             (C) 1998 M. Andreoli        |
              +-----------------------------------------+

Questa e' la versione originale in italiano dell'unica documentazione
disponile su muLinux e non e' piu' aggiornata, in favore della
versione SGML in inglese, mantenuta da E. Cavalli.



COS'E' muLinux
---------------

E' una minuscola implementazione di Linux capace di stare
interamente su un floppy e il cui scopo e' dimostrare la potenza e la
scalabilita' del questo sistema operativo.  La sua realizzazione
e' il frutto di una certosina attivita' di taglia-e-cuci e di gzippamento
oltre ogni limite. 

Il kernel e' un 2.0.30 compilato per un 386 e quanto piu' possibile
modulare. I binari (pochi ma buoni) sono in parte emulati, in parte
autocostuiti e in parte rapinati qua e la dalle decine di installazioni
di Linux e di floppy di boot che ho sui miei 3 capienti hard-disk.

Vi chiederete: come ho fatto a scegliere quale binario prendere, quando
ne avevo due dello stesso nome? Semplice: ho preso il piu' piccolo e che
si accontentasse della libc.so.5.

Vi risparmio il racconto di quant'altro di turpe e di immondo ho fatto
per risparmiare spazio: vi basti sapere che mi sono riscritto in C
il comando `expr`, perche' non mi riesciva di capire come mai ci
volessero 50328 byte per fare quello che si puo' fare con 4586, e 
che perfino `grep` l'ho costruito con `sed`.

A CHI E' RIVOLTO
----------------

muLinux e' rivolto non tanto al principiante, che non troverebbe particolare
diletto nella sua interfaccia essenziale e spartana, quanto all'
appassionato di Linux in generale, all'anima curiosa che vuole spulciare
dentro gli script per vedere come mai un 'sendmail' di soli 1216 byte
spedisce davvero la posta e col return-address che vogliamo.

Inoltre, un Linux portatile puo' far sempre comodo, per attivita' di
manutenzione in vari luoghi, a scopo dimostrativo, o anche solo per
vederlo "bootare" di tanto in tanto, senza motivi particolari.
 

COSA SUCCEDE AL BOOT
---------------------

Beh, su questo anch'io, diciamolo pure, ho le idee un po' confuse :) 

Quello che so e' che al boot, il kernel (mulinuz) carica in RAM (loadlin)
la partizione di root (ramdisk.gz, file-system ext2) e come prima azione 
"da vivo" lancia il mio script /linuxrc, il quale si incarica di
scompattare la seconda parte (ram2.bz2) e di
personalizzare la /root in base alla configurazione desiderata 
dall'utente.

Inutile cercarlo, ma non c'e' ne' il superserver inetd, ne' /sbin/init.
Questo significa che, a modem spento, muLinux fa' una certa tristezza,
e' vero: le porte TCP e i services ci sono, ma l'oste e' scappato e
i camerieri si sono licenziati.

Vuoi mettere pero' la sicurezza? Forse muLinux e' il sistema piu'
sicuro al mondo: si puo' solo uscire, ma non entrare :)

Comunque: sto' pensando ad implementare qualche servizio lato server
(vedi in seguito) anche se non so con esattamente che farmene.


IL COMANDO setup
------------------

Per personalizzare la /root muLinux dispone di uno script (`setup`)
in grado di leggere (setup -r) e scrivere (setup -s) sul floppy, 
quindi in maniera permanente,
l'insieme dei dati necessari a configurare in maniera sufficiente 
Linux: il tipo di tastiera, di scheda ethernet, dov'e' attaccato il
mouse, dov'e' attaccato il modem, quali moduli del kernel caricare
ogni volta, il numero di telefono del provider, etc.

Questa seccante orgia di richieste e risposte avviene soltanto
la prima volta che si usa il floppy, grazie a dio. L'utente, comunque,
puo' in qualsiasi momento battere un comando come
"setup -f ppp" o "setup -f net" (dove -f sta' per "force") e la
lagna si ripete. Se proprio si e' masochisti, allora battere 
"setup -f -a", dove "-a" sta' per "all".

Per facilitare l'uso del floppy su varie postazioni, il comando 
`setup` gestisce una sorta di "multi-configurazione" ed e' 
possibile passare dall'una all'altra in qualsiasi momento,
rispondere diversamente alle domande e risalvare la configurazione
con un altro nome. In questo modo, con "setup -r home", ad esempio,
carico una configurazione col solo ppp;  con "setup -r pc12" ne
carico una con la scheda ethernet e con gli indirizzi IP giusti
per il PC numero 12.

La zona della ramdisk dove risiede la configurazione corrente 
e' /setup mentre l'insieme di tutte le configurazioni disponili
sul floppy sono in /a/init.

COSA C'E' ATTUALMENTE SUL FLOPPY
--------------------------------

Questa lista e' in continuo aggiornamento: man mano che faccio spazio,
aggiungero' altre cose.

- Shell
	o /bin/ash (lo so che e' un'immondezza, ma e' mooolto piu'
	  piccola di bash e negli script si comporta uguale).

- Tastiera

	o it.map e us.map , per ora (ma e' sul floppy, per cui ...)

- Accesso ai vari file-system

	o Dos, Windows, vfat (modulo vfat.o) e NFS (modulo nfs.o)
	  i cdrom (modulo isofs.o).	  
	  Comandi mount, umount, fdisk, mke2fs, df, free ...

- Comandi di utilita' generale e per gli script	

	o ls, cp, mv, ... gzip, gunzip, more, less, zless, zcat,
	  grep (emulato), sed, tr (riscritto), 
	  clock, date (emulata con clock), basename (emulato)
	  pico, dd, od, etc ... e il tar. 

	  Ho anche sognato di cancellare gzip e utilizzare in
	  qualche modo la "z" di tar. Ma  tar unzippa soltanto :(. 
	
	o manca zip e unzip: un po' grossini. Vedremo.
	

- Stampante ( solo ASCII )

	o modulo lp.o, a richiesta. Ho scritto anche una specie di lpr
	  per stampare file di testo.  

- Il mondo TCP/IP

	o comandi quali ifconfig, route, ping
	o ftp, telnet (autocostruito), finger.

- Connessione Ethernet

	o Solo il modulo per la 3c509, ma i moduli sono sul floppy.
	  Basta gzippare il proprio e scaraventarvelo sopra.

- Connessione PPP

	o Moduli ppp.o, serial.o e slhc.o, comandi chat e pppd.
	  La configurazione e' automatica e si parte battendo `pppd`.

- Scarico della posta
	
	o con un `fetchmail` autocostruito di pochi K, ma perfettamente
	  funzionante, dotato dell'opzione -F (flush).
	o col "vero" fetchpop

- Invio e lettura della posta

	o con un `sendmail` autocostruito e compatibile con quello "vero".
	  L'ho testato chiamandolo con pine dal Linux "grosso".
	  Permette di utilizzare qualunque campo FROM ( optione -f)

	o col comando `mail`, quello vero, quello della RedHat4.2 per
	  intenderci.


- Musica e suoni

	o modulo sound.o, a richiesta. Sul mio PC la SoundBlaster 
	  funziona. In casi piu' difficili, occorrera' passare
	  qualche parametro al kernel (si vedra').
	
	o comando `vplay` per suonare i .wav
	o comando `vrec` per registare dal microfono.
	o `workbone` per ascoltare i CD.
	o file .au direttamente sulla porta /dev/audio

- IRC
	Il client irc si potrebbe mettere (e' piuttosto piccolo),
	ma per ora sto risparmiando spazione per ...

- Il Web

	Il browser Quark, a colori, con funzionalita' simili a quelle di Lynx,
	ma molot, molto piu' rustico.

QUANTO SPAZIO RESTA ANCORA SUL FLOPPY
------------------------------------
	
	o No comment.


NOTIZIE SPECIFICHE
-------------------


Per le attivita' di TCP ho utilizzato `netcat`, un programmino di pochi K che
e' un vero portento: con questo ho sostituito `telnet`, `fetchmail`,
`sendmail`, e presto anche `ftp`, se non mi resta spazio per
tenermelo. Per realizzare i dialoghi expect/send necessari ai vari protocolli
POP3, SMTP etc, ho dovuto implementare un sistema macchinoso di pipe
che ancora mi stupisco coma abbia potuto funzionare.

E' incredibile a dirsi, ma non `netcat` si posso implementare quasi tutti i 
server che ascoltano una porta: ho gia' fatto `telnetd` e faro' anche un
minuscolo server web di 4 righe.


TODO
-----

	o Un sistema di help su file, possibilmente utilizzando
	  i colori.
	o Un piccolo spooler per stampe ascii.
	o Uno script `menu` per facilitare l'accesso  
	  alle varie "risorse".
	o Aggiungere i comandi rz e sz per trasferire file 
	  via telefono.
	o Aggiunge  potenzialita' BOOTP.
	o .... 


Michele Andreoli
andreoli@pisoft.it