libvirt - hypervisor independent virtual machine management
TRANSCRIPT
![Page 1: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/1.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes
LibvirtHypervisor Independent Virtual Machine Management
Guido Günther <[email protected]>
2009-07-28
![Page 2: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/2.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
What is it
C Library for managing virtual machinesWhy’s that useful:
lots of different hypervisors in Debian: QEMU, KVM, Xen,VirtualBox, LXC, OpenVZ, UMLsome of these change command line syntax and ABI everyminute
so libvirt aims to provide
stable command interfacestable configuraton formatstable API
configuration format is XML basednot all features supported on all hypervisors
![Page 3: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/3.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
What is it
C Library for managing virtual machinesWhy’s that useful:
lots of different hypervisors in Debian: QEMU, KVM, Xen,VirtualBox, LXC, OpenVZ, UMLsome of these change command line syntax and ABI everyminuteso libvirt aims to provide
stable command interfacestable configuraton formatstable API
configuration format is XML basednot all features supported on all hypervisors
![Page 4: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/4.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
What is it
C Library for managing virtual machinesWhy’s that useful:
lots of different hypervisors in Debian: QEMU, KVM, Xen,VirtualBox, LXC, OpenVZ, UMLsome of these change command line syntax and ABI everyminuteso libvirt aims to provide
stable command interfacestable configuraton formatstable API
configuration format is XML basednot all features supported on all hypervisors
![Page 5: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/5.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
Virsh
commandline interfacevirtual machine lifecycle:
list, dominfo, dumpxml, define, edit, start, destroy, shutdownsave, restore, suspend, resume, migratedomblkstat, domifstat{attach, detach}-{disk, netdev, device}
manage disk images:
pool-{list, info, dumpxml, define, edit, start, destroy,refresh}vol-{list, info, create, delete}
networks:net-{list, info, dumpxml, define, edit, start, destroy}
host devices:nodedev-{list, dumpxml}
![Page 6: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/6.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
Virsh
commandline interfacevirtual machine lifecycle:
list, dominfo, dumpxml, define, edit, start, destroy, shutdownsave, restore, suspend, resume, migratedomblkstat, domifstat{attach, detach}-{disk, netdev, device}
manage disk images:
pool-{list, info, dumpxml, define, edit, start, destroy,refresh}vol-{list, info, create, delete}
networks:net-{list, info, dumpxml, define, edit, start, destroy}
host devices:nodedev-{list, dumpxml}
![Page 7: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/7.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
Virsh
commandline interfacevirtual machine lifecycle:
list, dominfo, dumpxml, define, edit, start, destroy, shutdownsave, restore, suspend, resume, migratedomblkstat, domifstat{attach, detach}-{disk, netdev, device}
manage disk images:
pool-{list, info, dumpxml, define, edit, start, destroy,refresh}vol-{list, info, create, delete}
networks:net-{list, info, dumpxml, define, edit, start, destroy}
host devices:nodedev-{list, dumpxml}
![Page 8: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/8.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
Virsh
commandline interfacevirtual machine lifecycle:
list, dominfo, dumpxml, define, edit, start, destroy, shutdownsave, restore, suspend, resume, migratedomblkstat, domifstat{attach, detach}-{disk, netdev, device}
manage disk images:
pool-{list, info, dumpxml, define, edit, start, destroy,refresh}vol-{list, info, create, delete}
networks:net-{list, info, dumpxml, define, edit, start, destroy}
host devices:nodedev-{list, dumpxml}
![Page 9: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/9.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
Programming interface
virsh {list, info, dumpxml, define, start, destroy, shutdown}
int virConnectListDomains (virConnectPtr conn,int *ids, int maxids);
int virDomainGetInfo (virDomainPtr domain,virDomainInfoPtr info);
char* virDomainGetXMLDesc (virDomainPtr domain,int flags);
virDomainPtr virDomainDefineXML(virConnectPtr conn,const char *xml);
int virDomainCreate (virDomainPtr domain);int virDomainDestroy (virDomainPtr domain);int virDomainShutdown (virDomainPtr domain);
![Page 10: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/10.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
Programming interface
virsh {list, info, dumpxml, define, start, destroy, shutdown}
int virConnectListDomains (virConnectPtr conn,int *ids, int maxids);
int virDomainGetInfo (virDomainPtr domain,virDomainInfoPtr info);
char* virDomainGetXMLDesc (virDomainPtr domain,int flags);
virDomainPtr virDomainDefineXML(virConnectPtr conn,const char *xml);
int virDomainCreate (virDomainPtr domain);int virDomainDestroy (virDomainPtr domain);int virDomainShutdown (virDomainPtr domain);
![Page 11: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/11.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
Language bindings
Clibvirt-devlibvirt-glib-dev
Pythonpython-libvirtpython-libvirt-glib
Perllibsys-virt-perl
OCamllibvirt-ocaml
Rubylibvirt-ruby
Javanot yet packaged in Debian
![Page 12: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/12.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
An example
vmapplet.pyimport libvirt
import libvirtglib
...def domainEventCallback (conn, dom, event,
detail, opaque):...
conn = libvirt.open("qemu:///system")ids = conn.listDomainsID()names = ( conn.lookupByID(id).name()
for id in ids )
libvirtglib.eventRegister()conn.domainEventRegister(domainEventCallback,
None)...gtk.main()
![Page 13: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/13.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
An example
vmapplet.pyimport libvirt
import libvirtglib
...def domainEventCallback (conn, dom, event,
detail, opaque):...
conn = libvirt.open("qemu:///system")ids = conn.listDomainsID()names = ( conn.lookupByID(id).name()
for id in ids )
libvirtglib.eventRegister()
conn.domainEventRegister(domainEventCallback,None)
...gtk.main()
![Page 14: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/14.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
An example
vmapplet.pyimport libvirtimport libvirtglib
...def domainEventCallback (conn, dom, event,
detail, opaque):...
conn = libvirt.open("qemu:///system")ids = conn.listDomainsID()names = ( conn.lookupByID(id).name()
for id in ids )libvirtglib.eventRegister()conn.domainEventRegister(domainEventCallback,
None)...gtk.main()
![Page 15: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/15.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
Libvirtd
does all the hard worklocal socket and remote TCP os SSH interface
------------- ------ --------------| application | | QEMU |--+ | libvirt |------------- ------ | - - - - - - -
| ------ | | drivers API |API | QEMU |--+--| *QEMU* || ------ | | Xen |
-------------- ------ | | LXC || libvirt | | QEMU |--+ | remote |- - - - - - - ------ --------------
| drivers API | || QEMU | API| Xen | || LXC | qemu:///system ----------| *remote* | ------------------ | libvirtd |-------------- ----------
![Page 16: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/16.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes Commandline Interface API libvirtd
Libvirtd access
URIs: qemu:///session, lxc:///rw access to /var/run/libvirt/libvirt-sock
via libvirt groupfull access
read only access: list vms, dump XML data:rw access to /var/run/libvirt/libvirt-sock-roor use PolicyKitremote:
qemu, xen+{ssh, tcp, tls}://host/...supports SASL authentication (Kerberos) and SSL clientcertificatesvirt-manager tunnels VNC over ssh
![Page 17: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/17.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes virt-install virt-manager other tools libguestfs debugging
Tools using Libvirt in Debian
virtinst:virt-installvirt-clone
virt-managervirt-viewervirt-topmunin-libvirt-pluginslibguestfs (packaged, not yet uploaded)
![Page 18: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/18.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes virt-install virt-manager other tools libguestfs debugging
Virt-install - use existing disk image
virt-install --connect=qemu:///system \--name=lenny --ram=256 \--os-type=linux \--os-variant=debianLenny \--import \--disk vol=default/lenny.img \--network=user,model=virtio \
![Page 19: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/19.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes virt-install virt-manager other tools libguestfs debugging
Virt-install - create virtual machines
URL=http://ftp.de.debian.org/debian/IMAGES=/var/scratch/vm/images/
virt-install --connect=qemu:///system --force \--name=lenny --ram=256 \--disk pool=default,size=10,cache=writeback \--disk vol=default/usb-lenny-preseed.img,bus=usb \--network=user,model=virtio \--location=${URL}/dists/stable/main/installer-i386/ \--extra-args="auto=true priority=critical \
url=file:///media/./preseed.cfg \preseed/early_command=\"mountmedia disk\""
![Page 20: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/20.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes virt-install virt-manager other tools libguestfs debugging
Storage pools
Keep virtual machine imagestypes: directory, (network) filesystem, disk, LVM, iSCSIeach pool has a target (e.g. directory or volume group)some have a source (e.g. block device)
![Page 21: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/21.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes virt-install virt-manager other tools libguestfs debugging
Storage pools
contain volumesdir/fs pool: filesLVM pool: logical volumesdisk pool: partitions
individual volumes (e.g. qcow2 images) can havebacking store (potentially read only)
![Page 22: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/22.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes virt-install virt-manager other tools libguestfs debugging
Storage pools
contain volumesdir/fs pool: filesLVM pool: logical volumesdisk pool: partitions
individual volumes (e.g. qcow2 images) can havebacking store (potentially read only)
![Page 23: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/23.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes virt-install virt-manager other tools libguestfs debugging
Virt-manager
GUI to manage:virtual machines
add, remove devicesgraphical display and serial consoledisplay statistics
pools and volumesnetworks
![Page 24: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/24.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes virt-install virt-manager other tools libguestfs debugging
Other virtinst tools
$ virt-clone --connect=qemu:///system \-o lenny-i386 -n sid-i386
What would you like to use as the cloned disk (file path) for’/var/scratch/vm/images/lenny-i386.img’? /var/scratch/vm/images/sid-i386.imgCloning /var/scratch/vm/i 100% |=========================| 10 GB 02:32
![Page 25: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/25.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes virt-install virt-manager other tools libguestfs debugging
Virt-top
Top like tool:
![Page 26: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/26.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes virt-install virt-manager other tools libguestfs debugging
Libguestfs - inspect and manipulate vm images
shell tool: guestfishlots of language bindings:
libguestfs-perl, python-libguestfsunpackaged: Haskell, Java, Ruby, OCaml
recipes: http://libguestfs.org/recipes.htmltools: virt-df, virt-cat, virt-inspector
![Page 27: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/27.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes virt-install virt-manager other tools libguestfs debugging
Libguestfs - inspect and manipulate vm images
shell tool: guestfishlots of language bindings:
libguestfs-perl, python-libguestfsunpackaged: Haskell, Java, Ruby, OCaml
recipes: http://libguestfs.org/recipes.htmltools: virt-df, virt-cat, virt-inspector
![Page 28: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/28.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes virt-install virt-manager other tools libguestfs debugging
Example
$ guestfish <<EOFalloc lenny-preseed.img 4Mrunsfdisk /dev/hda 0 0 0 ,sfdisk-N /dev/hda 1 32 255 63 0,32mkfs vfat /dev/hda1mount /dev/hda1 /upload preseed.cfg /pressed.cfgumount /quitEOF
![Page 29: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/29.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes virt-install virt-manager other tools libguestfs debugging
Debugging problems
/var/log/libvirt, ˜/.libvirt/virt-manager –nofork, ˜/.virt-manager.log˜/.virtinst/*.logLIBVIRT_DEBUG=1 libvirtdLIBGUESTFS_DEBUG=1 guestfish ...
![Page 30: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/30.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes
Still not convinced?
Easy to switch todomxml-from-nativehttp://wiki.libvirt.org/page/QEMUSwitchToLibvirt
![Page 31: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/31.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes
Missing
API for disk image snapshotsfine grained user managementDebian: SELinux integration
![Page 32: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/32.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes
Things to come
netcf apimultipath supportnew hypervisors: VMware ESX, OpenNebulafor QEMU/KVM:
netdev hotplugcgroups
![Page 33: Libvirt - Hypervisor Independent Virtual Machine Management](https://reader036.vdocuments.site/reader036/viewer/2022071601/613d37af736caf36b75ab610/html5/thumbnails/33.jpg)
Libvirt, libvirtd and virsh Tools using Libvirt Final notes
Pkg-libvirt group
Mailing List:[email protected]:http://wiki.debian.org/Teams/DebianLibvirtTeam