KVM
Izvor: Ubuntu-hr
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.