= Come creare macchine virtuali per esperimenti e servizi sperimentali in CONFINE = [[http://confine-project.eu/|CONFINE]] è un progetto di ricerca che ha l’obiettivo di costruire un’infrastruttura all’interno di varie community network europee per metterla a disposizione dei ricercatori, che possono così studiare reti reali, con utenti veri, anziché limitarsi ad esperimenti in laboratorio o simulati. Questa guida spiega come creare Sliver, ovvero macchine virtuali, per '''effettuare esperimenti''' o '''fornire servizi sperimentali''', all'interno dell'infrastruttura CommunityLab di CONFINE. Vedere anche '''[[ConfineHowTo]]''' <> == Concetti di base == Per poter utilizzare CommunityLab sono necessarie alcune conoscenze sulla terminologia e l'architettura. {{attachment:architecture.png||width=300}} Per '''nodi''' o '''research device''' si intendono computer (tipicamente Intel NUC) sparsi all'interno della community network. I research device possono ospitare zero o piu' '''macchine virtuali''' o '''sliver'''. Queste sono basate sui linux container (LXC). Una '''slice''' è una collezione di '''sliver''' ospitate su più research device che tipicamente fanno parte dello stesso esperimento o servizio. Ogni sliver è basata su un '''template''', ovvero la distribuzione Linux (tipicamente OpenWrt o Debian) che viene installata al momento della creazione della sliver. Le sliver hanno tipicamente tre tipi principali di indirizzi: * indirizzi '''privati''', appartenenti alla subnet '''{{{192.168.157.0/24}}}''', validi solo all'interno del research device (in un bridge virtuale interno). Di solito possono essere ignorati. L'interfaccia corrispondente ha di default il nome '''{{{priv}}}''' all'interno della sliver * indirizzi di '''management''', appartenenti alla subnet '''{{{fdf5:5351:1dfd::/48}}}''', raggiungibili tramite la VPN di management tinc (vedere sotto). L'interfaccia corrispondente ha di default il nome '''{{{mgmt0}}}''' all'interno della sliver * indirizzi '''community-public''', assegnati dal server DHCP locale e raggiungibili all'interno della community network (ad esempio '''{{{10.176.0.118/24}}}'''). Spesso questi indirizzi sono chiamati '''pubblici''' all'interno di CommunityLab, anche se si tratta indirizzi IP privati RFC1918. L'interfaccia corrispondente ha di default il nome '''{{{pub0}}}''' all'interno della sliver Per maggiori informazioni vedere [[https://wiki.confine-project.eu/arch:node|Node architecture]] == Creazione di una slice == Ecco i passi necessari per la creazione di una slice all'interno di CommunityLab. * fare il '''log-in''' su https://panel.community-lab.net . In caso non si disponga di un account bisogna [[https://panel.community-lab.net/accounts/register/|registrarsi]] * cliccare sul proprio nome in alto a destra per accedere al proprio profilo * verificare che si disponga dei permessi di "Slice admin (researcher)" per il gruppo ninux.org. In caso contrario scrivere a <> per farsi abilitare * '''aggiungere''' una o più '''chiavi SSH''' nella sezione authentication tokens {{attachment:screenshot_ssh_key.png||width=600}} * salvare * cliccare su "SLICES->SLICES" in alto * cliccare su '''"add slice"''' {{attachment:screenshot_slices.png||width=600}} * scegliere un nome per la slice * scegliere il gruppo "ninux.org" * opzionalmente, scegliere in "resource requests" lo spazio su disco da allocare per ogni sliver (il default e' circa 200MiB, il massimo 1000MiB) {{attachment:screenshot_slice_resources.png||width=600}} * scegliere il template (ad esempio "Debian Squeeze (debian)") * lasciare il "set state" su "START" * salvare la slice * in basso sulla pagina cliccare su '''"add slivers"''' {{attachment:screenshot_add_slivers.png||width=600}} * scegliere su quali nodi creare le sliver: per rendere più semplice la selezione, usare la colonna a destra cliccando su "By set state PRODUCTION" e "By group ninux.org" {{attachment:screenshot_choose_nodes.png||width=600}} * cliccare su "Create slivers" * nella schermata successiva selezionare le opzioni '''"public4"''' (indispensabile per i servizi) e '''"management"''' (di default già selezionata) {{attachment:screenshot_interfaces.png||width=600}} * cliccare su "Yes, create slivers" * nella pagina relativa alla slice cambiare il '''set state''' da "REGISTER" a '''"START"''' * la creazione delle sliver sui nodi selezionati richiede tempi dell'ordine della decina di minuti == Accedere alle sliver == * per vedere la lista delle sliver cliccare su "SLICES->SLIVERS" in alto * per vedere solamente le sliver associate alla propria slice cliccare sulla colonna di destra sul nome della slice * le sliver che si trovano nello stato "STARTED" sono quelle effettivamente utilizzabili {{attachment:screenshot_sliverlist.png||width=600}} * '''cliccando sullo stato ("STARTED")''' si accede ad una pagina che mostra varie informazioni sulla sliver, tra cui gli '''indirizzi community-public e di management''' {{attachment:screenshot_sliverstate_json.png||width=300}} * se ci si trova all'interno della community network allora si puo' accedere direttamente in SSH alla sliver usando l'indirizzo "public4" della sliver e utente root, altrimenti bisogna utilizzare l'indrizzo di management attraverso la VPN (vedere sotto) == VPN di management (tinc) == La VPN di management è unica per tutti i nodi e le sliver ed è basata sul software VPN tinc. Per accedere alla VPN: * andare in alto su "TINC->HOSTS" * cliccare su '''"Add Host"''' a destra * scegliere un nome per la macchina da aggiungere alla vpn di management * scegliere come isola "ninux.org" * lasciare il resto vuoto e cliccare su "save and continue editing" * clicare su '''"Help" in alto a destra''' (consiglio: aprire in un nuovo tab) * seguire le istruzioni dettagliate riportate sulla pagina * dopo aver generato le chiavi tinc con il comando {{{tincd -n communitylab -K}}} aprire di nuovo la pagina di modifica dell'host tinc (o passare al tab precedente) e '''copiare e incollare''' all'interno del campo "public key" '''la chiave pubblica''' generata {{attachment:screenshot_tinc_key.png||width=600}} * salvare * avviare tinc seguendo le istruzioni che si trovano in fondo alla pagina "Help" (aperta in precedenza) * provare a pingare il server: {{{ping6 fdf5:5351:1dfd::2}}} == Limitazioni attuali == * il massimo spazio disco allocabile per è al momento 1GiB * i dati scritti su disco vengono persi al riavvio della sliver (o del research device) * le periferiche USB (dischi, pennette) non sono visti dalle sliver (a meno di non agire sulla configurazione delle sliver a livello di research device) == REST API == Community-Lab espone un'API che può essere utilizzata per ottenere informazioni sullo stato delle sliver e dei nodi, per creare e distruggere sliver, etc. Documentazione: http://wiki.confine-project.eu/arch:rest-api Esempi: http://redmine.confine-project.eu/projects/confine-utils/repository == TODO == * guida alla creazione template personalizzati * uso di "experiment data" * FAQ * tips and tricks