KVM

Izvor: Ubuntu-hr
Inačica 1597 od 10. ožujka 2009. u 19:54 koju je unio SilverSpace (razgovor | doprinosi)
(razl) ←Starija inačica | vidi trenutačnu inačicu (razl) | Novija inačica→ (razl)
Skoči na: orijentacija, traži

KVM (ili kernel based virtual machine) je kernel modul za virtualizaciju. Trenutno radi na x86 procesorima s wmx i svm setom instrukcija (Intel_VT odnosno AMD-V).

Više teorije na wikipediji: hr.wikipedia.org/wiki/KVM


Sama instalacija izgleda ovako:

naredba komentar
(sudo) apt-get install kvm qemu instalacija paketa (ako već nisu instalirani)
(sudo) modprobe kvm_intel (ili kvm_amd) učitavanje modula u kernel (ovisno o tome koji procesor imate)
(sudo) chmod 666 /dev/kvm (bolje je urediti /etc/group, tj. u kvm grupu dodati korisnike koji će se igrati s kvm-om ;-)
qemu-img create windoze.img 10G kreiranje image-a, može biti i manji, npr. 5G, ili veći npr. 15G (ako se namjeravate puno igrati)
kvm -hda windoze.img -cdrom /dev/cdrom -boot d -m 512 -no-acpi instalacija OS-a u image
kvm -hda windoze.img -cdrom /dev/cdrom -m 512 -no-acpi pokretanje

Ako želite imati zvuk pod kvm-om, a vaš linux podržava ALSU, učinite slijedeće:

  • na kraj naredbe za podizanje sustava dodajte: -soundhw es1370
  • u .bashrc dodajte:
export QEMU_AUDIO_DRV=alsa
export QEMU_AUDIO_DAC_FIXED_FREQ=48000
export QEMU_AUDIO_ADC_FIXED_FREQ=48000 

Mreža

Po defaultu kvm/qemu podržava user mode networking, tj. dignut je DHCP koji mrežnu karticu postavlja na 10.0.2.2, SMB (samba) server postavlja na 10.0.2.4 (ako rabite opciju -smb), i ako je računalu na kome vrtite kvm dostupan Internet, i unutar virtualnog stroja možete na Internet.

Ako želite da virtualni stroj bude dio intraneta, priča je ponešto složenija, uključuje tun/tap bridging i mijenjanje pravila vatrozida.

1. provjera da li kernel podržava tun/tap:

grep CONFIG_TUN= /boot/config-`uname -r`

CONFIG_TUN=m ili CONFIG_TUN=y je dobro, CONFIG_TUN=n je loše.

2. Trebaju vam user space naredbe tunctl i brctl, tj. uml-utilities i bridge-utils paketi, synaptic (ili apt-get) u ruke, i instalirajte to.

3. Ako ne želite kvm izvoditi kao root korisnik, trebat ćete dodati redak u datoteku /etc/udev/rules.d/40-permissions.rules slijedećeg sadržaja:

KERNEL=="tun", GROUP="kvm", MODE="0660"

(podrazumijeva se da ste korisnika koji izvodi kvm već dodali u grupu kvm).

4. kvm više ne pokrećete iz komandne linije, nego rabite skriptu koja izgleda otprilike ovako:

# napravi novu virtualnu "tap" mrežnu karticu (NIC), ako imate samo jedan virtualni stroj bit će to tap0
# USERID - uid pod kojim izvodite kvm
USERID=`whoami`
iface=`sudo tunctl -b -u $USERID`

# random mac addesa
# posuđeno/ukradeno od pheldensa s qemu foruma (http://qemu-forum.ipi.fi/)
 ranmac=$(echo -n DE:AD:BE:EF ; for i in `seq 1 2` ; \
do echo -n `echo ":$RANDOM$RANDOM" | cut -n -c -3` ;done)

# echo "Pokretanje kvm-a s mrežnom karticom $iface s slučajnom MAC adresom $ranmac"
nohup kvm -net nic,vlan=0,macaddr=$ranmac -net tap,vlan=0,ifname=$iface  &
# prije znaka & u gornjem retku treba ubaciti opcije s kojima ste inače pokretali virtualni stroj

# kad vam više ne treba virtualni stroj, uklonite virtualnu mrežnu karticu
sudo tunctl -d $iface &> /dev/null

5. Kako u virtualnom stroju koji ovako pokrećete više ne postoji DHCP, trebat će postaviti (slobodnu) statičku IP adresu iz intraneta koji rabite. Ako je host 192.168.0.10 a gateway i DNS 192.168.0.1, stavite guest IP npr. 192.168.0.11 (i DNS i gateway), i probajte ping iz jednog prema drugom OS-u. Trebalo bi raditi :-)

6. Da bi pristup Internetu proradio obično treba još jedan korak:

# dozvoli dolazne pakete za kvm
iptables -A FORWARD -d 192.168.0.11 -j ACCEPT
# dozvoli odlazne pakete od kvm-a prema vanjskom svijetu
iptables -A FORWARD -s 192.168.0.11 -j ACCEPT

Sad bi trebali moći pingati sve što inače možete s host računala. Ako ne pomaže, zamijenite -A s -I (append s insert).

7. Za svaki slučaj: kvm pri startu izvršava skriptu /etc/qemu-ifup, koja bi trebala izgledati otprilike ovako:

#!/bin/sh

echo "Executing /etc/qemu-ifup"
echo "Bringing up $1 for bridged mode..."
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
switch=$(ip route ls | awk '/^default / { for(i=0;i<NF;i++) { if ($(i) == "dev") print $(i+1) }}')
echo "Adding $1 to your bridged NIC"
sudo /usr/sbin/brctl addif ${switch} $1
sleep 2

Napomena: Izbjegnite iskušenje postavljanja statičke adrese virtualnoj mrežnoj kartici tap0, taj pristup najčešće ne donosi željeni rezultat.