KVM

From Q
Jump to: navigation, search

Description

Setting up the Kernel-based Virtual Machine including network configuration and being able to create and run new machines as a normal user without requiring root privileges.

Packages

Code: cave resolve qemu-kvm
* media-libs/libsndfile [N 1.0.20]
    Reasons: *net-wireless/bluez-4.39-r2:0::gentoo
    alsa -jack -minimal -sqlite build_options: -optional_tests -split strip -trace
    "A C library for reading and writing files containing sampled sound"
    905.69 kBytes to download
* dev-libs/libnl [N 1.1-r2]
    Reasons: *net-wireless/bluez-4.39-r2:0::gentoo
    build_options: -optional_tests -split strip -trace
    "A library for applications dealing with netlink socket"
    282.16 kBytes to download
* net-wireless/bluez [N 4.39-r2]
    Reasons: *app-emulation/qemu-kvm-0.11.0:0::gentoo
    alsa consolekit cups -debug -doc -gstreamer -old-daemons -test-programs usb build_options: -optional_tests -split strip -trace
    "Bluetooth Tools and System Daemons for Linux"
    974.81 kBytes to download
* media-libs/libsdl [N 1.2.14]
    Reasons: *app-emulation/qemu-kvm-0.11.0:0::gentoo
    X -aalib alsa audio -custom-cflags -dga -directfb -fbcon -ggi joystick -libcaca -nas opengl -oss (-ps3) -pulseaudio (-svga) -tslib video -xinerama xv build_options: -optional_tests -split strip -trace
    "Simple Direct Media Layer"
* net-misc/vde [N 2.2.3]
    Reasons: *app-emulation/qemu-kvm-0.11.0:0::gentoo
    -pcap ssl build_options: -optional_tests -split strip -trace
    "vde2 is a virtual distributed ethernet emulator for emulators like qemu, bochs, and uml."
    511.71 kBytes to download
* app-text/texi2html [N 1.78]
    Reasons: *app-emulation/qemu-kvm-0.11.0:0::gentoo
    build_options: -optional_tests -split strip -trace
    "Perl script that converts Texinfo to HTML"
    442.60 kBytes to download
* app-emulation/qemu-kvm [N 0.11.0] <target>
    alsa bluetooth -esd -gnutls ncurses -pulseaudio -sasl sdl vde QEMU_SOFTMMU_TARGETS: -arm -cris i386 -m68k -mips -mips64 -mips64el -mipsel -ppc -ppc64 -ppcemb -sh4 -sh4eb -sparc x86_64 QEMU_USER_TARGETS: -alpha -arm -armeb -cris i386 -m68k -mips -mips64 -mips64el -mipsel -ppc -ppc64 -ppc64abi32 -sh4 -sh4eb -sparc -sparc32plus -sparc64 x86_64 build_options: -split strip -trace
    "QEMU + Kernel-based Virtual Machine userland tools"
    4.18 MBytes to download
Code: cave resolve iptables bridge-utils usermode-utilities
* net-firewall/iptables [N 1.4.5] <target>
    ipv6 build_options: -optional_tests -split strip -trace
    "Linux kernel (2.4+) firewall, NAT and packet mangling tools"
    450.66 kBytes to download
* net-misc/bridge-utils [N 1.4] <target>
    build_options: -optional_tests -split strip -trace
    "Tools for configuring the Linux kernel 802.1d Ethernet Bridge"
    31.89 kBytes to download
* sys-fs/fuse [N 2.8.1]
    Reasons: *sys-apps/usermode-utilities-20070815:0::gentoo
    build_options: -optional_tests -split strip -trace
    "An interface for filesystems implemented in userspace."
    481.32 kBytes to download
* sys-apps/usermode-utilities [N 20070815] <target>
    build_options: -optional_tests -split strip -trace
    "Tools for use with Usermode Linux virtual machines"
    48.98 kBytes to download

USE-Flags

File: /etc/paludis/use.conf
*/* QEMU_SOFTMMU_TARGETS: -* i386 x86_64
*/* QEMU_USER_TARGETS: -* i386 x86_64
app-emulation/qemu-kvm vde

Installation

# cave resolve qemu-kvm

Kernel Configuration

Please see: KVM Kernel Configuration for a KVM Host

Network configuration

File: /etc/conf.d/net
config_eth0=( "null" )

tuntap_tap0="tap"
config_tap0=( "null" )

brctl_br0=( "setfd 9" "sethello 2" "setmaxage 12" "stp off" )
config_br0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255" )
routes_br0=( "default via 192.168.0.1" )

bridge_add_eth0="br0"
bridge_add_tap0="br0"
# /etc/init.d/
# ln -s net.lo net.br0
# ln -s net.lo net.tap0
# rc-update add net.br0 default
# rc-update add net.tap0 default
File: /etc/conf.d/vde
VDE_MODPROBE_TUN="no"
# rc-update add vde default


Add existing user to the necessary groups

# usermod -a -G kvm,qemu username

Usage

Generate random MAC adresses

$ echo -n DE:AD:BE:EF ; for i in `seq 1 2` ; do echo -n `echo ":$RANDOM$RANDOM" | cut -n -c -3` ;done


You can always setup new machines in your home directory, but here we assume we have a separate mount-point/partition which we mount at /mnt/kvm.


# mkdir -p /mnt/kvm


File: /etc/fstab
/dev/sda4               /mnt/kvm        ext4            defaults,auto,user 0 1


# chown -R root:kvm /mnt/kvm
# chmod -R g+w /mnt/kvm
$ qemu-img create -f qcow2 /mnt/kvm/linux-test.img 15G
$ vdeq qemu /mnt/kvm/linux-test.img -cdrom /dev/cdrom -soundhw es1370 -usb -m 1024 -k de -smp 1 -vga std -localtime -net nic,vlan=0,macaddr=DE:AD:BE:FF:15:33 -net vde,vlan=0,sock=/var/run/vde.ctl


$ qemu-img create -f qcow2 /mnt/kvm/windows-test.img 15G
$ vdeq qemu /mnt/kvm/windows-test.img -cdrom /dev/cdrom -soundhw es1370 -usb -m 1024 -k de -smp 1 -vga std -localtime -net nic,vlan=0,macaddr=DE:AD:BE:EF:14:32 -net vde,vlan=0,sock=/var/run/vde.ctl

Once done installing and after enabling the remote desktop access in Windows you can add the -nographic switch and start the kvm machine via a login script for example.

$ vdeq qemu /mnt/kvm/windows-test.img -nographic -soundhw es1370 -usb -m 1024 -k de -smp 1 -vga std -localtime -net nic,vlan=0,macaddr=DE:AD:BE:EF:14:32 -net vde,vlan=0,sock=/var/run/vde.ctl

You really want to use an RDP session to connect to your Windows Boxes since the mouse movement is horrible slow and laggy when using the SDL client.