I frequently need to have latest KVM, QEMU, libvirt and libguestfs while testing with OpenStack RDO. I either build from upstream git
master branch or from Fedora Rawhide (mostly this suffices). Below I describe the exact sequence I try to build from git. These instructions are available in some form in the README files of the said packages, just noting them here explicitly for convenience. My primary development/test environment is Fedora, but it should be similar on other distributions. (Maybe I should just script it all.)
Build KVM from git
I think it’s worth noting the distinction (from traditional master branch) of these KVM git branches: remotes/origin/queue
and remotes/origin/next
. queue and next branches are same most of the time with the distinction that KVM queue is the branch where patches are usually tested before moving them to the KVM next branch. And, commits from next branch are submitted (as a PULL request) to Linus during the next Kernel merge window. (I recall this from an old conversation with Gleb Natapov (thank you), one of the previous KVM maintainers on IRC).
# Clone the repo $ git clone \ git://git.kernel.org/pub/scm/virt/kvm/kvm.git # To test out of tree patches, # it's cleaner to do in a new branch $ git checkout -b test_branch # Make a config file $ make defconfig # Compile $ make -j4 && make bzImage && make modules # Install $ sudo -i $ make modules_install && make install
Build QEMU from git
To build QEMU (only x86_64 target) from its git:
# Install buid dependencies of QEMU $ yum-builddep qemu # Clone the repo $ git clone git://git.qemu.org/qemu.git # Create a build directory to isolate source directory # from build directory $ mkdir -p ~/build/qemu && cd ~/build/qemu # Run the configure script $ ~/src/qemu/./configure --target-list=x86_64-softmmu \ --disable-werror --enable-debug # Compile $ make -j4
I previously discussed about QEMU building here.
Build libvirt from git
To build libvirt from its upstream git:
# Install build dependencies of libvirt $ yum-builddep libvirt # Clone the libvirt repo $ git clone git://libvirt.org/libvirt.git && cd libvirt # Create a build directory to isolate source directory # from build directory $ mkdir -p ~/build/libvirt && cd ~/build/libvirt # Run the autogen script $ ../src/libvirt/autogen.sh # Compile $ make -j4 # Run tests $ make check # Invoke libvirt programs without having to install them $ ./run tools/virsh [. . .] [Or, prepare RPMs and install them] # Make RPMs (assumes Fedora `rpmbuild` setup # is properly configured) $ make rpm # Install/update $ yum update *.rpm
Build libguestfs from git
To build libguestfs from its upstream git:
# Install build dependencies of libvirt $ yum-builddep libguestfs # Clone the libguestfs repo $ git clone git://github.com/libguestfs/libguestfs.git \ && cd libguestfs # Run the autogen script $ ./autogen.sh # Compile $ make -j4 # Run tests $ make check # Invoke libguestfs programs without having to install them $ ./run guestfish [. . .]
If you’d rather prefer libguestfs to use the custom QEMU built from git (as noted above), QEMU wrappers are useful in this case.
Alternate to building from upstream git
, if you’d prefer to build the above components locally from Fedora master here are some instructions .
Hello Kashyap
I am setting up two gre tunnels between two hosts using the same external bridge.In this case (br1).I use virbr3 for internal communications of vm’s.
This is my config steps:
Hypervisor 1:
External communication
ovs-vsctl add-br br1
ovs-vsctl add-port eth0
ifconfig br1 p.q.r.s netmask 255.255.255.0
Internal bridge for vm communication
ovs-vsctl add-br virbr3
ovs-vsctl show
ovs-vsctl add-port virbr3 gre2 — set interface gre2 type=gre options:remote_ip:a.b.c.d
Hypervisor 2:
External communication
ovs-vsctl add-br br1
ovs-vsctl add-port eth0
ifconfig br1 a.b.c.d netmask 255.255.255.0
Internal bridge for vm communication
ovs-vsctl add-br virbr3
ovs-vsctl show
ovs-vsctl add-port virbr3 gre2 — set interface gre2 type=gre options:remote_ip:p.q.r.s
I am not able to communicate outside world from the vm’s.I am just able to reach the host on which vm resides and viceversa.Can you please let me know what am i missing here?