From Fedora Project Wiki

by Kevin Fenzi (irc: nirik)


@nirik Hello everyone. I'm Kevin Fenzi and I will be talking about libvirt 18:59
@nirik right here Acedip. ;) 19:00
Acedip hello.. :) 19:00
pluvo hi! 19:00
homerofutoi hello 19:00
Acedip i dint know you are the one :D 19:00
openpercept_ hi nirik 19:00
* jayson_r waves hi! 19:00
@nirik I'd like to note that I am a user of libvirt, I don't maintain or develop it. :) All that is needed to teach is a understanding of something and a desire to teach it. ;) 19:00
@nirik so, lets go ahead and get started then. 19:01
@nirik First of all: what is libvirt? libvirt is a frontend management framework for virtualization. 19:01
@nirik It allows you to use a common set of commands and configuration over a range of backend virt tech. 19:01
@nirik libvirt supports (that I know of): qemu, kvm, virtualbox, containers, xen and likely other backends. 19:02
@nirik How many people here have run virtual machines before? And what did you use? 19:02
* subfusc used qemu 19:02
homerofutoi me, i've use virtualbox 19:03
* Acedip used vbox 19:03
openpercept_ used qemu, vmware, virtualbox 19:03
@nirik cool. 19:03
@nirik I use kvm here, so that is what I know best... but much of this will apply to any of the backends libvirt supports. 19:03
* jayson_r uses kvm in Fedora, VirtualBox & Xen on Centos, and Citrix XenServer 19:03
pluvo vmware and later virtualbox 19:03
* herlo has used kvm, xen, etc... 19:03
@nirik kvm and qemu are available in fedora. 19:03
@nirik You can install libvirt (and qemu/kvm) via 'yum groupinstall "Virtualization"' 19:04
@nirik libvirtd then runs as a regular service. This daemon looks at your config and takes care of setting up networks, talking to the various backends and starting/stopping virtuals, etc. 19:05
@nirik by default, libvirtd in fedora will start up with a private virtual network for your guests and use qemu or kvm if your processor supports it. 19:05
* nirik will point out has some good startup tips as well. 19:06
@nirik once libvirtd is running on your system you can connect to it via command line tools or virt-manager (a gui) 19:07
@nirik note that you don't need to be on the same machine your libvirtd is running on. You can use ssh transport to connect to it from any machine you like. 19:07
@nirik lets take a look at virt-manager first. If anyone wants to look around, you can run the above yum command and you should then be able to run 'virt-manager' to start the gui 19:08
@nirik for those of you not able to, you can look at scrreenshots at 19:08
@nirik so, this gui is pretty easy to deal with. From here you can connect to any machine running libvirtd and manage it. 19:09
@nirik you can setup new guests, stop or start guests, take snapshots, view a console or serial console and add/remove hardware 19:09
* subfusc wished to ask stupid question: This is the client? 19:09
@nirik virt-viewer is just a management tool that connects to any libvirtd instance... 19:10
@nirik does that answer the question? or what do you mean by client? 19:10
subfusc ah k, thanks. It answers it. If libvrtd is the backend or service, virt-viewer is in my world a client (admin clent thou) 19:11
@nirik yeah 19:11
@nirik ok, so if we want to create a new guest, you can select the connection and say 'new' 19:12
@nirik 19:12
@nirik these screens have changed somewhat in new fedora (f11 at least) to get simplified a bit. 19:13
@nirik basically you tell it a name, a arch type, what backend to use, what storage to use, network, mem, cpu. 19:13
@nirik and it creates it for you. 19:13
@nirik Let me touch a bit on storage. 19:14
@nirik You can set libvirt to use various storage backends. lvm, or physical raw partitions or files on your existing filesystem. 19:14
@nirik The default is just files on your filesystem, which is very easy to manage, but possibly less performance wise. 19:14
@nirik You can use things like iscsi or the like as well. 19:15
@nirik anyone have any questions on the gui so far? 19:15
@nirik virt-manager is nice, but I think the command line tools are very good. 19:16
@nirik There are a set of them: virt-top, virt-df, virt-viewer, and the best of all: virsh 19:16
@nirik the various utils like virt-top, virt-df let you run those unix commands on a specific guest from the command line. 19:17
@nirik virt-viewer lets you connect to a guest a bring up a vnc console for it. 19:17
@nirik virsh has a ton of commands 19:18
@nirik is a list I get here on a rawhide server 19:18
@nirik vmware has something like this with its vmware-cmd, but thats very limited next to virsh, IMHO 19:18
@nirik common things I do with virsh: 19:19
@nirik 'virsh list' and 'virsh list --all' shows you all active guests, and all guests defined. 19:20
@nirik 'virsh shutdown <name>' and 'virsh start <name>' stops and starts guest 19:20
@nirik 'virsh console <name>' gets you a serial console on a guest. 19:21
subfusc nirik: and by guest you mean guest user, not guest OS? 19:21
@nirik no, I mean guest os... the virtual instance... 19:22
@herlo virsh also has a interactive mode I like 19:22
@nirik let me give an example from a machine here: 19:22
@nirik # virsh list 19:22
@nirik Id Name State 19:22
@nirik ---------------------------------- 19:22
@nirik 1 thulsadoom running 19:22
@nirik # ps axuww | grep thulsa 19:23
@nirik root 3657 20.5 29.0 2847016 2360028 ? Sl Apr18 4369:18 /usr/bin/qemu-kvm -S -M pc -m 2048 -smp 4 -name thulsadoom -uuid 29bb3791-3007-da35-9919-2466ea425ba1 -monitor pty -pidfile /var/run/libvirt/qemu// -boot c -drive file=/var/lib/libvirt/images/thulsadoom.img,if=ide,index=0,boot=on -net nic,macaddr=00:16:3e:38:e2:98,vlan=0,model=virtio -net tap,fd=16,script=,vlan=0,ifname=vnet0 -serial none -parallel none -usb -vnc 19:23
@nirik you can see this is a kvm instance. 19:23
@nirik all those things on the kvm command line are taken care of for me by libvirt. 19:23
@nirik since I defined this guest to have 2048mb memory, 4 cpus, the name and uid it does, the disk image, etc. 19:24
@nirik yes, you can also run 'virsh' and get a interactive mode where you can do a set of commands... 19:24
@nirik subfusc: does that make sense? 19:24
@nirik ok, any further questions on those tools? 19:25
subfusc nirik: do i got it right if i think by running virsh stop <name> you kill the kvm instance? 19:25
pluvo What is the difference between "virsh -c qemu:///system" and "virsh -c qemu:///session"? 19:25
@herlo nirik: yes, I have one about virsh 19:25
@herlo specifically, I'd like to create a guest using the interactive mode, then save that out so it can be duplicated, how hard is that? 19:26
@nirik subfusc: yes. well, 'shutdown', but right. ;) 19:26
@nirik pluvo: good question. I always have used system and thats the default. I am unsure what session is there... 19:26
@nirik herlo: several ways. Perhaps the easiest is to make your template guest and copy the xml file and then use a 'virsh define <file.xml>' on it. 19:27
@nirik I just realized I left out 'virt-install'. 19:27
@nirik It's a command line version of the new guest procedure. It will ask you for memory, name, etc... or you can pass those as arguments to create a guest all from the command line. 19:28
@nirik herlo: so, you could just make a virt-install command line with all your parameters filled in as you like too. 19:28
@nirik I would like to touch on the guest config format that libvirt uses for a few here. 19:29
@nirik libvirt stores info about each guest in a xml file. Those files are located under /etc/libvirt/ 19:30
@nirik this xml format describes all the things about that guest libvirt needs to know to start/stop/manage it. 19:30
@nirik here's an example of a simple one: 19:31
@nirik if you are comfortable with xml or just want to do something that the command line or gui interfaces don't do, you can edit this xml and define guests by loading that xml file 19:32
@nirik herlo: oh, there is also 'virt-clone' to clone a template guest to another. 19:33
@nirik ok, any questions on the xml or anything else? ;) 19:33
pluvo here 19:34
pluvo if i edit the xml file under /etc/libvirt/... how can i tell the libvirt-daemon to reload this? 19:34
pluvo Normally i edit the xml file with "virsh edit" 19:34
@nirik pluvo: the only ways I know are: restart libvirtd. Or 'undefine' the guest and 'define' it again. I don't know of any easier way. 19:35
@herlo nirik: oh, nice 19:35
@herlo nirik: that's closer to what I was after... 19:36
@nirik pluvo: just out of curiosity, what do you need to edit usually? 19:36
@nirik ok, I would like to mention a few cool related items to libvirt here before we run low on time: 19:37
pluvo i changed the network device to "e1000" 19:38
@nirik virt-p2v is a pretty cool livecd for transfering a physical host to a guest on a libvirt server. 19:38
@nirik 19:38
@nirik pluvo: ah, yeah, I hope that is configurable via the tools soon. 19:38
@nirik basically with virt-p2v, you download and make this livecd, then boot it and it manages transfering that host to a guest on a libvirt server. It handles the transfer of data and setup on the libvirt side. 19:39
@nirik very handy to move a machine to a virtual you want to no longer run as a physical machine. 19:39
@nirik And I also wanted to mention libguestfs. This is a library that lets you manipulate guest disk images... you just need access to the image. 19:40
@nirik You can use that to do cool things like script changes over a pool of guests. Or modify config without having to boot guests. 19:41
@nirik see for more info on that 19:41
@nirik any other further questions from the floor? 19:42
@herlo nirik: what about partitioning a disk img file, can libguestfs do that? I know it used to be done with kpartx, but I never learned that tool... 19:42
@nirik herlo: I think it requires the existing image already, and just manipulates the contents... I don't think it can partition. 19:43
@herlo the idea being that if the host is in a file, it's difficult to expand / partition, etc. 19:43
Acedip why actually do we need libvirt, virtualization backends like xen, vbox doesn use it eveywhere ? 19:43
@herlo nirik: ok 19:43
@nirik Acedip: well, because it puts a standard frontend on those things. You don't need to care what backend it's using (usually). 19:44
@nirik you can manage them the same if they are virtualbox or kvm or xen. 19:44
@nirik just need to learn one set of commands and such. ;) 19:44
@nirik also, libvirt is fully open (LGPL ed) so it gets rapid improvement and feedback from users. 19:45
@herlo nirik: so let's ask an obvious question. And it's probably not something anyone knows for sure. Xen functionality is currently not available in Fedora. Will it be coming back? 19:46
@nirik herlo: yeah, I don't know the answer for sure, but it is still being worked on. There are some devel/testing kernels for f11 with Xen Dom0 support. 19:46
@herlo oh? I thought for sure it'd be at least F12, that's good to hear... 19:46
@nirik and they are working on merging things upstream. So, perhaps f12 or f13 will have support back for xen Dom0 19:47
@nirik yeah, nothing official for f11, but it's being worked on. 19:47
* nirik checks his notes to see what else he wanted to cover. 19:47
@herlo I did see the stuff for f12, but didn't know there was anything going on for f11 :) 19:47
@nirik oh yeah, virt-viewer. So, virt-viewer lets you connect to a vnc console on a guest, so you can run and use gui programs 19:48
@nirik A nice new feature in f11 will be that the resolution has been increased and the mouse handling is wonderful now. 19:48
@nirik virt-viewer also lets you send various keys to the guest... 19:49
@nirik control-alt-del, control-alt-f2, etc... you can also scale it to fit in your client session and take screenshots. 19:50
* kdn applauds 19:50
@nirik you can connect via a ssh transport from your desktop to the server running libvirt easily by passing it a -c string. 19:50
@nirik for example here, I would use 'virt-viewer --connect qemu+ssh://root@theleb/system thulsadoom' 19:51
@nirik most of the tools take this --connect argument. In this case thats qemu(really kvm) via ssh and root on the machine 'theleb' connecting to guest 'thulsadoom' 19:51
@nirik so it's a secure fast gui console on the guest 19:51
@nirik the mouse handling has been vastly improved by changing the guest mouse device to a tablet. ;) 19:53
@nirik that way there is absolute control over where the pointer is. 19:53
@nirik any questions on virt-viewer? 19:54
@nirik oh, one thing I failed to mention when talking about storage: 19:54
@nirik You can use a file on your server to contain the guest disk space. You can also tell libvirt to use a 'sparse' file. This means that if you assign a 20GB drive to a guest, and make it a file it will not allocate all 20GB of that, only as data fills it up. 19:55
@nirik doing this you can have guests with more space than your host, but of course if they fill up your host drive, it could cause data loss on the guests. 19:55
* jayson_r has a question about that 19:56
@nirik You can also make new virtual drives and attach them to guests anytime you like. 19:56
@nirik jayson_r: ask away. 19:56
jayson_r Is there a performance difference between a sparse file and a fully allocated file? I've found that there is under VirtualBox and VMware in the past. 19:56
@nirik good question. I tend to do sparse ones... but I don't think I have benchmarked it with a allocated one. 19:57
@nirik I don't know, but might be fun to benchmark. ;) 19:57
@nirik also, lvm and raw partition would be nice cases to throw in there. 19:58
pluvo The default storage pool is '/var/lib/libvirt/images/', right? How can i change this? 19:58
@nirik pluvo: yes, you can do a 'virsh pool-edit' and define a new pool, or I think virt-manager has a way to define one. 19:58
jayson_r pluvo: in virt-manager 19:59
@nirik note that selinux expects guests images to be in that dir, so you may run into selinux issues if you pick another. 19:59
jayson_r edit - host details 19:59
jayson_r storage tab 19:59
* nirik nods. 19:59
@nirik Also in f11 we have svirt. 20:00
jayson_r svirt? 20:00
@nirik basically this is selinux protecting guests from each other and the host. ;) 20:00
jayson_r oh 20:00
@nirik Features/SVirt_Mandatory_Access_Control 20:00
@nirik pretty nice stuff to keep guests and host from compromising each other. 20:01
@nirik ok, anyone have any further questions? or shall we wrap things up? 20:01
@nirik ok, lets call it a class. ;) 20:02
@nirik thanks for coming everyone. 20:02
DiscordianUK Thanks nirik 20:02
kdn Thanks, nirik. Well done! 20:02
@nirik I'd be happy to answer further questions here or in #fedora. 20:02
* subfusc is glad nirik had this session, and thanks nirik for the wonderfull class, and answering his stupid questions 20:02
jayson_r nirick: awesome job - thanks for your time 20:02
homerofutoi thank you nirik, good explaination 20:03
jayson_r nirik: sorry for the misspell :-) 20:03
@nirik questions are good. ;) 20:03
@nirik libvirt is great stuff. 20:03
pluvo nirik, thanks! 20:03
* nirik notes there is still 4 hours left of the teaching day if anyone wants to step up and teach a last minute class. 20:04

Generated by 2.7 by Marius Gedminas - find it at!