<- DaDaBIK - Indice Generale - Copertina - Software libero per il trattamento di problemi scientifici -> |
Sistemi Liberi
L'articolo...In questo primo articolo dedicato a User-Mode Linux vedremo cosa permette
di fare questa "tecnologia", compileremo un kernel UML e vedremo come
configurare la rete in modo che le varie istanze User-Mode Linux vi possano
accedere. |
User-Mode Linux permette di eseguire Linux su se stesso!
Vi starete sicuramente chiedendo come.
In poche parole User-Mode Linux è un kernel Linux che gira sopra ad
un altro kernel Linux e solo uno dei due (o più) accede effettivamente
all'hardware, mentre gli altri "girano" in user space, esattamente
come gli altri programmi. User-Mode Linux (UML per gli amici) non fornisce
però un modo per emulare diverse architetture hardware: in parole
povere sopra un kernel compilato per architettura Pentium deve per forza
"girare" un kernel per Pentium e non uno per Sparc.
Normalmente, il kernel Linux comunica con l'hardware, e i vari programmi in user space comunicano con il kernel.
Processo 1 |
Processo 2 |
... |
Kernel Linux |
||
Hardware |
Il kernel UML, invece di interagire direttamente con l'hardware, comunica con il "vero" kernel (d'ora in poi Kernel Host) come qualsiasi altro programma. I programmi possono essere eseguiti su un kernel UML come se fossero eseguiti su un normale kernel.
Processo 2 |
... |
|
Processo 1 |
User-Mode Linux |
|
Kernel Linux |
||
Hardware |
User-Mode Linux può essere utilizzato, per esempio, per eseguire kernel come utenti non-root, effettuare il debug del kernel come se fosse un normale processo, sperimentare nuovi kernel o patch o eseguire diverse distribuzioni contemporaneamente.
Uno dei vantaggi di UML è il fatto che possiamo provare configurazioni, programmi, distribuzioni su una macchina virtuale senza rischiare di compromettere il nostro sistema host. Inoltre, UML può essere utilizzato per effettuare servizi di virtual hosting in quanto possiamo dare ai nostri clienti/amici un sistema Linux completo e completamente modificabile da parte loro senza rischi per noi.
La compilazione di un kernel UML è quasi uguale alla compilazione del normale kernel Linux. I passaggi da seguire per la compilazione sono i seguenti (Attenzione! La compilazione non deve essere effettuata su /usr/src/linux):
mkdir /uml cd /uml tar -xjvf linux-version.tar.bz2 cd linux-version bzcat uml-patch-version.bz2 | patch -p1 |
make menuconfig ARCH=um |
make linux ARCH=um strip linux |
Ora nella cartella è presente l'eseguibile linux, che è il nostro nuovo kernel UML.
Se avete compilato il kernel con il supporto per i moduli (vi avevo consigliato di non farlo), in seguito all'installazione di un sistema in UML, dopo aver montato il root filesystem usato dall'istanza, dovete lanciare:
make modules ARCH=um make modules_install ARCH=um INSTALL_MOD_PATH=/mnt/uml_root_filesystem_mount_dir |
È necessario inoltre installare sul sistema host le utilità UML, sempre scaricabili da http://user-mode-linux.sourceforge.net.
tar -xjvf uml_utilities-versione.tar.bz2 cd uml_utilities-versione make && make install |
Ad un kernel UML è possibile passare parametri come se fosse un
normale kernel.
I parametri da passare per eseguire un'istanza li vedremo nel prossimo
articolo; in questa sede vedremo quali sono i parametri da passare al kernel
per la gestione dell'input/output dell'utente e dell'istanza UML.
Se lanciamo il kernel senza parametri particolari esso aprirà una
finestra xterm per ogni terminale definito in /etc/inittab
dell'istanza UML. Invece di usare xterm è possibile collegare
console e linee seriali UML a console del sistema host.
I parametri "ssl0=tty:/dev/tty9 con0=tty:/dev/tty10 con1=tty:/dev/tty11
con2=xterm" fanno sì che la prima linea seriale (ssl0) sia
collegata alla console 9, che la prima e la seconda console siano collegate
rispettivamente alla decima e all'undicesima console e che la terza console
UML sia collegata ad una xterm. Per sopprimere le altre console/linee
seriali UML è sufficiente aggiungere "ssl=none con=none" alla
riga di comando.
In questa parte vedremo una configurazione base della rete per UML prendendo in considerazione solo l'alternativa di rete via TUN/TAP. È necessario quindi aver installato le UML-utilities (prelevabili da http://user-mode-linux.sourceforge.net).
TUN/TAP è un dispositivo di rete virtuale punto-punto che permette di creare tunnel IP a livello kernel. Ovviamente il kernel del sistema host deve aver abilitato il supporto TUN/TAP.
(I comandi devono essere eseguiti come root.)
Per creare il device utilizziamo il comando:
tunctl -u <uid> chmod 666 /dev/net/tun |
dove <uid> è lo user-id dell'utente che potrà
accedere al device (in poche parole quello con cui eseguiremo l'istanza/le
istanze UML che dovranno avere accesso alla rete).
Il comando darà come output il nome del device creato. Se non sono
presenti altri device TUN/TAP il nome sarà tap0 e potrà
essere configurato come se fosse una normale interfaccia di rete.
Ora abbiamo due possibilità: configurare il device come bridge o come un normale device di rete dotato di indirizzo IP.
È sufficiente configurare il device tap0 con ifconfig, come se fosse una normale interfaccia di rete:
ifconfig tap0 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 up |
La scheda di rete "virtuale" dell'istanza UML sarà ora come una scheda connessa ad una rete con gateway 192.168.0.1.
Questa configurazione è da utilizzare nel caso la macchina host sia connessa ad una rete e si voglia che le istanze UML accedano direttamente alla rete a cui è connesso l'host. È necessario un kernel host con supporto per ethernet bridging e i vari strumenti in user space, reperibili su http://bridge.sourceforge.net.
brctl addbr br0 ifconfig eth0 promisc up ifconfig tap0 promisc up ifconfig br0 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 up |
L'ultima riga serve per assegnare comunque alla macchina host un indirizzo IP (quello che precedentemente era assegnato alla scheda eth0).
brctl stp br0 off brctl setfd br0 1 brctl sethello br0 1 brctl addif br0 eth0 brctl addif br0 tap0 |
Ora le istanze UML potranno accedere direttamente alla rete dell'host.
La configurazione sulla macchina host è conclusa.
Il parametro della riga di comando del kernel UML per l'attivazione della rete è "eth0=tuntap,tap0".
Ora l'istanza UML avrà una scheda di rete "virtuale" chiamata eth0, configurabile come una normale scheda di rete.
L'autoreStefano Sasso utilizza Linux dal 2000 e si diverte a programmare in Perl, PHP e Python. È anche amministratore del server web del suo liceo, dove frequenta la classe quinta. |
<- DaDaBIK - Indice Generale - Copertina - Software libero per il trattamento di problemi scientifici -> |