Introduzione Alla Uml Mconsole

Post on 10-Jul-2015

460 views 2 download

transcript

1

NETWORKING CONUSER MODE LINUXE uml_mconsole

2

Configurazione della rete

3

Scopo dell'esperienza (1)

Creare 4 sistemi in rete come nella figura

4

Scopo dell'esperienza (2)

• Quattro nodi

– Node11-3

– Node11-5

– NodeX

– Node22-1

• Due sottoreti

– 192.168.11.0, legata a switch1

– 192.168.22.0, legata a switch2

– Netmask1=255.255.255.240

– netmask2=255.255.255.248

• Obiettivo: far comunicare i nodi attraverso le due sottoreti

5

Presentazione dei componenti della rete

• switch1

– connesso alla socket unix /tmp/uml1.ctl

• switch2

– connesso alla socket unix /tmp/uml2.ctl

• Node11-3

...

• Node11-5

analogo a node11-3 ma...

• Node22-1

analogo a Node11-3 ma...

• NodeX

diverso dai precedenti perchè...

6

Due parole su come si scompatta un archivio

• tar (TApe aRchive)

• Opzioni

– -v (verbose operation)

– comando -x scompatta -t mostra contenuto

– algoritmo di compressione -Z compress (archivi .tar.Z) -z gzip (archivi .tar.gz) -j bzip2 (archivi .tar.bz2)

– -f file

• Esempio: tar -xzvf archivio.tar.gz

7

Primo passo: preparare i sistemi UML

• Assicurarsi di avere le immagini dei filesystem nella opportuna directory

– NOTA: MAI lavorare in $HOME, SEMPRE in /tmp

– usiamo l'immagine debian5c.ext2 (sperando che stavolta funzioni, altrimenti installato.ext2)

• Fare partire il supporto per la rete (i due switch virtuali)

– switch1

$ ./uml_switch -unix /tmp/uml1.ctl

– switch2

$ ./uml_switch -unix /tmp/uml2.ctl

8

Errori comuni

• Mettere lo spazio tra i sottoparametri del kernel

– NO: ubd0=file.cow, file.ext2

– SI: ubd0=file.cow,file.ext2

• Sbagliare a scrivere i nomi dei parametri

– NO: udb

– SI: ubd

– NO: demon o damon

– SI: daemon

• Terminare in modo sporco i processi UML

– MAI chiudere le finestre di UML, dare il comando shutdown dalla linea di comando del sistema UML

9

Secondo passo: configurare i nodi (1)

• Si fa il login su ciascuno dei nodi e si lavora da linea di comando sui nodi virtuali

• Login:

– Username: root

– Password nulla (basta battere invio, se non funziona provare con “root”)

• Dare un nome ai nodi:

– Editare il file /etc/hostname in modo che contenga il nome del nodo

10

Secondo passo: configurare i nodi (2)

• Inserire le giuste informazioni di rete per risolvere i nomi

– Si agisce sul file /etc/hosts

– Alla fine ogni nodo dovrebbe avere un file fatto in questo modo:

127.0.0.1 localhost

192.168.11.3 Node11-3

...

11

Quarto passo: configurare le interfacce di rete (1)

• Si usa il file /etc/network/interfaces

• Il file contiene diverse direttive

– Direttiva auto: quali interfacce vanno inizializzate all'avvio della macchina auto lo auto eth0 auto eth1 (per node2)

– Direttiva iface: una per ogni interfaccia iface <nome> inet <modalità> <nome> vale lo, eth0, eth1 inet indica che sono interfacce TCP/IP

12

Quarto passo: configurare le interfacce di rete (2)

• Direttiva iface nel file /etc/network/interfaces

– <modalità> vale dhcp = inizializzazione dell'interfaccia in modo automatico col

protocollo dhcp loopback = interfaccia locale (127.0.0.1) static = seguono parametri per configurare l'interfaccia

– Configurazione statica di un'interfaccia address = indirizzo IP dell'interfaccia (192.168.X.Y) netmask = 255.255.255.0 network = indirizzo della rete (192.168.X.0) broadcast = indirizzo di broadcast (192.168.X.255) gateway = solo per node1 e node3, l'indirizzo dell'interfaccia

di node2 che si affaccia sulla sottorete

13

Quinto passo: mettere tutto insieme

• Possiamo riavviare tutti e tre i sistemi

$ reboot

• In alternativa possiamo forzare il riavvio delle interfacce di rete con i comandi

– ifdown <interfaccia>, ifup <interfaccia> oppure

– /etc/init.d/networking restart

• In entrambi i casi abbiamo comunicazione entro una sottorete

– Facendo login da Node11-3 riusciamo a fare ping su Node11-5 e viceversa

– Ogni nodo deve essere in grado di pingare NodeX

– Dopo una “particolare operazione” tutti i nodi pingano tra loro

14

Sfruttiamo la uml_mconsole

15

uml_mconsole

La uml_mconsole è un prezioso strumento che ci permette di intervenire dall'esterno sui nodi senza la necessità di fermarli.

La sintazzi tipica è:

uml_mconsole umid request

se abbiamo più richieste per la stessa macchina

uml_mconsole umid

• IMPORTANTE: se vogliamo usare la uml_mconsole quando lanciamo le macchine dobbiamo passare l'pzione umid=xyz (xyz=nome del nodo!)

16

uml_mconsole – comandi principali

I comandi principali sono:

• quit -> ci fa uscire dalla console

• help -> ci mostra I comandi disponibili

• halt -> spegne la macchina

• reboot -> riavvia la macchina

• cad -> manda il segnale cad gestito da /etc/inittab

• config dev=config -> aggiunge il dispositivo dev alla macchina

• remove dev -> rimuove il dispositivo dev

• sysrq lettter -> esegue l'azione associata a letter

• stop -> mette in pausa la macchina

• go -> fa ripartire una macchina fermata in precedenza

17

Gestione device – Esempio (1)

Facciamo riferimento all'esercizio precedente e ipotizziamo di voler collegare il nodo11-5 anche alla sottorete 192.168.22.0

Cosa bisogna fare?

• Basta modificare il file /et/network/interfaces?

• Basta prendere un altro cavo e attaccarlo allo switch2?

• Occorre inevitabilmente spegnere la macchina e farla ripartire con un nuovo comando?

• Altre ipotesi?

18

Gestione device – Esempio (2)

Usiamo la uml_mconsole

1) Ci connettiamo

uml_mconsole Node11-5

2) Aggiungiamo un'interfaccia

config eth1=daemon,,unix,/tmp/uml2.ctl

3) Usciamo dalla uml_mconsole

quit

4) Configuriamo l'interfaccia all'interno della reteifconfig eht1 192.168.22.5 netmask 255.255.255.248 up

19

Gestione device – Esempio (3)

20

Gestione device – Esempio (4)

Considerando la nuova rete, è possibile ottimizzare il routing dei pacchetti?

– No, perchè...

– Si, configurando...

21

uml_mconsole – segnali

La possibilità di inviare segnali alle macchine è molto utile. Vediamo i segnali più utili:• cad → equivalente a Ctrl+Alt+Del• b →reboot, UML cleanup• i →uccide tutti i task mandando un SIGKILL• e → terminiamo tutti i task mandando un SIGTERM• m → mostra l'utilizzo della memoria• p → Esegue il dump dei registri e dello stack• s → sincronizza i dati “dirty” sull'unità di storage

22

Utilizzo dei segnali - Esempio

Supponiamo di voler effettuare una copia di backup di una macchina senza volerla spegnere e riaccendere.

Cosa bisogna fare?

• Fare il dump della memoria della macchina host e ricostruire lo stato della memoria della macchina virtuale

• È sufficiente copiare il file .cow senza particolari accorgimenti

• Altro?

23

Utilizzo dei segnali - Esempio

La procedura da seguire per un corretto backup è:

• $uml_mconsole Node11-5 stop

OK

• $uml_mconsole Node11-5 sysrq s

SysRq: Emergency Sync

• $cp Node11-5.cow Node11-5-backup.cow

• $uml_mconsole Node11-5 stop

OK

24

hostfs

Dall'interno delle macchine virtuali è possibile accedere a risorse esterne in due differenti modalità:

• Tramite la rete

• Accedendo direttamente al file system dell'host

Nel primo caso è necessario avere permessi speciali per poter configurare risorse di rete sulla macchina host.

Nel secondo caso abbiamo la possibilità di accedere all'intero file system della macchina host (con qualche limitazione)

25

hostfs – Come Funziona

Il comando da utilizzare all'interno della macchina virtuale è estremamente semplice:

UML$ mount none /mnt -t hostfs [-o /tmp]

Analizziamo il comando nel dettaglio:

• mount → comando per montare file system (fs)

• none → dispositivo su cui si trova il fs

• /mnt → directory in cui montare il fs

• -t hostfs → tipo di fs

• -o /tmp → directory dell'host file system che si vuole montare (assieme alle sottodirectory)

Esercizio: montate la cartella /tmp dell'host e provate ad aprire un file con vim sia dal lato UML che da lato host. Cosa succede?

26

Esercizio

Per chi è stato veloce e ha già finito.