Laboratorul isi propune sa prezinte solutia de virtualizare VirtualBox si sa exploreze diferitele moduri de a interactiona cu aceasta:
virsh si libvirt pot interactiona si cu alte solutii de virtualizare, cum ar fi KVM, LXC, OpenVZ, XEN, VMware ESX etc. De aceea, le vom folosi si alte laboratoare.
In continuare vom prezenta cele mai importante concepte, impreuna cu exemple generice de utilizare.
Nota: Exemplele nu trebuie rulate sau executate. Consultati exemplele atunci cand rezolvati exercitiile.
VirtualBox este o solutie de virtualizare host-based, dezvoltata in prezent de Oracle. Exista atat varianta comerciala, cat si cea open source.
Pentru instalarea variantei open source in Debian este necesar pachetul virtualbox-ose.
Virsh este o unealta de administrare a solutiilor de virtualizare, folosind linia de comanda. Este scrisa folosind libvirt. Un avantaj al virsh este ca indiferent de solutia de virtualizare cu care interactioneaza, comenzile sunt aceleasi.
Pentru a porni virsh, este necesara specificarea sistemului de virtualizare folosit. Aceasta se face prin intermediul unui
URI (Uniform Resource Identifier). Sintaxa este:
$ virsh -c URI
In cazul VirtualBox,
URI-ul este:
vbox:///session, pentru conectare la instanta VirtualBox de pe sistemul local;
vbox+ssh://user@example.com/session, pentru conectare la instanta VirtualBox de pe un sistemul remote example.com, ce ruleaza sub utilizatorul user.
In terminologia virsh/libvirt, instanta unei masini virtuale se numeste domeniu. Pentru a lista domeniile active (masinile virtuale ce ruleaza), se foloseste comanda list, in interiorul shell-ului virsh.
Alte comenzi utile sunt:
dominfo - afiseaza informatii despre o masina virtuala;
reboot - reseteaza o masina virtuala;
suspend - suspenda executia unei masini virtuale;
resume - restaureaza o masina virtuala suspendata;
destroy - opreste o masina virtuala;
snapshot-create - create snapshot;
snapshot-delete - stergere snapshot;
snapshot-list - listare snapshot-uri;
Pentru a afla sintaxa unei anumite comenzi, folositi help nume-comanda. De exemplu, help dominfo.
Libvirt este o biblioteca ce permite utilizatorului sa interactioneze in mod programatic cu o solutie de virtualizare. Este scrisa in C, dar exista wrappere pentru numeroase limbaje. Noi vom folosi limbajul Python.
In Debian, pachetul corespunzator wrapper-elor Python este python-libvirt.
Un exemplu de script Python care se conecteaza la VirtualBox si listeaza masinile virtuale ce ruleaza este urmatorul:
#!/usr/bin/env python
import libvirt
import sys
if __name__ == "__main__":
conn = libvirt.open("vbox:///session")
print "Listing running domains"
for id in conn.listDomainsID():
dom = conn.lookupByID(id)
print "id: ", id, "name: ", dom.name()
Documentatia pentru
API-ul in C o gasiti
aici.
Detalii despre wrapper-ele Python gasiti
aici.
Pentru a gasi functia Python corespunzatoare unei functii C, procedati astfel:
Gasiti functia C dorita. De exemplu, pentru oprirea unei masini virtuale avem virDomainDestroy.
Taiati prefixul de tip virOBIECT. In cazul nostru, prefixul este virDomain.
Functia dorita este destroy. Ea se aplica unui obiect de tip domeniu. De exemplu:
dom.destroy()
Instalati VirtualBox.
Deschideti si porniti masina virtuala aflata in directorul ~/virtualbox.
Instalati pachetul ce contine virsh.
Lansati virsh, conectandu-va la instanta VirtualBox de pe propriul sistem.
Realizati urmatoarele sarcini in shell-ul virsh:
Afisati informatii despre masina virtuala care ruleaza.
Restartati masina virtuala.
Dupa ce masina virtuala s-a restartat, suspendati-o.
Verificati ca masina virtuala este suspendata, apoi restaurati-o.
Executati urmatoarele operatiuni cu snapshot-uri:
Mai intai, suspendati din nou masina virtuala.
Din virsh, creati un snapshot.
Listati snapshot-urile existente. Verificati ca snapshot-ul creat anterior exista.
Restaurati masina virtuala.
Din interfata grafica, schimbati starea masinii virtuale (de exemplu, creati un fisier pe Desktop). Apoi opriti-o si reveniti la snapshot-ul anterior. Porniti masina virtuala si verificati ca starea a fost refacuta cu succes (fisierul creat nu mai exista).
Opriti masina virtuala, folosind virsh.
Instalati suportul pentru wrapper-ele Python ale libvirt.
Din interfata grafica a VirtualBox, porniti masina virtuala.
Salvati script-ul oferit ca exemplu in breviar si executati-l.
Modificati script-ul astfel incat dupa afisarea informatiilor, sa restarteze masina virtuala.