Libvirt

**Libvirt** on avatud lähtekoodiga vaba tarkvarakogu, mis võimaldab hallata virtualiseerimistarkvarasid ja nendele eraldatavaid ressursse, näiteks nagu võrguliidesed ja kettaruum. Libvirt sisaldab API teeki, teenust libvirtd ja käsurida virsh.

## Ajalugu
Aastal 2005 hakkas RedHat arendama rakendust, mis võimaldaks juhtida virtuaalmasinaid ühiste käskudega, sõltumata sellest, mis tarkvaral need töötavad . Sama aasta 19. detsembril ilmus versioon 0.0.1, mille nimeks oli libvir ja mis võimaldas teostada põhilisi operatsioone virtualiseerimistarkvaraga Xen. Järgmise aasta veebruaris anti tarkvarale uusi nimi – libvirt. Alles aasta pärast lisandus versioonis 0.2.0 tugi KVM ja Qemu juhtimiseks ning võrguühenduste konfigureerimiseks. Kiire areng algas versioonist 0.7.0 (5. august 2009), millega lisandusid näiteks VMWare ESX tugi ja võrguliideste *hot-plug* (virtuaalmasinat peatamata) lisamise ja eemaldamise võimalus. Versioon 8.2.0 võimaldab teostada virtuaalmasinate live-migratsiooni (virtuaalmasinate teisaldamine ilma neid peatamata) erinevate füüsiliste arvutite vahel. Aasta 2012 suve lõpus ilmus versioon 0.10.1

## Toetatud arhitektuurid
Libvirt on kirjutatud C keeles, mis tähendab, et lisaks traditsioonilistele x86 ja amd64 arhitektuuridele on selle lähtekoodi võimalik kompileerida teiste arhitektuuride jaoks. Näiteks Linuxi distributsioon Debian pakub seda eelkompileeritud paketina arhitektuuridele alpha, arm, ia64, mips, powerpc, s390, sh4, sparc ja teised. Virtualiseerimise toeta arhitektuuridele kompileerimise põhjuseks on soov võimaldada nendelt juhtida teistel arvutitel töötavaid virtuaalmasinaid läbi arvutivõrgu.

## Toetatud virtualiseerimistarkvarad
Käsurea Virsh abil on võimalik hallata nii kohalikus kui ka kaudses arvutis töötavaid virtualiseerimistarkvarasid. Selleks, et toetatud tarkvarade kogus ja nende funktsionaalsus oleks suurim, täidab libvirt palju funktsioone riistvara draiverite tasandil. Toetatud on järgmised virtualiseerimistarkvarad:
*KVM (Linux Kernel Virtual Machine)
*Qemu
*LXC
*OpenVZ
*UMP (User Mode Linux)
*VirtualBox
*VMWare ESX
*VMWare Workstation ja VMWare Player
*Xen
*Microsoft Hyper-V
Igal tarkvaral on olnud erinev väljatöötamisprotsess ja on erinevad võimalused, mistõttu libvirt ei toeta iga tarkvara kõiki funktsioone.

## Töömudel
Rääkides riistvara virtualiseerimisest, eristatakse selle tehnoloogia erinevaid kihte. Kõige madalam kiht on riistvara. Sellel peab olema virtualiseerimise tugi (Inteli protsessoritel VT-x, AMD protsessoritel AMD-V) ning piisavalt ressursse (näiteks mälu mahtu ja kettaruumi), et oleks võimalik käivitada mitu operatsioonisüsteemi. Riistvaralisel kihil paikneb järgmine kiht, milleks on operatsioonisüsteem, samuti tuntud kui Domeen-0. Teisel ehk operatsioonisüsteemikihil töötab virtualiseerimistarkvara ehk *hypervizor* (kolmas kiht), mis jagab esimese kihi ressursse ja tekitab virtuaalse riistvara (neljas kiht või Domeen-n). Igal tekitatud neljandal kihil on võimalik käivitada teistest sõltumatu operatsioonisüsteem. Libvirt käivitub teisel kihil ning on mõeldud eelkõige Linuxi tuumaga operatsioonisüsteemidele, kuigi virsh käsurida on võimalik käivitada ka teistel, näiteks Windows ja FreeBSD.

Libvirt võimaldab hallata nii kohalikus kui ka kaudses arvutis töötavaid kolmandaid kihte. Virtualiseerimistarkvarade juhtimiseks kaudsetel arvutitel on vajalik Libvirt olemasolu ka nendel.

## Käsurida virsh
Libvirti tarkvarapakett sisaldab käsurida virsh, mis on peamine virtualiseerimistarkvarade haldusvahend. Käsurida võimaldab:
*käivitada virtuaalmasinaid
*pehmelt sulgeda (power-nupu emuleerimine)
*raskelt sulgeda (nagu füüsilisel masinal toitekaabli eemaldamine)
*ajutiselt peatada ja jätkata käiku
*salvestada ja taastada seisundid
*teha hetketõmmiseid ja taastada neid
*jooksvalt lisada ja eemaldada kettaid
*jooksvalt lisada ja eemaldada seadmeid (näiteks võrgukaart)
*jälgida virtuaalmasinate seisundit ja nende ressursikasutust
*teisaldada virtuaalmasinaid ühest arvutist teise

## Teenus libvirtd
Libvirtd on teenus, mis käivitub koos operatsioonisüsteemiga. Selle põhifunktsiooniks on virtuaalmasinate automaatne käivitamine, käsureale juurdepääsu tekitamine ning käsurealt saadud käskude töötlemine.

## Konfiguratsioon
Libvirt kasutab konfiguratsiooniandmeid kolmel erineval tasemel.

Esimene taseme konfiguratsioonifail asub /etc/libvirt/libvirtd.conf ning määrab teenuse libvirtd sellised parameetrid, nagu juurdepääs teenusele ja kasutajaõigused.

Teine tase on iga virtualiseerimistarkvara jaoks eraldi konfiguratsioonifail. Näiteks Qemu ja KVM vahendavad ekraanipilti VNC protokolli abil, mille sidusus IP-aadressile ja parool on seadistatavad tarkvaradele vastavates konfiguratsioonifailides. Selliste failide asukoht on vaikimisi kataloogis /etc/libvirt. Erinevate virtualiseerimistarkvarade konfiguratsioonifailid üldjuhul ei ole omavahel ühilduvad.

Kolmas tase on igale virtuaalmasinale vastav konfiguratsioonifail. Need failid on XML-vormingus ja sisaldavad näiteks:
*virtuaalsete protsessorituumade ja lõimede arvu
*mälu mahtu (vaikimisi maht ja ülemine piir)
*ketaste seadeid
*võrguliideste seadeid

Minimaalne konfiguratsioonifail näeb välja järgmiselt:

```xml
<domain type='kvm'>					
  <name>meiliserver</name>				
  <uuid></uuid>						
  <memory> 524288</memory>				
  <currentMemory>131072</currentMemory>			
  <vcpu>1</vcpu>					
  <devices>
    <emulator>/usr/bin/kvm<emulator>			
    <disk type='file' device='disk'>			
      <syntaxhighlight file='/data/vm/meiliserver.img'/>		
      <target dev='hda'/>				
    </disk>
    <interface type='network'>				
      <syntaxhighlight network='default'/>			
    </interface>
    <graphics type='vnc' port='5900'/>			
  </devices>
</domain>
```


Virtuaalmasinate konfiguratsioonifailid on erinevate virtualiseerimistarkvarade vahel üldjuhul ühilduvad, kui muuta virtualiseerimistarkvarat defineerivaid kirjeid.

Käsureal virsh on eraldi konfiguratsioonifail, mis asub /etc/libvirt/libvirt.conf ning määrab näiteks vaikimisi hallatava arvuti ning teiste arvutite aliased.

## Turvalisus
Kohalikus arvutis juhtimisõiguste määramiseks on toetatud PolicyKiti rakendus, mille abil on võimalik luua kasutajaid. Kasutajaõigused määratakse teenuse libvirtd konfiguratsioonifailis. Samas failis on võimalik lubada ligipääs ka läbi arvutivõrgu ning selleks vajalikud parameetrid, näiteks x509 sertifikaadid ja ühenduse krüpteerimine. Libvirt toetab autentimisprotokolle Kerberos ja SASL.

## Abivahendid
Kuigi käsurea virsh kasutamine ei nõua erilist väljaõpet, on loodud mitmeid graafilisi abivahendeid, mis muudavad virtualiseerimistarkvarade haldamise veelgi efektiivsemaks ja mugavamaks. Graafilisi abivahendeid leidub ka mobiilsetele platvormidele ja ka veebipõhiseid.

### Virt-manager
Virt-manager on üks võimsamatest abivahenditest, millega on võimalik juhtida tarkvara Libvirt ning jälgida selle jõudlust ja ressursside kasutamist graafikute pealt. Virtuaalmasinate loomist abistab viisard, mis sarnaneb paljude virtualiseerimistarkvaradega. Virt-manager võimaldab ka virtuaalmasinaid peatamata muuta nende virtuaalse riistvara konfiguratsiooni, nagu protsessorite arvu ja eraldavat mälu mahtu. Rakendus sisaldab integreeritud VNC klienti, mis võimaldab mugavalt saavutada ühendust virtuaalmasina konsooliga.

### oVirt
oVirt on veebirakendus, mis on kasulik, kui traditsiooniline rakendus ei ole pagutatud kohalikku arvutisee. oVirt võimaldab virtuaalmasinaid käivitada, peatada, luua, jooksvalt teisaldada ning hinnata nende jõudlust graafikutelt.

### VM Manager
Kuna IT-süsteemide administreerimisel kasutatakse järjest rohkem mobiilseid seadmeid, on loodud ka Androidi operatsioonisüsteemile mugav abivahend VM Manager. Selle roll on väike – see võimaldab virtuaalmasinaid käivitada, peatada ja jälgida nende olekut.

## Viited

## Välislingid
*Libvirti ametlik koduleht
*Anatomy of the libvirt virtualization library
*Virt-manageri koduleht
*oVirt koduleht
*VM Manager Google Play Store'is