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
4
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è...
5
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 6
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
7
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
8
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
9
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
...
10
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
11
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
12
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 13
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!) 15
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
16
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?
17
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 rete
ifconfig eht1 192.168.22.5 netmask 255.255.255.248 up
18
20. Gestione device – Esempio (4)
Considerando la nuova rete, è possibile ottimizzare il
routing dei pacchetti?
– No, perchè...
– Si, configurando...
20
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
21
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?
22
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
23
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)
24
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? 25