Web-based Virtual Machine Management - Preliminary IRC Discussion

From CDOT Wiki
Jump to: navigation, search

The following text is from the September 18, 2007 discussion in #seneca.

16:02 <  bhearsum> so, this was originally going to be my system projects and as such I have a lot of documentation on it
16:02 <  bhearsum> i sent it to dave and chris, did they forward it to you?
16:02 <        jb> yeah, chris was talking about that
16:02 <        jb> no, I've talked to chris about it but he didn't tell me anything about documentation
16:03 <        jb> i figured i'd get that from you
16:03 <  bhearsum> let me forward you that e-mail
16:03 <        jb> janowikispambuchan@learn
16:03 <  bhearsum> it's got mockups, use case descriptions, class diagrams, etc.
..
16:23 <        jb> bhearsum: ok, I think i understand the purpose.. 
16:23 <        jb> now, I assume xen has an api for doing all of this?
16:23 <        jb> at least, the vm-related stuff
16:27 <  bhearsum> jb: libvirt is what does all of that fancy stuff
16:27 <  bhearsum> libvirt.org
16:27 <        jb> ok, that's what i thought
16:27 <  bhearsum> so, the frontend pretty much just makes calls to libvirt
..
16:34 <@   ctyler> jb: this is a two-step process
16:34 <@   ctyler> first, you need to build the machine image
16:34 <@   ctyler> then you need to use libvirt to manage the machine
16:35 <@   ctyler> by image, I mean a disk-in-a-file
16:36 <        jb> are xen's images like vmware
16:36 <@   ctyler> pretty much
16:36 <        jb> can they be mounted without running a vm?
16:36 <        jb> i dont know of anything like that for vmware
16:36 <@   ctyler> not directly, because they are a disk image, not a filesystem image
16:37 <@   ctyler> but you can use tools such as losetup and kpartx to dig down to the filesystem and then mount it
16:37 <        jb> so would building the image require booting the VM and somehow communicating with it? or is it simpler than that
16:37 <        jb> ok, as i hoped
16:37 <@   ctyler> there are three ways to do this:
16:37              jb looks up losetup and kpartx :)
16:37 <@   ctyler> boot the VM and go through an install process
16:38 <@   ctyler> or use kpartx etc and build the image without starting the vm
16:38 <@   ctyler> or copy an existing image
16:38 <@   ctyler> the last one is fastest, especially if you use something like lvm snapshots to do it quickly
16:38 <@   ctyler> you could combine several "disks" for a single machine
16:38 <@   ctyler> one might have the os, the second the tools, the third the source tree
16:39 <@   ctyler> so you'd have pre-made images for all these and you just mix and match them
16:39 <@   ctyler> the vm would see them as /dev/hda, /dev/hdb, /dev/hdc (or three scsi disks)
16:40 <        jb> ah i see, so no copying files to and fro like i was thinking
16:41 <@   ctyler> you can do it that way too -- start with a basic image of the OS pre-installed and then stuff it with the files you need
16:42 <@   ctyler> you'll probably want to read up on lvm snapshots too
16:42 <        jb> yes, i was just going to say..
16:43 <        jb> now, what's the difference between 2) and 3), i.e. " use kpartx etc and build the image" and "copy an existing image"
16:45 <        jb> by 2) do you mean copy individual files to a single image, as I was suggesting, and by 3) meaning just mounting block devices?
16:46 <@   ctyler> for (2) you'd create the disk image in a file, then create the filesystem, then mount it, and use RPM or apt-get to populate that filesystem with selected packages
16:47 <@   ctyler> for (3) you'd copy existing pre-populated disk images, if necessary modifying a few files
16:47 <    shaver> COW, baby
16:48 <@   ctyler> exactly, use the Linux LVM snapshot facility to create a copy-on-write snapshot
16:48 <@   ctyler> jb: you grok copy-on-write?
16:48 <        jb> not quite, i'll read up on it
16:49 <@   ctyler> short version: you have a 1000-block filesystem, you want a copy
16:49 <@   ctyler> the OS sets up a "copy" but it actually uses the same 1000 blocks for the original and the copy
16:49 <@   ctyler> as soon as you try to write to the original or the copy, though, the OS make a copy of _just that block_
16:50 <@   ctyler> so if, in the end, you only change 10% of the blocks, then you only need 1010 blocks, not 2000
16:50 <@   ctyler> plus the COW "copy" gets set up in seconds instead of minutes
16:50 <@   ctyler> whoops, 1100 blocks not 1010
16:51 <@   ctyler> all the logic for that is already in the LVM layer
16:52 <        jb> aha, so any of these VM permutations would really be on one of these COW "partitions(?)", taking up a trivial amount more space than the base config images, rather than duplicating them in >1GB files over and over?
16:52 <    shaver> yeah
16:52 <    shaver> until you want to upgrade the OS
16:52 <    shaver> but don't worry about that part
16:53 <@   ctyler> now use multiple disks per virtual machine, one disk with the OS, one with the tools, one with a particular source version
16:53 <@   ctyler> mix & match to provision the machine in a few seconds
16:55 <        jb> will the tools be that easily transplanted between OS's? i assume by tools we mean dev toolchain gcc/autoconf/etc
16:55 <@   ctyler> if you pick carefully, yes
16:56 <@   ctyler> but if you don't want to use different toolchain versions then you could use two disks: OS+toolchain, source
16:57 <@   ctyler> the other gotcha is preventing machine collisions, each VM will need a separate IP address (and, in the case of Windows systems, possibly a separate activation key, let's ignore Windows ftm)
16:57 <@   ctyler> you can reach into the disk image and configure a static IP
16:58 <@   ctyler> or, through libvirt, configure the MAC address
16:58 <@   ctyler> and tell the DHCP server which IP address to serve to that MAC
17:00 <@   ctyler> likewise with auth, you can reach into the image and configure an account for the user, or the images can be configured to authenticate with LDAP
17:01 <        jb> ok, so each vm will need little tweaks to make them unique
17:02 <@   ctyler> or the unique info needs to come from external servers (DHCP, LDAP, ...)
17:02 <        jb> right
17:03 <    shaver> there are tools to help with it, too
17:03 <    shaver> like bcfg2, I think
17:03 <    shaver> or cfengine
17:04 <        jb> ok, I'll leave it at that for now and let my brain settle around it
17:05 <        jb> in the meantime, should I be tinkering with xen on my own machine/s, or does seneca/acs have some non-production servers i can experiment with?
17:05 <@   ctyler> actually the lanux stuff from 10thpower might fit in too 
17:06 <@   ctyler> there are some clusters with vm capability at school
17:06 <@   ctyler> but it's worth trying this out on your own box
17:06 <@   ctyler> do you have a machine with hardware virt capability? (Intel core2 or AMD x2?)
17:06 <        jb> yeah, a laptop and a desktop
17:07 <        jb> i specced out my thinkpad to make sure it had intel vt, noone at lenovo/ibm could tell me 
17:07 <@   ctyler> perfect, then you have a lot more options
17:08 <@   ctyler> you can use Xen paravirt or full-virt, or kvm, or any of the newer toys
17:08 <@   ctyler> kvm is pretty nice, because the vm runs as a regular process, and you can see it with 'top', kill it, etc.
17:09 <        jb> do any distros come with xen 'well integrated'?
17:09 <@   ctyler> F7 has Xen and KVM
17:09 <        jb> i've played with it, but only in gentoo, and not really (i booted a domU but never got around to making a vm)
17:09 <        jb> and i don't want to do this in gentoo, god save me
17:10 <        jb> ok i'll look into it, get Fedora on my laptop, try getting a vm installed/booting, then start playing with libvirt
17:11 <        jb> bhearsum/ctyler: do you mind if i a) put this irc log on the wiki, b) put the .tar.gz with the mockups/usecases on the wiki?
17:11 <@   ctyler> a) is ok on my end
..
17:29 <  bhearsum> jb: no objections here