BootTorrent

Il progetto

Il progetto di tesi consiste nello sviluppo di una nuova procedura basata su BitTorrent in grado di migliorare le prestazioni del boot di rete via PXE-DHCP-TFTP. Il progetto è quasi concluso e al momento l'ultima versione realizzata dovrebbe essere quella definitiva che può essere personalizzata tramite parametri. Le istruzioni disponibili su questa pagina verranno completate e aggiornate man mano quindi se trovate indicazioni incomplete o poco chiare potete segnalarlo tramite mail (davide[dot]bruschi[at]studenti[dot]unimi[dot]it) o nei commenti a fondo pagina.

Tutto quello che è stato realizzato è reso disponibile sotto licenza GPL. Dato che tutti gli strumenti utilizzati (SliTaz, BitTorrent e Aria2) sono disponibili, a loro volta, sotto licenza GPL o comunque come software free, tutto quello che trovate su questa pagina è liberamente utilizzabile.

NOTA: per una descrizione più dettagliata del progetto si legga la tesi linkata all'inizio della pagina.

Se trovate questo lavoro interessante e decidete di utilizzare il tool e la procedura proposti, sarebbe gradito un vostro commento di feedback a fondo pagina. :)

Davide Bruschi

Breve descrizione della nuova procedura:

La nuova procedura di boot proposta funziona nel seguente modo:

  • I computer vengono avviati tramite wake-on-lan
  • Ogni pc ottiene la configurazione IP tramite DHCP
  • A questo punto ogni pc scarica il kernel e l'immagine di SliTaz (entrambi i files sono forniti sotto) tramite TFTP (sono circa 13MB quindi non creano particolari problemi nonostante il TFTP)
  • SliTaz viene avviata, e automaticamente inizia il download, tramite BitTorrent, dei files (kernel + file system compresso) del sistema finale da caricare in RAM
  • Al termine del download di questi files, viene eseguita una kexec che permette di avviare il sistema finale sostituendo quello temporaneo usato per il download tramite BitTorrent

Il server DHCP/TFTP richiede le seguenti modifiche:

  • Bisogna prendere i files di SliTaz e vanno messi nella cartella del server TFTP al posto di quelli del sistema finale
  • Va aggiornato il file syslinux.cfg del server TFTP con le opportune opzioni
  • Fatte queste modifiche è necessario installare i pacchetti bittorrent e aria2 disponibili sul repository
  • Il pacchetto bittorrent ci servirà per attivare il tracker (i comandi disponibili dopo l'installazione possono variare in base alla distribuzione in uso… si usi dpkg -L bittorrent per verificare i comandi effettivamente disponibili dopo l'installazione)
  • Il pacchetto aria2 è il client torrent per distribuire i files del sistema finale
  • Terminata la preparazione basta creare una cartella in cui copiare i files del sistema finale e lo script per avviare il tracker e la condivisione dei files

Si forniranno ora gli script (generalizzati) e i files necessari per l'uso del tool:

File syslinux.cfg (da usare nel server TFTP)

default base

label base
	kernel ./bzImage
	append initrd=./rootfs4.lzma lang=it_IT kmap=it rw root=/dev/null ip=dhcp vga=normal autologin

Script da usare sul server

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Questo script usa i pacchetti bittorrent e aria2 disponibili nei repository +
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#Attivo il Tracker in background sulla porta 8000 (ovviamente posso specificare
# quella che voglio)

echo ">>> Avvio il Tracker http://indirizzodelserver:8000/announce"
/usr/bin/bittorrent-tracker --port 8000 --dfile dfile > log_tracker.txt &

#Creo i torrent e li associo al Tracker (va fatto ogni volta perche' 
#se il file cambia, il nome del file e' lo stesso ma l'hash nel metafile e' diverso)
#(ip e porta sono modificabili a piacere in base alle proprie impostazioni di rete)

echo ">>> Creo i torrent aggiornati e li pubblico sul Tracker"

/usr/bin/maketorrent-console http://indirizzodelserver:8000/announce SILab 

#Avvio il client passandogli tutti i torrent nella cartella corrente

echo ">>> Avvio la condivisione dei torrent"

#imposto il seed-ratio a 999.0 in modo che sia un valore talmente alto da non essere raggiunto 
#in questo modo aria2 resta aperto in seeding finche' non viene chiuso a mano

aria2c --enable-dht=false --disable-ipv6=true --bt-seed-unverified=true --seed-ratio=999.0 --listen-port=6882 SILab.torrent

#Nel commento la versione con RPC attivo.
#aria2c --enable-rpc --rpc-listen-all --disable-ipv6=true --bt-seed-unverified=true --seed-ratio=999.0 *.torrent


#Killo il tracker alla fine del lavoro (in realta' puo' convenire farlo a mano)

echo ">>> Termino il tracker"
kill $(pidof -x bittorrent-tracker)

Script usato nell'immagine SliTaz (btboot.sh)

#!/bin/ash

#Download dei file tramite torrent (versione senza RPC attivo)

aria2c --enable-dht=false --disable-ipv6=true --seed-time=0 --file-allocation=none -j5 /torrent/SILab.torrent


#Preparazione ed esecuzione kexec (esempio con l'immagine del SiLab)

kexec -l SILab/2.6.39-gentoo-r3 --append="ramdisk_size=1228800 root=/dev/ram rw ip=dhcp udev nodevfs" --initrd=SILab/diskless.img.gz

kexec -e

L'immagine di SliTaz e il relativo kernel

NOTA: nelle immagini riportate sotto, lo script di boot è richiamato da “etc/init.d/local.sh” invece di essere specificato in “etc/rcS.conf”; il risultato tuttavia è il medesimo.

NOTA2: le immagini sono presentate in ordine inverso, in modo che la versione più recente sia sempre la prima dell'elenco

Versione aggiornata al 07/03/2014 (parametrizzata):

NEWS:

  • Anche questa versione è basata sulla SliTaz rolling rilasciata il 16/02/2014 link.
  • In questa versione è stato installato anche l'interprete bash per esigenze di scripting (si veda sotto per i dettagli), tuttavia la dimensione è rimasta pressoché invariata (prima era 9,8MB ora sono 10,0MB).
  • Si legga sotto per l'uso dei parametri e la personalizzazione d'uso.

Immagine SliTaz

Kernel SliTaz (kernel v3.2.53)

Versione aggiornata al 04/03/2014 (ancora non parametrizzata):

NEWS:

  • Questa versione è basata sulla SliTaz rolling rilasciata il 16/02/2014 link.
  • In questa versione la discover viene eseguita senza modifiche, questo dovrebbe farla risultare più compatibile.

Immagine SliTaz

Kernel SliTaz (kernel v3.2.53)

Versione base usata nella tesi per i test (ancora non parametrizzata):

(Attualmente la fase di discover con cui l'immagine di SliTaz ottiene gli IP in DHCP è ottimizzata per il laboratorio SiLab dell'Università degli Studi di Milano; a breve verrà rilasciata una versione generale che dovrebbe meglio adattarsi a situazioni differenti)

Immagine SliTaz

Kernel SliTaz

Come modificare l'immagine di SliTaz per le proprie esigenze

Versione parametrizzata

In questo caso non è necessario modificare l'immagine di SliTaz. E' sufficiente passarle lo script di boot desiderato e il file torrent da usare per il download.

Per fare ciò basta fare quanto segue:

  • Bisogna creare un tar.gz contenente il file btboot.sh e il file .torrent desiderati. (Il file tar.gz può essere chiamato in qualunque modo ma è importante che lo script sia btboot.sh; il nome del file torrent andrà ovviamente riportato correttamente all'interno dello script)
  • Sul server bisogna attivare un server HTTP (qualora non fosse già presente) che verrà usato per far scaricare ai client il tar.gz del punto precedente
  • Ora bisogna copiare il tar.gz sul proprio server HTTP dove è più comodo
  • L'ultima cosa da fare consiste nel modificare il file syslinux.cfg del server TFTP includendo il parametro boottorrent in APPEND contenente il percorso del file da scaricare; per farlo basta modificare il file (mostrato sopra) come segue:
default base

label base
	kernel ./bzImage
	append initrd=./rootfs4.lzma lang=it_IT kmap=it rw root=/dev/null ip=dhcp vga=normal autologin boottorrent=http://indirizzo_del_server/percorso/file.tar.gz

Così facendo SliTaz all'avvio scaricherà ogni volta lo script e il torrent desiderati ed effettuerà il boot. In caso il torrent cambi o sia necessario cambiare lo script, basterà modificare i due file e ricreare il file tar.gz.

NOTA1: è importante che sia un tar.gz altrimenti non verrà gestito correttamente da SliTaz.

NOTA2: in caso si desideri personalizzare a mano l'immagine, il parametro boottorrent viene letto da /etc/init.d/bootopts.sh e il download del file viene effettuato sempre lì; la decompressione dell'archivio tar.gz e l'avvio dello script di boot vengono fatti in /etc/init.d/local.sh (per eseguire correttamente questo è stato aggiunto l'interprete bash e l'intestazione dello script è stata cambiata da #!/bin/sh a #!/bin/bash)

Versione non parametrizzata

Per questa versione, le modifiche all'immagine devono essere fatte a mano, modificando gli script presenti nel modo desiderato. Per fare ciò basta seguire i seguenti passaggi:

  • L'immagine è un archivio CPIO compresso con LZMA, quindi va prima di tutto decompresso “unlzma nomefile.lzma”
  • A questo punto bisogna estrarre il contenuto del CPIO in una cartella temporanea e basta eseguire questi comandi tramite sudo (necessario per il 3° comando):
> mkdir tmp
> cd tmp/
> cpio -id < ../initrd
  • A questo punto è possibile modificare lo script presente in /root/ (btboot.sh) e il file .torrent presente in /torrent/
  • Fatte le modifiche basta archiviare nuovamente il filesystem in un CPIO e ricomprimere con LZMA:
> find . | cpio --create --format=’newc’ > ../newinitrd
> cd ../
> lzma newinitrd

NOTA: in caso di problemi coi permessi sui files è possibile risolvere assegnandosi tutti i diritti su tutti i files con un (alquanto drastico) “sudo chmod -R 777 *”; tale operazione non crea problemi di sicurezza dato che poi il sistema è temporaneo e resta in RAM solo il tempo necessario al download.

Risultati

I dettagli e i risultati dei test effettuati sono disponibili nella tesi linkata ad inizio pagina; di seguito sono riportati in breve per dare un'idea immediata delle prestazioni ottenibili:

Situazione test

124 PC; LAN 100Mbps Connessione LAN ←→ Server = 4x100Mbps (LACP)

Sistema operativo finale = circa 420MB

Procedura precedente = PXE boot con trasferimento basato su TFTP

Grafici

In rosso la procedura vecchia, in verde quella nuova.

Lavori simili

Discussion

davide, 2014/03/05 13:01
Grazie per i complimenti!

Per quanto riguarda gli errori di ortografia/battitura, ho fatto un controllo con il dizionario di Texmaker, ma evidentemente mi sono sfuggite un paio di parole, me ne scuso. Per lo schema della rete effettivamente la frase potrebbe non risultare molto chiara. Ad ogni modo la rappresentazione dello schema è corretta. Dove ho scritto "virtual server" è rappresentata la macchina fisica su cui è virtualizzato il server TFTP.

Per gli approfondimenti che suggerisce, ormai la tesi non la posso modificare perchè mi sono già laureato e l'ho consegnata in Dipartimento (preferirei quindi che restasse invariata). Tuttavia vedrò se, in futuro, riuscirò a fare un documento di approfondimento.

Al momento le priorità sono:

1) terminare la parametrizzazione dell'immagine in modo da poterne fornire una versione definitiva utilizzabile senza dover mettere mano a SliTaz per le personalizzazioni
2) preparare una versione personalizzata ad hoc per il SiLab in università in modo che possano usarla come procedura standard

Cordialmente,
Davide Bruschi
test79.35.196.116, 2014/03/05 11:49
Su segnalazione di Trentini ho letto la Sua tesi con interesse.

Sperando di fare cosa gradita, Le sottopongo alcune considerazioni e correzioni, anche se immagino potrebbe essere già tardi.

Pag. 6:
- Efficacie non ci va la I
- E' -> È

Pag. 23 svolgere l'esame.Questo permette… manca lo spazio dopo il punto.
Pag. 25
- Questo fa si --> sì
- il server è una macchina virtuale che si trova su una macchina fisica che è collegata alla rete LAN tramite 4 cavi da 100Mbps. --- Lo schema riporta una cosa diversa…

Mi sarebbe piaciuto un grafico tipo Gannt o simile che dettagli in una timeline i segmenti di tempo necessari alle varie fasi.
Infine anche un approfondimento sulle problematiche relative all'MTFTP sarebbero state interessanti, anche come termine di confronto.

Resta comunque un lavoro molto valido ed utile e Le faccio i complimenti per quanto realizzato.
You could leave a comment if you were logged in.