kategorie:

menu:


Virtuální PC pomocí KVM/QEMU

08.03.2010   ::    topic: Linux

Už asi tak týden se seznamuji s vývojem (opravováním) součástí KDE. Včera mi došlo že není dobrý nápad řezat do větve na které sedím a že bych potřeboval na tento vývoj nějaké virtuální prostředí. Z virtualizačních řešení jsem nejdříve sáhnul po Virtualboxu (OpenSource edition), který už chvíli používám na virtualizaci Palmovského WebOS. Výkon byl ale naprosto zoufalý. Reakční doba instalátoru Ubuntu na tlačítko next byla zhruba deset minut při plném zatížení procesoru…

Jako druhé řešení jsem vyzkoušel KVM (Kernel-based Virtual Machine)… Vycházel jsem z těchto návodů:

Instalace proběhla bez problémů, výkon virtuálního systému je až na grafiku téměř k nerozeznání od systému běžícího přímo na železe…

Jak na to

  • Nahrát do jádra moduly pro podporu virtualizačních rozšíření procesoru:
    sudo modprobe kvm kvm-amd 
    (Pokud vlastníte procesor od konkurence, nahraďte druhý modul pomocí kvm-intel.)
  • Přidat uživatele pod kterým bude emulátor spouštěn do skupiny „kvm“, aby mohl přistupovat k zařízení /dev/kvm:
    sudo usermod -G kvm -a $USER
  • Nahrát do jádra modul pro virtuální sítě, abychom mohli s virtuálním počítačem komunikovat:
    sudo modprobe tun
  • Stáhnout instalační CD oblíbené distribuce
    wget http://ftp.sh.cvut.cz/MIRRORS/ubuntu-releases/karmic/ubuntu-9.10-desktop-amd64.iso
  • Vytvořit prázdný image budoucího systému s dostatečnou maximální velikostí (image se automaticky zvětšuje v závislosti na tom jak systém využívá disk)
    qemu-img create virtualpc.img -f qcow2 20G
  • Nabootujeme virtuální stroj z instalačního CD:
    kvm -m 750 -cdrom ubuntu-9.10-desktop-amd64.iso -boot d virtualpc.img
  • Nainstalujeme systém pomocí distribučního průvodce…
  • Následné spuštění virtuálního počítače je jednoduché
    kvm -no-acpi -m 1024 virtualpc.img

    Pokud ale chceme mít systém ve virtuálním počítači připojen k intenetu, je potřeba udělat trochu více… Následující script by měl nastavit vše potřebné před spuštěním stroje:

    #!/bin/bash
    
    # nahrát jaderné moduly pro kvm a virtuální síť
    sudo modprobe kvm
    sudo modprobe kvm-amd
    sudo modprobe tun
    
    # přidat virtuální síťové zařízení s plným přístupem pro aktuálního uživatele
    WHO=`whoami`
    DEV=`sudo tunctl -b -u $WHO`
    
    # nastavit IP adresu a routovací záznam
    sudo ip l set $DEV down
    sudo ip addr add dev $DEV local 10.0.1.1/24 broadcast 10.0.1.255
    sudo ip l set $DEV up
    sudo ip route add 10.0.1.0/24 dev $DEV src 10.0.1.1
    
    # zapnout maškarádu z virtuální sítě ven do internetu
    sudo su -c "echo \"1\" >/proc/sys/net/ipv4/ip_forward"
    sudo iptables -t nat -A POSTROUTING -o eth0 -s 10.0.1.0/24 -j MASQUERADE
    
    # spustit kvm
    kvm -no-acpi -m 1024 -net nic,model=rtl8139,macaddr=52:54:00:12:34:56 \
        -net tap,ifname=$DEV,script=no virtualpc.img
    

Síť na straně virtuálního počítače

Na straně virtuálního systému je potřeba nastavit síť staticky, tady existuje mnoho způsobů…
  • Do souboru /etc/network/in­terfaces přidat
    iface eth0 inet static
    address 10.0.1.2
    netmask 255.255.255.0
    gateway 10.0.1.1
    

    do /etc/rc.local poté

    ifup eth0
    
  • Odinstalovat Network-Manager a do /etc/resolv.conf přidat adresu nejbližšího DNS serveru, například:
    nameserver 147.32.127.214
    nameserver 147.32.127.218