[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 383.   nanoRouter

nanoRouter è un lavoro che riguarda la prima edizione di nanoLinux e non è più curato. Questo capitolo è obsoleto e viene lasciato per documentare il funzionamento di questo dischetto che viene ancora distribuito con Appunti di informatica libera.

L'inoltro dei pacchetti da un'interfaccia di rete a un'altra, in un router, è compito del kernel: è sufficiente che gli venga fornita la configurazione delle interfacce e la tabella di instradamento.

Teoricamente dovrebbe essere possibile compilare un kernel con questi valori già registrati al suo interno, in pratica conviene utilizzare il modo tradizionale di configurazione attraverso i programmi ifconfig e route.

Un dischetto di emergenza, in grado di accedere alle interfacce di rete, con un kernel adatto e con questi due programmi, è in grado di funzionare come router. Ciò vale quindi sia per nanoLinux che per i dischetti di emergenza della distribuzione Slackware.

In questo capitolo si descrive in che modo ottenere un sistema estremamente ridotto in grado di eseguire l'inoltro di pacchetti da un'interfaccia di rete a un'altra.

383.1   Kernel

Come già accennato, il kernel deve consentire l'inoltro dei pacchetti. Per le altre caratteristiche valgono tutte le considerazioni già fatte al riguardo dei dischetti di emergenza.

383.2   Lo stretto indispensabile

La funzione di inoltro è svolta dal kernel e, a meno di essere abili programmatori, è necessario utilizzare ifconfig e route per configurare le interfacce e definire gli instradamenti. Questi programmi, a loro volta, hanno bisogno di librerie. I programmi, per essere avviati hanno bisogno dell'eseguibile init, oppure, in alternativa, di una shell che possa eseguire uno script.

Nell'esempio proposto non si fa uso di init: con un piccolo trucco si avvia direttamente la shell ash in modo interattivo, così da leggere ed eseguire il file /etc/profile contenente le istruzioni per la configurazione delle interfacce e la definizione degli instradamenti.

Rispetto ai dischetti di emergenza normali si pone un nuovo problema: l'identificazione delle interfacce di rete quando queste sono più di una. Infatti, il kernel smette di cercare altre interfacce dopo che ne ha trovata una. Ciò costringe in pratica a utilizzare LILO, attraverso il quale si possono definire le istruzioni che il kernel deve ricevere all'avvio (attraverso queste istruzioni può essere informato della presenza di altre schede di rete).

L'esempio mostrato è stato realizzato con file binari e librerie di una vecchia distribuzione Slackware 3.1. Le restrizioni che si impongono allo scopo di realizzare un dischetto unico, non compresso, in sola lettura, rendono praticamente impossibile l'utilizzo di programmi e librerie più recenti.

383.2.1   Struttura di nanoRouter

Il dischetto nanoRouter si ottiene partendo da nanoLinux I eliminando molte cose e aggiungendone poche altre. In particolare, si nota subito l'utilizzo di ash al posto di bash e la totale assenza della procedura di inizializzazione del sistema.

Il programma /sbin/init è scomparso, al suo posto c'è un collegamento simbolico speciale che avvia ash con l'opzione -i: in questo modo, quando il kernel tenta di avviare init, avvia invece una shell interattiva che, come tale, esegue il contenuto di /etc/profile.

Anche /sbin/ldconfig è un collegamento simbolico: avvia uno script che restituisce semplicemente il valore Vero. Questo programma viene avviato automaticamente e non può mancare (anche se di fatto non serve).

I file di dispositivo contenuti all'interno di /dev/ sono ridotti al minimo, in pratica ci sono i dispositivi di gestione della console e poco altro.

L'ultima cosa da notare è la presenza della directory /boot/ contenente il kernel e i file di avvio di LILO.

/
|-- bin
|   |-- ash
|   |-- ping
|   |-- sh -> ash
|   `-- sync
|-- boot
|   |-- .config
|   |-- boot.0200
|   |-- boot.b
|   |-- map
|   `-- vmlinuz
|-- dev
|   |-- log
|   |-- null
|   |-- systty
|   |-- tty
|   |-- tty0
|   |-- tty1
|   |-- tty2
|   |-- tty3
|   |-- tty4
|   `-- zero
|-- etc
|   |-- ld.so.cache
|   |-- lilo.conf
|   |-- profile
|   `-- protocols
|-- lib
|   |-- ld-linux.so -> ld-linux.so.1
|   |-- ld-linux.so.1 -> ld-linux.so.1.8.2
|   |-- ld-linux.so.1.8.2
|   |-- libc.so.5 -> libc.so.5.3.12
|   |-- libc.so.5.3.12
|   |-- libcom_err.so.2 -> libcom_err.so.2.0
|   |-- libcom_err.so.2.0
|   |-- libtermcap.so.2 -> libtermcap.so.2.0.8
|   `-- libtermcap.so.2.0.8
|-- mnt
|-- proc
|-- sbin
|   |-- ifconfig
|   |-- init -> ../bin/ash -i
|   |-- ldconfig -> true
|   |-- route
|   |-- true
|   `-- update
|-- tmp
|-- usr
`-- var

383.2.2   Collegamento con argomento

Creare un collegamento simbolico con un argomento non è possibile attraverso il solito programma ln. Se non si riesce, si può creare un collegamento simbolico normale, ma poi, occorre avviare manualmente l'esecuzione del file profile.

Attraverso mc (Midnight Commander) è possibile modificare un collegamento simbolico scrivendoci quello che si vuole. Basta richiamare la voce {edit sYmlink} dal menù {File}, oppure utilizzare la sequenza [Ctrl+x][Ctrl+s].

383.2.3   /etc/profile

Il file /etc/profile, in questo tipo di impostazione, è l'unico mezzo di configurazione. La configurazione delle interfacce di rete e la definizione degli instradamenti avvengono all'interno di questo file.

PATH="/sbin:/bin:."
TERM=linux
PS1='# '
PS2='> '
ignoreeof=10
export PATH TERM PS1 PS2 ignoreeof
umask 022

/sbin/ifconfig eth0 192.168.1.254 netmask 255.255.255.0
/sbin/ifconfig plip1 192.168.2.254 pointopoint 192.168.2.1

/sbin/route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
/sbin/route add -host 192.168.2.1 dev plip1

ifconfig

383.2.4   /boot/

Come già accennato, esiste l'esigenza di comunicare al kernel l'esistenza di diverse schede di rete (altrimenti si può forse usare solo la porta parallela come seconda interfaccia di rete). Serve quindi il sistema di avvio LILO. Il modo con cui è possibile ottenere un dischetto contenente LILO è descritto nella sezione 18.4.

Il contenuto del file di esempio si riferisce in particolare ai parametri delle schede NE2000.

# /etc/lilo.conf

boot=/dev/fd0
map=/boot/map
install=/boot/boot.b
image=/boot/vmlinuz
        label=router
        root=/dev/fd0
        read-only
        append="ether=0,0x300,eth0 ether=0,0x320,eth1 ether=0,0x340,eth2"

Vale la pena di notare che il file system principale viene attivato in sola lettura e non viene mai riportato in lettura-scrittura.

383.3   Dimensioni

Tutto quanto, compreso il kernel, dovrebbe essere contenibile all'interno di un dischetto da 1 440 Kibyte, senza alcuna compressione. In questo modo non c'è la necessità di utilizzare un disco RAM e anche un elaboratore con poca memoria potrebbe svolgere degnamente questo compito (senza bisogno di una laboriosa configurazione).

383.4   File system in sola lettura

Il fatto che si riesca a operare senza eseguire scritture sul disco, pur non utilizzando un disco RAM, permette di non dover temere cadute di tensione o errori umani: Quando non serve più, basta spegnere.

Resta un problema dovuto al fatto che il kernel, una volta caricato in memoria, richiede la pressione del tasto [Invio] prima di attivare il file system principale. Ciò impedisce un avvio automatico. Utilizzando una piccola partizione di un disco fisso, la richiesta di scambiare i dischetti non viene più fatta.

383.4.1   File system /proc

Il fatto di utilizzare il dischetto in sola lettura impedisce il montaggio del file system /proc/ e di conseguenza i programmi ne risentono. Questo è il motivo principale per cui non si riesce a realizzare questo dischetto con programmi derivanti da distribuzioni GNU/Linux recenti.

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome nanorouter.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]