10764
Comment:
|
15188
|
Deletions are marked like this. | Additions are marked like this. |
Line 23: | Line 23: |
Il file modello usato si trova nella directory di installazione di netkit ($NETKIT_HOME) nella sottodirectory "fs" e si chiama "netkit-fs". In effetti esso è un link logico al file netkit-fs-i386-F5.0. | Il file modello usato si trova nella directory di installazione di netkit ($NETKIT_HOME) nella sottodirectory "fs" e si chiama "netkit-fs". In effetti esso è un link simbolico al file netkit-fs-i386-F5.0. |
Line 211: | Line 211: |
<<BR>> Una alternativa è rimuovere il link logico "netkit-fs" al file originale netkit-fs-i386-F5.0 con un link al nostro nuovo file. <<BR>> In questo caso entrambi i parametri si possono omettere. Nel resto del documento supponiamo che si sia scelta questo metodo. |
Una alternativa è rimuovere il link simbolico "netkit-fs" al file originale netkit-fs-i386-F5.0 e creare un nuovo link al nostro nuovo file. <<BR>> In questo caso entrambi i parametri si possono omettere. Nel resto del documento supponiamo che si sia scelto questo secondo metodo. |
Line 242: | Line 241: |
Ci serve un DNS server per il sistema ospite. Possiamo usare opendns se non sappiamo quale usare. Dentro il sistema ospite modificare il file {{{/etc/resolv.conf}}} per inserire la riga | Ci serve un DNS server per il sistema ospite. Possiamo usare opendns (208.67.222.222) se non sappiamo quale usare. Dentro il sistema ospite modificare il file {{{/etc/resolv.conf}}} per inserire la riga |
Line 251: | Line 250: |
'''NOTA''': l'installazione di build-essential richiede qualche interazione con l'utente | '''NOTA''': l'installazione di build-essential richiede qualche interazione con l'utente. |
Line 260: | Line 259: |
Le prossime istruzioni creano alcuni link simbolici necessari alle prossime installazioni. {{{ cd /usr/lib ln -s libcrypto.so.0.9.8 libcrypto.so.0 ln -s libssl.so.0.9.8 libssl.so.0 }}} |
|
Line 266: | Line 272: |
tar jxf stackless-262-export.tar.bz2 | tar xf stackless-262-export.tar.bz2 |
Line 274: | Line 280: |
Dopo va installato M2Crypto. <<BR>> Sempre dall'interno della macchina virtuale diamo questi comandi. |
Dopo va installato {{{M2Crypto}}}. Scaricare da [[http://chandlerproject.org/Projects/MeTooCrypto#Downloads]] e scompattare nella macchina virtuale. <<BR>> Dall'interno della macchina virtuale, dentro la directory scompattata da {{{M2Crypto-0.20.1.tar.gz}}}, diamo questi comandi. {{{ /opt/stackless/bin/python2.6 setup.py build /opt/stackless/bin/python2.6 setup.py install }}} Dopo va installato {{{dnspython}}}. <<BR>> Dall'interno della macchina virtuale diamo questi comandi. |
Line 279: | Line 293: |
wget http://www.stackless.com/binaries/stackless-262-export.tar.bz2 tar jxf stackless-262-export.tar.bz2 cd stackless-262-export mkdir -p /opt/stackless ./configure --prefix=/opt/stackless make make altinstall }}} === Netsukuku === Invece di installare netsukuku, si può avviare il demone dalla directory di lavoro del proprio sistema host. Dalla macchina virtuale si vede la directory home dell'host dentro la directory "/hosthome". <<BR>> Quindi si può lanciare il demone ad esempio posizionandosi sulla directory /hosthome/netsukuku/pyntk. {{{ }}} |
wget http://www.dnspython.org/kits/1.7.1/dnspython-1.7.1.tar.gz tar xf dnspython-1.7.1.tar.gz cd dnspython-1.7.1 /opt/stackless/bin/python2.6 setup.py build /opt/stackless/bin/python2.6 setup.py install }}} Non installiamo netsukuku; potremo avviare il demone dalla directory di lavoro del nostro sistema host. Fermiamo la macchina virtuale dando il comando: {{{ halt }}} Dopo che si è chiusa la finestra, vediamo che nel nostro sistema, nella directory da cui abbiamo avviato la macchina virtuale, si trova ora un file {{{pc1.disk}}} === Apportare le modifiche sul file modello === A partire dal file modello e dal file delle differenze si può creare un nuovo file "modello". Dal terminale del nostro sistema, diamo il comando: {{{ uml_moo -b <backing> pc1.disk <newbacking> }}} {{{uml_moo}}} è parte del software User Mode Linux. <<BR>> Il primo file passato a parametro nella riga sopra è il file backing che stiamo usando. Se abbiamo seguito tutto questo documento, si tratta del file ampliato a 2 GB che abbiamo messo nella directory netkit/fs. <<BR>> Il secondo è il file differenziale prodotto avviando la macchina virtuale "pc1". Queste differenze rappresentano le installazioni appena fatte. <<BR>> Il terzo è il nome di un nuovo file che potremo in seguito usare come modello delle nostre macchine virtuali. Di nuovo, ora che abbiamo il nuovo modello che ha 2 GB a disposizione e con le installazioni che ci servono, possiamo usarlo come modello in 2 modi: aggiungendo i 2 parametri ogni volta: <<BR>> {{{ -m /path/to/file/newbacking}}} <<BR>> {{{ --append=root=98:1}}} <<BR>> oppure sostituendo il link simbolico "netkit/fs/netkit-fs" con un nuovo link al nostro nuovo file. <<BR>> Nel resto del documento supponiamo che si sia scelto questo secondo metodo. In ogni caso, rimuoviamo il file pc1.disk che usava il vecchio modello. {{{ rm pc1.disk }}} == Avviare delle macchine virtuali e testare ntkd == In seguito, quando lanciamo una macchina virtuale, non avremo bisogno di una interfaccia di rete virtuale collegata ad Internet, ma di una o più interfacce virtuali collegate ad un "dominio di collisione" virtuale. Il seguente comando {{{ vstart pc1 --eth0=A --eth1=B --mem=64 }}} avvia una macchina virtuale con due schede virtuali (eth0 ed eth1) collegate a 2 domini diversi, uno chiamato "A" e l'altro "B". Queste interfacce non vengono affatto inizializzate dal sistema operativo caricato nelle macchine virtuali di netkit. Questa quindi è la situazione ottimale per verificare che il demone ntkd le renda effettivamente utilizzabili. === Una semplice topologia di rete === Supponiamo di voler provare questa topologia di rete: {{{ Collision Domain A | V pc1 ------------- pc2 \ / \ / Collision Domain \ / Collision Domain B ----> \ / <----- C \ / \ / pc3 }}} Possiamo farlo con questi comandi: {{{ vstart pc1 --eth0=A --eth1=B --mem=64 vstart pc2 --eth0=A --eth1=C --mem=64 vstart pc3 --eth0=B --eth1=C --mem=64 }}} Si avviano 3 macchine virtuali le cui console appaiono in 3 finestre. Scarichiamo nel nostro sistema da svn la versione corrente di Netsukuku. <<BR>> Mettiamo un link simbolico nella nostra home. {{{ cd ln -s path/to/netsukuku_trunk netsukuku }}} Quindi {{{~/netsukuku/pyntk}}} è la directory che contiene la versione python di netsukuku. Dalla console di ogni macchina virtuale che abbiamo avviata diamo questi comandi: {{{ cd /hosthome/netsukuku/pyntk /opt/stackless/bin/python2.6 ntkd -i eth0 eth1 -vvvv }}} Ora si hanno le basi per provare il funzionamento di netsukuku. <<BR>> Ci sono anche delle scripts nel repository che aiutano a preparare ambienti complessi. In questo modo è possibile riprodurre automaticamente una certa situazione per fare debug o produrre dei log che possono aiutare a trovare anomalie o punti critici. <<BR>> Una pagina che spiega nel dettaglio l'uso di queste script è in lavorazione [[../ScriptsWithNetkit|qui]]. |
HowTo test netsukuku daemon using NetKit
Un modo di provare il funzionamento di Netsukuku (se non si dispone di una variegata infrastruttura di reti e di un numero cospicuo di computer) può essere l'uso di NetKit.
Lo scopo di questa pagina è quello di raccogliere le informazioni che possono aiutare i nuovi arrivati a preparare un ambiente in cui simulare una arbitraria topologia di rete i cui nodi sono in grado di eseguire il demone ntkd.
Preparare una macchina virtuale per eseguirci ntkd
Installiamo la versione più recente di Netkit (core version 2.6 - file system 5.0 - kernel version 2.7)
Per istruzioni vedere http://wiki.netkit.org/index.php/Main_Page.
Una volta installato, le macchine virtuali avranno un sistema operativo basato su Debian.
Potremo quindi usare apt-get per installare al loro interno il software di cui abbiamo bisogno. E' necessario che il nostro computer sia collegato a Internet.
Dobbiamo anche fare in modo di avere abbastanza spazio nel disco virtuale.
Aumentare lo spazio disco della macchina virtuale
Le macchine virtuali che si usano in Netkit hanno un disco virtuale. Tale disco è rappresentato da un file "modello" che non viene alterato, e da un altro file che contiene solo le differenze rispetto al modello.
Il file modello usato si trova nella directory di installazione di netkit ($NETKIT_HOME) nella sottodirectory "fs" e si chiama "netkit-fs". In effetti esso è un link simbolico al file netkit-fs-i386-F5.0.
La dimensione del disco rappresentato da questo file è di 1 GB. Troppo poco per i nostri bisogni. Vediamo come ampliarla.
Copiamo, per sicurezza, il file originale.
Con il comando "ls -ls" vediamo sia la dimensione dichiarata che lo spazio effettivo su disco.
I 2 valori differiscono per i cosidetti sparse-file, come le immagini di disco che non sono "piene".
luca@luca-laptop:~/netkit/fs$ cp netkit-fs-i386-F5.0 backing luca@luca-laptop:~/netkit/fs$ ls -ls backing 1048584 -rw-r--r-- 1 luca luca 1073741824 2009-09-10 15:46 backing
Aumentiamo le dimensioni "dichiarate" del file a 2 GB.
luca@luca-laptop:~/netkit/fs$ dd if=/dev/zero of=backing bs=1 count=1 seek=2G 1+0 records in 1+0 records out 1 byte (1 B) copied, 9.9803e-05 s, 10.0 kB/s luca@luca-laptop:~/netkit/fs$ ls -ls backing 1048588 -rw-r--r-- 1 luca luca 2147483649 2009-09-10 15:47 backing
Espandiamo la partizione che si trova all'interno di questa immagine di disco virtuale.
luca@luca-laptop:~/netkit/fs$ sudo losetup /dev/loop0 backing luca@luca-laptop:~/netkit/fs$ sudo fdisk /dev/loop0 The number of cylinders for this disk is set to 66576. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK)
Il comando u dice che vogliamo vedere come unità il settore e non il cilindro.
Command (m for help): u Changing display/entry units to sectors
Il comando p mostra le informazioni del disco.
Command (m for help): p Disk /dev/loop0: 2147 MB, 2147483648 bytes 1 heads, 63 sectors/track, 66576 cylinders, total 4194304 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/loop0p1 * 64 2097143 1048540 83 Linux
Notiamo che la partizione attualmente inizia al settore 64. Dovremo usare in seguito questo valore.
Cancelliamo la partizione e la ricreiamo più grande.
Useremo 64 come inizio e il default come fine.
d per cancellare, n per creare, p per primaria, 1 come partition number, 64 come inizio, invio quando ci chiede la fine.
Command (m for help): d Selected partition 1 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First sector (63-4194303, default 63): 64 Last sector, +sectors or +size{K,M,G} (64-4194303, default 4194303): Using default value 4194303
Il comando p mostra le informazioni del disco.
Command (m for help): p Disk /dev/loop0: 2147 MB, 2147483648 bytes 1 heads, 63 sectors/track, 66576 cylinders, total 4194304 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/loop0p1 64 4194303 2097120 83 Linux
Il comando a rende la partizione bootable, come era prima.
Command (m for help): a Partition number (1-4): 1 Command (m for help): p Disk /dev/loop0: 2147 MB, 2147483648 bytes 1 heads, 63 sectors/track, 66576 cylinders, total 4194304 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/loop0p1 * 64 4194303 2097120 83 Linux
Il comando w salva ed esce.
Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 22: Invalid argument. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks.
Possiamo ignorare quel warning. Ora rimuoviamo l'associazione a /dev/loop0
luca@luca-laptop:~/netkit/fs$ sudo losetup -d /dev/loop0
Ora facciamo un calcolo. La nostra partizione inizia al settore 64 e ogni settore (come visualizzato da fdisk) è di 512 bytes.
Quindi la partizione inizia ad un offest di 64*512=32768 bytes.
Associamo a /dev/loop0 questa partizione con il seguente comando.
luca@luca-laptop:~/netkit/fs$ sudo losetup --offset 32768 /dev/loop0 backing
Un fschk, un resize e un nuovo fschk servono per rendere effettiva la nuova allocazione.
luca@luca-laptop:~/netkit/fs$ sudo e2fsck -f /dev/loop0 e2fsck 1.41.4 (27-Jan-2009) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 3A: Optimizing directories Pass 4: Checking reference counts Pass 5: Checking group summary information nkfs-i386-F5.0: ***** FILE SYSTEM WAS MODIFIED ***** nkfs-i386-F5.0: 39840/65536 files (2.2% non-contiguous), 725259/1048540 blocks luca@luca-laptop:~/netkit/fs$ sudo resize2fs -f /dev/loop0 resize2fs 1.41.4 (27-Jan-2009) Resizing the filesystem on /dev/loop0 to 2097120 (1k) blocks. The filesystem on /dev/loop0 is now 2097120 blocks long. luca@luca-laptop:~/netkit/fs$ sudo e2fsck -f /dev/loop0 e2fsck 1.41.4 (27-Jan-2009) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information nkfs-i386-F5.0: 39840/131072 files (2.2% non-contiguous), 742160/2097120 blocks
Di nuovo rimuoviamo l'associazione a /dev/loop0
luca@luca-laptop:~/netkit/fs$ sudo losetup -d /dev/loop0
Il file backing così ottenuto può essere usato come "modello" per le macchine virtuali che avviamo in Netkit.
Possiamo farlo in 2 modi. Il primo è quello di aggiungere questi 2 parametri ogni volta che avviamo una macchina virtuale:
-m /path/to/file/backing
--append=root=98:1
Una alternativa è rimuovere il link simbolico "netkit-fs" al file originale netkit-fs-i386-F5.0 e creare un nuovo link al nostro nuovo file.
In questo caso entrambi i parametri si possono omettere. Nel resto del documento supponiamo che si sia scelto questo secondo metodo.
Installazione pacchetti da Internet
Assicuriamoci di avere la password di root del nostro sistema. Non si tratta della password nostra con la quale possiamo usare "sudo"; ma della password associata a root.
Per accertarci, diamo il comando "su -" che ci richiede appunto la password di root.
Dopo aver verificato, usciamo dalla shell di root e torniamo nella shell del nostro utente.
Nel terminale del nostro sistema, ci posizioniamo su una directory vuota creata per questi test.
Diamo il comando:
vstart pc1 --eth0=tap,10.0.0.1,10.0.0.2 --mem=64
Viene richiesta la password di root.
Questo modo di avviare la macchina virtuale consente di accedere dalla macchina virtuale a Internet.
E' possibile che sia necessario eseguire anche i seguenti comandi, sempre dal terminale del nostro sistema, per fare in modo che il sistema ospite (virtuale) esca su Internet.
sudo ifconfig nk_tap_$(whoami) 10.0.0.1 netmask 255.255.255.0 up sudo iptables -t nat -A POSTROUTING -s 10.0.0.2 -j MASQUERADE sudo iptables -A FORWARD -i nk_tap_+ -j ACCEPT
Ci serve un DNS server per il sistema ospite. Possiamo usare opendns (208.67.222.222) se non sappiamo quale usare. Dentro il sistema ospite modificare il file /etc/resolv.conf per inserire la riga
nameserver 208.67.222.222
A questo punto dovremmo essere in grado di "navigare" dal sistema ospite. Possiamo provare con "ping www.ubuntu.com".
Se tutto funziona diamo i seguenti comandi per installare alcuni pacchetti necessari.
NOTA: l'installazione di build-essential richiede qualche interazione con l'utente.
apt-get update apt-get install build-essential apt-get install subversion apt-get install swig apt-get install openssl libssl-dev
Le prossime istruzioni creano alcuni link simbolici necessari alle prossime installazioni.
cd /usr/lib ln -s libcrypto.so.0.9.8 libcrypto.so.0 ln -s libssl.so.0.9.8 libssl.so.0
Dopo va installato Stackless Python.
Sempre dall'interno della macchina virtuale diamo questi comandi.
cd wget http://www.stackless.com/binaries/stackless-262-export.tar.bz2 tar xf stackless-262-export.tar.bz2 cd stackless-262-export mkdir -p /opt/stackless ./configure --prefix=/opt/stackless make make altinstall
Dopo va installato M2Crypto. Scaricare da http://chandlerproject.org/Projects/MeTooCrypto#Downloads e scompattare nella macchina virtuale.
Dall'interno della macchina virtuale, dentro la directory scompattata da M2Crypto-0.20.1.tar.gz, diamo questi comandi.
/opt/stackless/bin/python2.6 setup.py build /opt/stackless/bin/python2.6 setup.py install
Dopo va installato dnspython.
Dall'interno della macchina virtuale diamo questi comandi.
cd wget http://www.dnspython.org/kits/1.7.1/dnspython-1.7.1.tar.gz tar xf dnspython-1.7.1.tar.gz cd dnspython-1.7.1 /opt/stackless/bin/python2.6 setup.py build /opt/stackless/bin/python2.6 setup.py install
Non installiamo netsukuku; potremo avviare il demone dalla directory di lavoro del nostro sistema host.
Fermiamo la macchina virtuale dando il comando:
halt
Dopo che si è chiusa la finestra, vediamo che nel nostro sistema, nella directory da cui abbiamo avviato la macchina virtuale, si trova ora un file pc1.disk
Apportare le modifiche sul file modello
A partire dal file modello e dal file delle differenze si può creare un nuovo file "modello".
Dal terminale del nostro sistema, diamo il comando:
uml_moo -b <backing> pc1.disk <newbacking>
uml_moo è parte del software User Mode Linux.
Il primo file passato a parametro nella riga sopra è il file backing che stiamo usando. Se abbiamo seguito tutto questo documento, si tratta del file ampliato a 2 GB che abbiamo messo nella directory netkit/fs.
Il secondo è il file differenziale prodotto avviando la macchina virtuale "pc1". Queste differenze rappresentano le installazioni appena fatte.
Il terzo è il nome di un nuovo file che potremo in seguito usare come modello delle nostre macchine virtuali.
Di nuovo, ora che abbiamo il nuovo modello che ha 2 GB a disposizione e con le installazioni che ci servono, possiamo usarlo come modello in 2 modi: aggiungendo i 2 parametri ogni volta:
-m /path/to/file/newbacking
--append=root=98:1
oppure sostituendo il link simbolico "netkit/fs/netkit-fs" con un nuovo link al nostro nuovo file.
Nel resto del documento supponiamo che si sia scelto questo secondo metodo.
In ogni caso, rimuoviamo il file pc1.disk che usava il vecchio modello.
rm pc1.disk
Avviare delle macchine virtuali e testare ntkd
In seguito, quando lanciamo una macchina virtuale, non avremo bisogno di una interfaccia di rete virtuale collegata ad Internet, ma di una o più interfacce virtuali collegate ad un "dominio di collisione" virtuale.
Il seguente comando
vstart pc1 --eth0=A --eth1=B --mem=64
avvia una macchina virtuale con due schede virtuali (eth0 ed eth1) collegate a 2 domini diversi, uno chiamato "A" e l'altro "B".
Queste interfacce non vengono affatto inizializzate dal sistema operativo caricato nelle macchine virtuali di netkit. Questa quindi è la situazione ottimale per verificare che il demone ntkd le renda effettivamente utilizzabili.
Una semplice topologia di rete
Supponiamo di voler provare questa topologia di rete:
Collision Domain A | V pc1 ------------- pc2 \ / \ / Collision Domain \ / Collision Domain B ----> \ / <----- C \ / \ / pc3
Possiamo farlo con questi comandi:
vstart pc1 --eth0=A --eth1=B --mem=64 vstart pc2 --eth0=A --eth1=C --mem=64 vstart pc3 --eth0=B --eth1=C --mem=64
Si avviano 3 macchine virtuali le cui console appaiono in 3 finestre.
Scarichiamo nel nostro sistema da svn la versione corrente di Netsukuku.
Mettiamo un link simbolico nella nostra home.
cd ln -s path/to/netsukuku_trunk netsukuku
Quindi ~/netsukuku/pyntk è la directory che contiene la versione python di netsukuku.
Dalla console di ogni macchina virtuale che abbiamo avviata diamo questi comandi:
cd /hosthome/netsukuku/pyntk /opt/stackless/bin/python2.6 ntkd -i eth0 eth1 -vvvv
Ora si hanno le basi per provare il funzionamento di netsukuku.
Ci sono anche delle scripts nel repository che aiutano a preparare ambienti complessi. In questo modo è possibile riprodurre automaticamente una certa situazione per fare debug o produrre dei log che possono aiutare a trovare anomalie o punti critici.
Una pagina che spiega nel dettaglio l'uso di queste script è in lavorazione qui.