CONFIGURAZIONI PC E RETI
ovvero... come abbiamo fatto dalla A alla Z.
 
HOME DOCUMENTI PROGETTI RISORSE DOMANDE ARTICOLI

  NGM2_V1: MINIDISTRIBUZIONE
  ultimo aggiornamento: 30 marzo 2002 ore 13.30
 
 
PROBLEMATICA
creazione di una minidistribuzione su due dischetti.
 
PERCHE' "FARSI" UNA MINIDISTRIBUZIONE
Uma minidistribuzione è un sistema Linux con funzionalità ridotte. Di solito, una minidistribuzione è contenuta in uno o piu' floppy disks (dischetti...), per cui è possibile "lanciare" un sistema Linux su qualsiasi PC "portandosi da casa" i dischetti necessari.
Nonostante esistono già moltissime distribuzioni, abbiamo deciso di "farcene una in casa" per imparare meglio come funziona Linux e per utilizzare il kernel 2.4 e quindi le ultime versioni dei programmi rilasciati dalla distribuzione Mandrake 8.1 (che attualmente utilizziamo su un nostro PC).
L'abbiamo chiamata NGM2 (Natalia & Gualty Multi Disk 2), in quanto è basata su una coppia di dischetti: BOOT e ROOT.
In generale, una distribuzione minima consente di intervenire su un PC nel caso il sistema non parta piu', potendo ad esempio "montare" il disco fisso e guardare nei files di configurazione. Oppure, potrebbe servire per preparare le partizioni per l'installazione di Linux o di altri sistemi operativi. Concretamente, noi abbiamo utilizzato una versione della minidistribuzione per installare Windows95 su un portatile senza lettore di CD, potendone copiare i files di installazione via ftp, una volta che tali files sono stati compattati con tar e gzip su un'altra macchina con servizio ftp attivato.

 
LICENZA GNU-GPL
Naturalmente, la distribuzione NGM2_V1 è legata alla licenza GNU-GPL (la stessa di GNULinux).
Riferirsi al sito www.gnu.org per ottenere ulteriori informazioni.

 
CONCETTI DI BASE
Di fatto, per utilizzare un sistema Linux è necessario avere:

a) il kernel, ossia il cuore di Linux (ovviamente...);
b) le directory e i files che Linux utilizza (tipo /etc, /dev, inittab ...);
c) un disco dove le directory e i files possono risiedere;
d) un programma che avvia il sistema operativo.

Per quanto riguarda il kernel, occorre quindi compilarne uno ad hoc, con le caratteristiche (e solo quelle) che bastano per i PC su cui la minidistribuzione sarà avviata (ossia, se ho solo schede di rete 3com, è inutile compilare il kernel in modo che possa riconoscere anche altre marche...).
Per quanto riguarda le directory e i files, occorrerà scegliere quali files e directory utilizzare di modo che la minidistribuzione possa funzionare. Per risparmiare spazio, utilizzeremo il programma "busybox" che ingloba in se' le funzionalità (anche se in forma ridotta) di moltissimi programmi.
Per quanto riguarda il disco, di certo non utilizzeremo il disco fisso, bensi' un disco RAM (con Linux è possibile crearne uno facilmente), di modo che il sistema operativo sia completamente caricato in memoria RAM (per chi non lo sapesse, praticamente tutti i PC hanno della RAM installata...), che quindi il floppy rimanga libero.
Il sistema operativo si potrebbe avviare da solo, senza l'utilizzo di un altro programma (ad esempio, di LILO). Ma per avere un controllo migliore della minidistribuzione, potendo anche definire dei messaggi iniziali e delle scelte, utilizzeremo SYSLINUX, programma di avvio funzionante su dischetti formattati DOS.

 
STRUTTURA E LIMITI FISICI
La minidistribuzione risiederà su due dischetti, a cui se ne potrà aggiungere uno per aumentare i programmi disponibili.
I due dischetti fondamentali saranno:

a) il disco di boot (contenente syslinux e il kernel);
b) il disco di root (contenente le directory e files necessari che verranno copiati nel disco RAM).

Ci sono dei limiti "fisici" da considerare:

a) la dimensione del kernel piu' i files necessari a syslinux dovranno poter essere contenuti da un dischetto (di 1.4M byte).
b) la dimensione dei files e delle directory compattati dovranno poter essere contenuti da un dischetto (di 1.4M byte).
c) la dimensione dei files e delle directory scompattati dovranno poter essere contenuti da un disco RAM (di solito impostata a 4M byte). La dimensione di un disco di RAM è definita in fase di compilazione del kernel, e puo' essere quindi aumentata. Occorre comunque tener presente che se la minidistribuzione deve essere lanciata su vecchi PC, la RAM disponibile su di essi puo' non essere sufficiente...

 
PER CREARE SUBITO I DISCHETTI
E' possibile scaricare le "immagini" dei due dischetti della minidistribuzione nella fase9. In questo modo, è possibile subito creare la minidistribuzione per provarla e vedere direttamente cio' che è contenuto in questo documento mentre lo si legge.
 
FASI
1) download dei sorgenti del kernel;
2) download di SYSLINUX;
3) download di BUSYBOX;
4) compilazione del kernel;
5) compilazione di BUSYBOX;
6) preparazione del disco di root;
7) preparazione del dischetto di boot;
8) creazione del dischetto di root;
9) creazione dei dischetti dalle immagini;
10) avvio della minidistribuzione.

 
FASE 1: DOWNLOAD DEI SORGENTI DEL KERNEL
I sorgenti del kernel possono essere scaricati da

www.kernel.org (directory /pub/linux/kernel/)

I files relativi ai sorgenti iniziano con linux e contengono nel nome la versione del kernel a cui si riferiscono.
Avendo installato sui nostri PC la distribuzione Mandrake 8.1 , che utilizza il kernel 2.4.8, abbiamo scaricato tale versione dei sorgenti.
Abbiamo scompattatto i sorgenti nella cartella /usr/src, ottenendo quindi la creazione della directory /usr/src/linux contenente tutti i files necessari alla compilazione del kernel.

 
FASE 2: DOWNLOAD DI SYSLINUX
SYSLINUX, ossia il programma che utilizzeremo per "lanciare" la minidistribuzione, puo' essere scaricato sempre da

www.kernel.org (directory /pub/linux/utils/boot/syslinux/)

L'Home Page di SYSLINUX si trova in

syslinux.zytor.com

 
FASE 3: DOWNLOAD DI BUSYBOX
BUSYBOX, ossia il programma che utilizzeremo per "risparmiare spazio" (in quanto ingloba moltissimi programmi standard di Linux), puo' essere scaricato da

busybox.lineo.com

 
FASE 4: COMPILAZIONE DEL KERNEL
La compilazione del kernel permette di creare un file kernel che possa essere contenuto su un dischetto da 1.4M byte, insieme ai files necessari a Syslinux.
La compilazione del kernel è già stata trattata nel documento

RICOMPILAZIONE KERNEL

presente su questo sito.
In generale, con
make menuconfig
(piu' "usabile" rispetto a make config) si selezionano le opzioni da attivare nel kernel, e con il comando
make dep clean bzImage modules modules_install
si compila il kernel e si installano i moduli. Attenzione: ricordarsi di impostare il parametro dell'EXTRAVERSION presente nel file Makefile nella cartella linux contenente il kernel, in modo che i moduli vengano creati in una directory dedicata alla minidistribuzione che stiamo creando (per spiegazioni su EXTRAVERSION riferirsi sempre al documento RICOMPILAZIONE KERNEL presente su questo sito)!!!
Nella fase di configurazione del kernel è possibile selezionare di inglobare la funzionalità richiesta nel file del kernel, o di caricare dinamicamente il modulo (relativo alla stessa funzionalità) immettendo il file-modulo nella directory /lib/modules/<versione_del_kernel> nel disco di root. La scelta tra le due modalità comporta l'utilizzo di un maggior spazio rispettivamente per il disco di boot e il disco di root (ossia, se inglobo il file del kernel sarà piu' grande, se carico come moduli il disco di root dovrà contenere anche i files relativi ai moduli da caricare). Per lasciare piu' spazio per le applicazioni, noi sceglieremo la prima modalita', che corrisponde alla selezione di Y, e non di M, per le opzioni del kernel.
La scelta delle varie opzioni dipende dal sistema su cui la minidistribuzione verrà avviata, e quindi non è generalizzabile. Ad esempio, se si hanno dischi SCSI, occorre attivare le opzioni per il loro riconoscimento.
Noi abbiamo scelto di abilitare il supporto per i moduli (in caso sia necessario da alcune applicazioni), e di utilizzare ipchains al posto di iptables (le librerie occupano meno spazio...) per l'implementazione di un eventuale firewall, abilitando "Network packet filtering (replaces ipchains)" in Networking Options e quindi "ipchains (2.2-style)" in IP: Netfilter Configuration.
Tramite make menuconfig viene prodotto il file .config (che, essendo nascosto, puo' essere visualizzato con ls -a nella directory /usr/src/linux). Il nostro file di configurazione è il seguente:

config (relativo al kernel 2.4.8)

Salvandolo al posto di .config, già presente in /usr/src/linux, e lanciando make menuconfig è possibile visualizzare/modificare le opzioni che abbiamo scelto.
Una volta lanciato make dep clean bzImage, viene creato il file bzImage in /usr/src/linux/arch/i386/boot. Occorre controllare (con ls -l) che il files non superi le dimensioni del dischetto in cui dovrà essere salvato (1.4M byte), tenendo conto anche dei files relativi a Syslinux (che sono pochi Kbyte).

 
FASE 5: COMPILAZIONE DI BUSYBOX
Busybox è un programma che ingloba in se' moltissimi altri programmi, e che ha il pregio di utilizzare solo le due librerie libc.so.6 e ld-linux.so.2,, utilizzate da quasi tutti i programmi. Grazie a queste due caratteristiche, è possibile utilizzare il poco spazio presente su un floppy disk per salvare moltissimi programmi standard di Linux. Naturalmente non tutti i parametri dei programmi originali sono supportati, ma solo quelli comunemente utilizzati. Di fatto, per l'utilizzo che si puo' fare di unadistribuzione minima, le funzinalità supportate sono piu' che sufficienti!
Una volta scompattato il file scaricato da Internet (a seconda del formato scaricato, ci si puo' riferire a METODI DI INSTALLAZIONE PROGRAMMI presente su questo sito), occorre editare il file Config.h "remmando" (inserendo i caratteri // all'inizio della riga) i comandi che non ci servono e "deremmando" quelli che invece riteniamo siano utili (facendo attenzione a lasciare il carattere cancelletto #).

Il file Config.h utilizzato da noi, relativo a busybox-0.60.2, è visualizzabile cliccando qui.

Lanciando poi i comandi

make
make install


si ottengono nella directory _install tutti i files che saranno utilizzati nella distribuzione minima.
Entrando in _istall/bin ed eseguendo ls -l si puo' notare come l'unico programma presente sia busybox e che gli altri sono solo dei link a busybox. Si puo' notare come busybox occupi solo circa 250 Kbite di spazio su disco!

 
FASE 6: PREPARAZIONE DEL DISCO DI ROOT
La preparazione del disco di root è sicuramente la fase piu' inteessante e delicata di tutto il processo, in quanto occorre sia scegliere tutti i files necessari alla distribuzione minima sia configurare i files di inizializzazione del sistema.
Il disco di root deve essere preparato come utente root, di modo che i files e le directory create appartengano all'utente root.
Per comodità noi abbiamo creato una directory NGM2, in cui abbiamo creato la directory boot e la directory root. Nella directory root abbiamo copiato i files creati da busybox, con i comandi

cd <directory di busybox>/_install
cp -dpR * /NGM2/root


Attenzione: e' necessario utilizzare il parametro -dpR, in modo da copiare i link simbolici e le subdirectory.
In questo modo, la directory root è stata popolata con le directory /bin, /sbin, usr/bin e usr/sbin, che di solito contengono gran parte dei programmi "eseguibili" di una distribuzione.
Creiamo ora le altre directory fondamentali e opzionali per il funzionamento, ossia /dev, /etc, /home, /lib, /mnt, /proc, /root, /tmp, /var.

cd /NGM2/root
mkdir dev
mkdir etc
mkdir home
mkdir lib
mkdir mnt
mkdir proc
mkdir root
mkdir tmp
mkdir var


Iniziamo a popolare le directory.

### La directory /dev contiene tutti i files che si riferiscono ai dispositivi appartenenti al sistema (ad esempio, hda1 si riferisce alla prima partizione del primo disco fisso IDE del sistema; se si deve eseguire il mount di questa partizione, hda1 deve essere presente nella directory dev). L'elenco totale dei dispositivi creabili per una data versione del kernel si trova nel file Documentation/devices.txt presente tra le directory del kernel scompattato. Non occorre creare tutti i files, ma alcuni sono fondamentali (come descritto da Andrea Dainese): ram0 (che conterrà la partizione root della minidistribuzione...), tty1-9 (le console del sistema) e console (la quale identifica la prima console libera), kmem e null.
I files di dispositivo sono files particolari che hanno le seguenti caratteristiche:
a) un nome;
b) un tipo (b,c,u,p);
c) un numero detto MAJOR;
d) un numero detto MINOR;
e) i permessi settati come in tutti gli altri files.
Eseguendo ls -l nella directory /dev si possono osservare come sono state settate le caratteristiche per i files di dispositivo. In alcune distribuzioni, tra le quali Mandrake 8.1, l'organizzazione della directory dev è con subdirctory e links simbolici in /dev per quasi tutti i dispositivi: naturalmente, il comando ls -l visualizzerà quali sono i link simbolici e qual è il vero file di dispositivo a cui si riferiscono.
Supponendo di eseguire, in /dev, ls -l console, si ottiene il seguente risultato:

crw------- 1 root root 5, 1 nov 24 14:10 console

Il primo carattere indica il tipo del file (nel nostro caso si tratta di c, ossia di tipo character).
rw------- si riferisce ai permessi sul file (quindi lettura/scrittura solo da parte dell'utente root).
1 è la dimensione del file.
root root è l'utente e gruppo proprietario del file.
5 è il numero MAJOR.
1 è il numero MINOR.
Poi vi è la data e il nome console.
Scorrendo il file Documentation/devices.txt si puo' verificare che effettivamente il MAJOR 5 di tipo character con MINOR 1 si riferisce a /dev/console.
Ci sono due modi per "riempire" la directory dev della nostra distribuzione minima (in /NGM2/root/dev):
1) copiarsi i files dalla directory /dev del PC che si sta utilizzando per creare la distribuzione minima;
2) crearli con il comando mknod secondo le indicazioni contenute le file /usr/src/linux/Documentation/devices.txt.

1) Per quanto riguarda il caso 1), la copia deve essere eseguita sempre con i parametri -dpR. Grazie alla "trovata" di Mandrake 8.1 di organizzare tutto in directory, la cosa per noi è risultata un po' puo complicata del normale. La scelta di copiarsi tutti i files non puo' essere fatta, in quanto occuperebbero troppo spazio: occorre fare una selezione. Tra l'altro, ci sono dei files di dispositivo che comunque dovrebbero essere creati a mano (con il comando mknod, come spiegato di seguito...): ad esempio quelli che si riferiscono alle partizioni dei dischi, almeno una decina per ogni disco (ad esempio, mi sono accorto che Mandrake 8.1 ha installato solo i dispositivi relativi ai dischi presenti sul sistema, ma io voglio che la mia minidistribuzione mi permetta di esegure il mount di partizioni anche sugli altri dischi, visto che la posso utilizzare su piu' PC).
Supponendo di copiare il file console occorre eseguire i seguenti comandi:

cd /dev
cp -dpR console /NGM2/root/dev


2) con mknod è possibile creare tutti i dispositivi che si vogliono utilizzando le informazioni contenute nel file Documentation/devices.txt. Supponiamo, ad esempio, di creare il dispositivo relativo alla partizione 3 del disco hdd, il cui nome sarà hdd3. Scorrendo il file devices.txt si trova che hdd3 deve avere le seguenti caratteristiche:
+ nome hdd3 (o qualsiasi altro nome, visto che quello che conta sono le altre caratteristoche; comunque, conviene tenere i nomi standard per ovvi motivi... ;
+ tipo = b; + MAJOR = 22;
+ MINOR = 67 (ossia 64+3);
Per quanto riguarda i permessi, permetteremo lettura e scrittura solo all'utente root.
Per creare il dispositivo il comando è quindi

mknod -m 0600 hdd3 b 22 67

(riferirsi al man di mknod per il significato dei parametri).

Il contenuto di dev relativo alla nostra distribuzione è il seguente:
console cua0 cua1 cua2 cua3 fd0 hda hda1 hda2 hda3 hda4 hda5 hda6 hda7 hda8 hda9 hdb hdb1 hdb2 hdb3 hdb4 hdb5 hdb6 hdb7 hdb8 hdb9 hdc hdc1 hdc2 hdc3 hdc4 hdc5 hdc6 hdc7 hdc8 hdc9 hdd hdd1 hdd2 hdd3 hdd4 hdd5 hdd6 hdd7 hdd8 hdd9 kmem null ppp ram0 ram1 ram2 ram3 ram4 ram5 ram6 ram7 ram8 ram9 tty tty0 tty1 tty2 tty3 tty4 tty5 tty6 tty7 tty8 tty9 ttyS0 ttyS1 zero
Per comodità (specialmente nostra... ) abbiamo compattatto la directory dev nel file dev.tar.gz (cliccarci sopra per downloadarlo).
### La directory /etc contiene tutti i files di inizializzazione del sistema e di configurazione dei vari programmi e servizi.

La directory /etc contiene i seguenti files:

fstabinformazioni per il mount delle partizioni
groupelenco dei gruppi
hostsassociazioni nomi host con IP
inittabfile di configurazione di init
it-lmc.mapdefinizione della tastiera italiana
ld.so.cachecache delle librerie
ld.so.confconfigurazione delle librerie
login.defsfile di configurazione di login
modules.conffile di configurazione dei moduli
mtabpartizioni montate
pam.confconfigurazione di PAM
passwdelenco degli utenti
profilefile di configurazione personalizzata
protocolselenco dei protocolli di rete
rc.Mscript di configurazione dei run-levels
rcHscript eseguito all'uscita del sistema
rcSscript di configurazione del sistema
serviceselenco dei servizi di rete
syslog.conffile di configurazione di syslogd

In breve, ecco qual è la successione degli eventi dopo che è stato caricata la partizione di root:
a) viene eseguito il programma init;
b) init legge il suo file di configurazione inittab;
c) in inittab è definito il run-level di default, ossia il 2;
d) viene eseguito il file rcS;
e) viene eseguito il file rc.M, perchè settato per il livello 2;
f) vengono attivati con mingetty i terminali tty1, tty2 e tty3, selezionabili rispettivamente con <Alt-F1>, <Alt-F2> e <Alt-F3>;
g) mingetty esegue il programma login, configurato con il file login.conf, che attraverso le regole contenute in pam.conf e gli utenti/gruppi contenuti in passwd e group autentica un utente;
h) se un utente viene autenticato, viene aperta la shell relativa all'utente stesso come contenuto nel file passwd;
i) viene eseguito lo script profile.

Nel momento in cui si "spegne" il sistema, ossia si esegue lo shutdown, viene eseguito lo script rcH.

Diamo ora la descrizione dei files piu' significativi.

--> Il file inittab contiene la definizione dei programmi che verranno lanciati all'avvio e alla chiusura di Linux. La sua struttura è la seguente:

<nome arbitrario della definizione>:<livelli per cui vale>:<a cosa si riferisce>:<le istruzioni da eseguire>

Di solito, i livelli vanno da 0 a 6. Il livello 0 è il livello in cui "si entra" quando si esegue l'halt (shutdown -h) del sistema. Il livello 6, invece, è di solito associato al reboot (shutdown -r). Gli altri livelli sono invece utilizzati per definire differenti configurazioni di avvio di Linux: vedremo di seguito come selezionarle al momento del boot.
Il file inittab utilizzato nella nostra minidistribuzione è il seguente:

id:2:initdefault:
si::sysinit:/etc/rcS
rc:2345:wait:/etc/rc.M
rh:0:wait:/etc/rcH
1:2345:respawn:/sbin/mingetty --noclear tty1
2:23:respawn:/sbin/mingetty --noclear tty2
3:2:respawn:/sbin/mingetty --noclear tty3
ca::ctrlaltdel:/sbin/shutdown -n -t5 -a -r now

La prima riga, identificata da id (si poteva mettere qualsiasi altro nome...), tramite l'utilizzo della parola initdefault nella terza posizione e del numero 2 nella seconda posizione, definisce il livello di default di entrata nel sistema, ossia il 2.
La seconda riga definisce /etc/rcS come script avviato durante l'inizializzazione del sistema. Il file rcS nella nostra distribuzione ha il seguente contenuto:

#!/bin/sh
/bin/mount -av
/bin/mount -o remount,rw /dev/ram0 /
/sbin/syslogd -m0
/sbin/klogd
/bin/hostname ngm2


Le righe servono per montare i dispositivi contenuti nel file fstab, per rimontare la directory di root in lettura scrittura, per avviare syslogd e klogd che gestiscono i files di log delle applicazioni e per definire ngm2 come hostname (nome in rete...).
Il programma syslogd si basa sul file di configurazione syslog.conf, che nel nostro caso è il seguente:

*.* /var/log/messages

In questo modo, tutti i log vengono salvati in /var/log/messages.

Il file fstab contiene le seguenti righe:

proc /proc proc defaults 0 0
/dev/ram0 / ext2 defaults,noauto 0 0
/dev/fd0 /mnt/floppy auto default,user,noauto 0 0

La directory /proc, contenente i processi di Linux, deve essere sempre montata come indicato nella prima riga.
La seconda riga del file fstab contiene il mount della directory di root.
La terza riga del file fstab serve per montare velocemente il dispositivo floppy eseguendo l'istruzione mount /mnt/floppy.

La terza riga del file inittab, identificata da rc, indica che per i livelli 2,3,4 e 5 verrà eseguito il file /etc/rc.M nel momento in cui si entrerà in tali livelli.
Ecco il nostro file rc.M:

#!/bin/sh
/bin/loadkeys /etc/it-lmc.map


In questo modo vengono caricate le definizioni della tastiera italiana, utilizzando un file (it-lmc.map) creato da Dario Besseghini e Lorenzo Maria Catucci (rif. Italian-HOWTO cap 2.1).

La quarta riga del file inittab si riferisce allo script che verrà lanciato nel momento in cui si esegue l'halt del sistema (essendo definito per il livello 0). Il nostro file rcH contiene le seguenti istruzioni:

#!/bin/sh
umount -va
echo "Grazie per aver utilizzato la nostra minidistribuzione!!!"
echo "Natalia & Gualty"
echo "http://digilander.iol.it/ngappunti"

L'istruzione umount -va esegue l'umount di tutte le partizioni che sono state montate. Senza di essa, potrebbe succedere che ci si dimentica di eseguire l'umount di una partizione Linux montata (ad esempio, di una partizione su un disco fisso che abbiamo controllato...). Le istruzioni 'echo' servono solo a visualizzare delle informazioni sul video.

La quinta riga di inittab inizializza, con il comando mingetty, la shell 1 per i livelli 2,3,4, e 5. Analogamente, le altre righe inizializzano la shell 2 per i livelli 2 e 3 e la shell 3 per il livello 2. Quindi, se si entrerà nel livello 2, verranno inizializzate le shell 1,2,3; se si entra nel livello 3, verranno inizializzate solo la shell 2 e la shell 3; se si entrerà nel livello 4, verrà inizializzata unicamente la shell 2.
Le shell possono essere richiamate dalla combinazione di tasti <Alt + F1> = shell 1 ; <Alt + F2> = shell 2 ; <Alt + F3> = shell 3.
Il parametro --noclear è necessario per non pulire il video prima del login: magari ci sono delle informazioni che vogliamo vedere...

L'ultima riga del file inittab si riferisce all'istruzione che verrà lanciata premendo la combinazione di tasti &nd;Ctrl + Alt + Canc>. L'istruzione

/sbin/shutdown -n -t5 -a -r now

esegue il riavvio del sistema.

Il file profile è un ulteriore file che viene eseguito dopo il login. Nella nostra minidistribuzione non viene utilizzato concretamente (visualizza solo le partizioni montate), ma piu' essere utile per le prossime versioni.

--> Il file passwd contiene l'utente root definito senza password, in modo da poter eseguire il login della minidistribuzione senza dover inserire una password. Infatti, la minidistribuzione non contiene dei servizi di rete (telnet, ftp... per cui è necessaria una protezione con password dell'utente root), e viene di solito utilizzata per operazioni temporanee su altri sistemi operativi (presenti, ad esempio, sui dischi fissi del PC su cui la minidistribuzione viene lanciata).
Il file passwd viene utilizzato dal sistema di autenticazione PAM, che utilizza pam.conf come file di configurazione e i files di libreria contenuti in /lib/security.
Il contenuto del file passwd è il seguente:

root::0:0:root:/root:/bin/sh

Il significato è il seguente:
utente root:password nulla:UID 0:GID 0:informazioni aggiuntive (si puo' scrivere quello che si vuole, noi abbiamo scritto root):home directory definita come /root:shell sh lanciata dopo l'autenticazione

Il gruppo root è definito nel file group:

root::0:root

Il significato è il seguente:
gruppo root:password nulla:GID 0:lista degli utenti appartenenti al gruppo separati da virgola (nel nostro caso vi è solo root, naturalmente)

Per quanto riguarda il file pam.conf, ha il seguente contenuto:

OTHER auth required /lib/security/pam_permit.so
OTHER account required /lib/security/pam_permit.so
OTHER password required /lib/security/pam_permit.so
OTHER session required /lib/security/pam_permit.so

Non essendo stato indicato nessun nome di file, con OTHER si inglobano tutti i files, indicando che la libreria che gestirà gli accessi è pam_permit.so, in modo da non dover utilizzare password per nessun utente.
Il manuale di PAM puo' essere scaricato all'indirizzo www.kernel.org/pub/linux/libs/pam/.
Il file login.defs contiene la definizione di variabili utilizzate dal programma login:

FAIL_DELAY 3
LOGIN_RETRIES 3

FAIL_DELAY indica il numero di secondi che passano dopo un login non autorizzato.
LOGIN_RETRIES indica quante volte è possibile eseguire il login prima di un messaggio di fallimento.

--> Il file hosts contiene la definizione dell'IP relativo a localhost (interfaccia di rete associata al PC stesso; per default l'indirizzo è 127.0.0.1 su tutti i PC).


### La directory /lib contiene tutti i files di libreria di Linux.
I programmi, per funzionare, si basano su delle librerie specifiche, che devono essere presenti nella directory /lib (o in altre directory a seconda della configurazione particolare di alcuni eseguibili). Per sapere quali librerie sono necessarie ad un dato programma, basta lanciare il comando

ldd <nome del programma>

Nella distribuzione minima si dovrà percio' inserire le librerie necessarie ai programmi che si vorrà copiare. La scelta di alcuni programmi piuttosto che di altri potrà comportare l'utilizzo o meno di alcune librerie, permettendo di ridurre lo spazio totale necessario dal disco di root e dalla partizione di root su RAM. Ad esempio, scegliendo di copiare il programma tar, si dovranno copiare le librerie

cd /bin
ldd tar
librt.so.1 => /lib/librt.so.1 (0x40027000)
libc.so.6 => /lib/libc.so.6 (0x40039000)
libpthread.so.0 => /lib/libpthread.so.0 (0x40177000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Nella minidistribuzione non sono presenti librt.so.1 e libpthread.so.0: occorrerebbe aggiungerle, con un occupazione del disco RAM pari a circa 580 Kbyte. Essendo la grandezza di tar pari a 145 Kbyte, in totale occuperemmo circa 725 Kbyte in piu' di spazio. Attualmente, sul disco di RAM sono liberi circa 820 Kbyte, quindi tar e le librerie aggiuntive potrebbero essere aggiunte. Il problema è che comprimendo il disco di RAM, il file supera 1,4 Mbyte disponibili su un dischetto, rendendo in questo modo impossibile aggiungere tar direttamente sul file compresso (la soluzione potrebbe essere copiare, dopo che la minidistribuzione è stata avviata, i files direttamente nella root montando un floppy contentente tar e le librerie sopra indicate, o prendendo tar da una directory montata con NFS...). Essendo tar contenuto in Busybox, conviene compilarlo direttamente in Busybox stesso, in modo da risparmiare spazio, rinunciando pero' ad alcune funzionalità.

I files contenuti nella directory /lib nella nostra distribuzione, sono i seguenti:

ld-2.2.4.so
ld-linux.so.2
libc-2.2.4.so
libc.so.6
libcom_err.so.2
libcom_err.so.2.0
libcrypt-2.2.4.so
libcrypt.so.1
libdl-2.2.4.so
libdl.so.2
libe2p.so.2
libe2p.so.2.3
libext2fs.so.2
libext2fs.so.2.4
libnss_files-2.2.4.so
libnss_files.so.2
libpam.so
libpam.so.0
libpam.so.0.75
libpam_misc.so
libpam_misc.so.0
libpam_misc.so.0.75
libtermcap.so.2
libtermcap.so.2.0.8
libuuid.so.1
libuuid.so.1.2


Nella directory /lib/security sono contenute le librerie necessarie alla politica di sicurezza PAM.
Nel nostro caso utilizziammo solo pam_permit.so, di modo che qualsiasi programma che si basa su PAM (come, ad esempio, login) non esegue nessuna verifica sulla password.


### La directory /proc deve essere creata vuota.
Essa conterrà i files dei processi, che Linux provvederà a crearsi da se'.


### La directory /tmp deve essere creata vuota.
Essa conterrà i files temporanei creati dai processi.


### La directory /root deve essere creata vuota.
Essa sarà la home page dell'utente root. Essendo la minidistribuzione funzionante su un disco RAM, tutti i dati creati vengono comunque persi al momento dello shutdown del sistema. Percio', non ha molto senso creare una home directory per un utente. Comunque, in previsione di una implementazione della distribuzione con piu' utenti, e con files gia' inseriti nelle varie home pages degli utenti, iniziamo già ad inserire la directory /root.


### La directory /home deve essere creata vuota.
Essa sarà la home page degli utenti che aggiungeremo nelle prossime versioni.


### La directory /var contiene, solitamente, files creati e gestiti dalle applicazioni mentre "sono in funzione". Ad esempio, la subdirectory /var/log contiene i files di log che le applicazioni utilizzano per salvare dei messaggi di errore, di warning o di informazione. La subdirectory /var/run contiene i PID dei processi lanciati. Nel nostro caso, quindi creiamo le due subdirectory /var/log e var/run. In /var/log, creiamo il file vuoto messages, che verrà utilizzato per salvare i messaggi da syslogd e klogd.


### Le directory /bin /sbin /usr/bin /usr/sbin /usr/personal contengono i programmi che possono essere eseguiti nella minidistribuzione.

Il contenuto della directory /bin è il seguente:

ash
busybox
cat
chgrp
chmod
chown
cp
date
dd
df
dmesg
echo
false
grep
gunzip
gzip
hostname
kill
killall
ln
loadkeys
login
ls
mkdir
mknod
more
mount
msh
mv
pidof
ping
ps
pwd
rm
rmdir
sed
sh
sleep
sync
tar
touch
true
umount
uname
vi
zcat


Il contenuto della directory /sbin è il seguente:

dosfsck
e2fsck
fdisk
fsck
fsck.ext2
fsck.ext3
ifconfig
init
klogd
lsmod
mingetty
mkdosfs
mke2fs
mkswap
modprobe
poweroff
shutdown
swapoff
swapon
syslogd

Il contenuto della directory /usr/sbin è il seguente:
chroot

Il contenuto della directory /usr/bin è il seguente:
[
basename
chvt
clear
cpf
cut
dirname
du
env
find
free
gpart
halt
head
id
killall
logger
moexflo
monfs
movfflo
reset
sort
tail
telnet
test
tftp
tr
tty
uniq
uptime
wc
wget
which
whoami
xargs
yes

La directory /usr/personal contiene degli script che abbiamo creato noi per velocizzare alcune operazioni. Nella directory /usr/bin abbiamo creato dei link a questi script, di modo che i comandi possano essere eseguiti da qualsiasi punto.

Gli script sono i seguenti:
cpf
utilizzo: cpf <nome_file>
esegue 'cp <nome_file> /mnt/floppy'
funzione: copia di un file su floppy

halt
utilizzo: halt
esegue 'shutdown -h now'
funzione: uscita dal sistema

moexflo [-u]
utilizzo: moexflo
esegue 'mount -t ext2 /dev/fd0 /mnt/floppy'
parametro -u: esegue l'umount
funzione:mount del floppy con filesystem ext2

monfs &nd;server_NFS>:/&nd;directory> [-u]
utilizzo: monfs IP:/directory
esegue 'mount -t nfs -o nolock IP:/directory /mnt/dati'
parametro -u: esegue l'umount
funzione: mount di una dirctory condivisa NFS

movfflo [-u]
utilizzo: movfflo
esegue 'mount -t vfat /dev/fd0 /mnt/floppy'
parametro -u: esegue l'umount
funzione:mount del floppy con filesystem vfat


 
FASE 7: CREAZIONE DEL DISCHETTO DI BOOT
Per eseguire il boot del kernel abbiamo scelto di utilizzare Syslinux,in quanto è facilmente configurabile. Le fasi di preparazione del dischetto di boot sono le seguenti:

a) creazione del dischetto con il comando
cd <directory_di_syslinux>/
./syslinux /dev/fd0

b) copia del kernel (che abbiamo ricompilato) sul dischetto:
mount -t vfat /dev/fd0 /mnt/floppy
(al posto di /mnt/floppy, se differente, occorre mettere la directory utilizzata dalla vostra distribuzione per montare il floppy...)
cp /usr/src/linux/arch/i386/boot/bzImage /mnt/floppy/vmlinuz

c) creazione del file di configurazione di Syslinux e copia sul dischetto:
il file di configurazione di Syslinux si chiama syslinux.cfg. Il suo contenuto, relativo alla nostra distribuzione, è il seguente:

DEFAULT VMLINUZ
APPEND vga=normal noinitrd load_ramdisk=1 prompt_ramdisk=1 ramdisk_size=4092 root=/dev/fd0 disksize=1.44
TIMEOUT 0
DISPLAY boot.txt
PROMPT 1
F1 f1.txt

La riga DEFAULT VMLINUZ indica che l'immagine vmlinuz del kernel è la predefinita (nel nostro caso è anche l'unica...).
La riga APPEND indica quali sono i parametri di avvio del kernel. In sintesi, indicano al kernel che deve montare la direcory di root in RAM, prendendola dal floppy.
La riga TIMEOUT 0 indica che al boot Syslinux aspetta indefinitamente.
La riga indica di mostrare il contenuto del file boot.txt prima del prompt.
La riga PROMPT 1 indica di mostrare sempre il prompt boot: all'avvio.
La riga F1 f1.txt indica di mostrare il file f1.txt se si preme <F1>.
La spiegazioni dei parametri di configurazione di Syslinux possono esser trovati sul sito ufficiale di Syslinux.

La copia di syslinux.cfg, boot.txt e f1.txt avviene con i seguenti comandi:
cd <directory_dove_sono_contenuti_i_files>/
cp syslinux.cfg /mnt/floppy
cp boot.txt /mnt/floppy
cp f1.txt /mnt/floppy

A questo punto è possibile elesguire l'umount del floppy, in quanto il dischetto è pronto!
umount /mnt/floppy

 
FASE 8: CREAZIONE DEL DISCHETTO DI ROOT
La creazione del dischetto di root avviene in questo modo:
a) creazione del disco RAM;
b) copia delle directory relative al dischetto di root nel disco RAM;
c) compattazione del disco RAM su un file;
d) copia del file creato sul dischetto di root.

Per le fasi a) b) e c) abbiamo creato lo script seguente:

#!/bin/bash
echo "CREAZIONE DISCO DI ROOT NGM2_V1"
dd if=/dev/zero of=/dev/ram bs=1k count=4096
mke2fs -vm 0 /dev/ram 4096
mount /dev/ram /mnt/myram
cd /NGM2/root/
cp -dpR * /mnt/myram
umount /mnt/myram
cd /NGM2/
dd if=/dev/ram bs=1k count=4096|gzip -9v >root.gz

Prima di lanciare lo script, occorre creare la directory /mnt/myram.
mkdir /mnt/myram

Per utilizzare lo script, basta creare un file crea.root, copiarci le righe indicate, modificarlo con le proprie impostazioni delle directory, salvarlo e dargli i permessi di esecuzione con
chmod 0700 crea.root

La spiegazione delle istruzioni è la seguente:
#!/bin/bash
#utilizzare bash per eseguir le istruzioni

echo "CREAZIONE DISCO DI ROOT NGM2_V1"
#messaggio

dd if=/dev/zero of=/dev/ram bs=1k count=4096
#alloca 4096 Kbyte di memoria per il disco RAM su /dev/ram

mke2fs -vm 0 /dev/ram 4096
#crea un filesystem di tipo ext2 in RAM

mount /dev/ram /mnt/myram
#monta la partizione RAM creata

cd /NGM2/root/
#si sposta dove ci sono i files

cp -dpR * /mnt/myram
#copia tutti i files del disco di root in RAM (il parametro -d è importantissimo, in quanto mantiene i link simbolici!!!)

umount /mnt/myram
# esegue umount della partizione RAM

cd /NGM2/
# si sposta sulla directory dove viene salvato il file root.gz

dd if=/dev/ram bs=1k count=4096|gzip -9v >root.gz
comprime la partizione RAM nel file root.gz

La fase d) di copia del file root.gz sul floppy deve essere eseguita nel seguente modo:
cp root.gz /dev/fd0

E' da notare che si copia sulla partizione del floppy (ossia /dev/fd0), e non sul filesystem (ossia /mnt/floppy): ricordarselo!!!

A questo punto anche il disco di root è pronto ed è possibile provare la minidistribuzione.

 
FASE 9: CREAZIONE DEI DISCHETTI DALLE IMMAGINI
Se si vuole subito provare la minidistribuzione per vedere concretamente come funziona, è possibile scaricare le immagini dei dischetti di boot e di root della NGM2_V1 e creare i propri dischetti. Per far questo, eseguire il download delle immagini:

NGM2_V1-boot.img

NGM2_V1-root.img

Creare i dischetti con i comandi:

... inserire il dischetto formattato che sarà nominato BOOT
dd if=NGM2_V1-boot.img of=/dev/fd0

... inserire il dischetto formattato che sarà nominato ROOT
dd if=NGM2_V1-root.img of=/dev/fd0


E' possibile creare i dischetti anche da Windows con il programma rawrite2 (facilmente recuperabile in Internet, ad esempio da hal91, o da www.kernel.org) :

... inserire il dischetto formattato che sarà nominato BOOT
rawrite2 -f NGM2_V1-boot.img -d a:

... inserire il dischetto formattato che sarà nominato ROOT
rawrite2 -f NGM2_V1-root.img -d a:

 
FASE 10: AVVIO DELLA MINIDISTRIBUZIONE
Per l'avvio della minidistribuzione, assicurarsi che il BIOS eseguirà il boot partendo come prima cosa dall'unità floppy.
La minidistribuzione si avvia in questo modo:

a) inserimento del dischetto di BOOT e avvio della macchina;
b) si preme <INVIO> al prompt boot:;
c) si aspetta che venga segnalato di inserire il dischetto di root;
d) si inserisce il dischetto di ROOT e si preme INVIO;
e) al prompt login: si inserisce root e si preme INVIO;
f) a questo punto, ci si trova nella directory /root e si puo' utilizare la minidistribuzione.

 
DOCUMENTI PROPOSTI DA NOI
+ RICOMPILAZIONE DEL KERNEL
+ HAL91: LINUX SU UN SOLO DISCHETTO
+ HAL91: TASTIERA E RETE

 
RIFERIMENTI
www.kernel.org
syslinux.zytor.com
busybox.lineo.com
www.kernel.org/pub/linux/libs/pam/
www.gnu.org
www.networkingitalia.it/linux/distribuz.htm
CAMBIAMENTI
--. 30 marzo 2002 13.30: creazione documento.
 
 
 redazione@retelinux.com