Настройка KVM под Ubuntu Server 10.04 LTS. Часть 6 – Прямая работа с KVM
Использование KWM напрямую
В основном этот мануал фокусируется на использование KVM через libvirt, однако так же возможно работать с KVM напрямую. Это не рекомендуется, так как довольно таки громоздко, но может быть иногда очень полезно.
KVM очень похож на на Qemu и он позволяет запускать машины из командной строки.
Основной синтаксис :
1 |
kvm -m 512 -hda disk.img -cdrom ubuntu.iso -boot d -smp 2 |
- -m = память(in MB)
- -hda = первый жесткий диск
- Вы можете использовать различный форматы образов .img, .cow
- Вы так же можете загрузиться и с жесткого диска.Будте осторожны с этой опцией,если вы не хотите загрузиться с хостового корневого раздела
- Синтаксис -hda /dev/sda
- Это вызовет ваше меню grub из вашей MBR когда вы запустите kvm.
- -cdrom может быть iso образом или приводом CD/DVD.
- -boot [a|c|d|n] загрузиться с дисковода (a), жесткого диска (c), CD-ROM (d), или сети (n)
- -smp = количество процессоров
- -alt-grab изменить комбинацию Ctrl-Alt захвата мыши на Ctrl-Alt-Shift ( очень полезно, если вы часто используете некоторые быстрые клавиши как Ctrl-Alt-Del или Windows-E)
Вообще, опций гораздо больше. Помощь доступна по команде:
1 |
kvm --help |
Bridged Networking
Для того, чтобы запустить KVM используя сетевой мост от польователя, нам необходимо сделать некоторую конфигурацию.
1. Для начала сделайте вашу карту сетевым мостом, как описано в Настройка сети в KVM
2. Установите uml-utilities
1 |
sudo apt-get install uml-utilities |
3. Установите себе разрешение на устройство tun. Используя любой редактор, отредактируйте edit /etc/udev/rules.d/40-permissions.rules, добавьте эти строки в конец файла:
1 |
KERNEL=="tun", GROUP="kvm", MODE="0660" |
4. Перезагрузитесь (для того, чтобы поднялся ваш мост и устройства tun).
5. Отредактируйте /etc/kvm/kvm-ifup добавив sudo в начало команд ip и brctl
1 2 3 4 5 6 |
#!/bin/sh switch=$(ip route ls | awk '/^default / { for(i=0;i<NF;i++) { if ($(i) == "dev") print $(i+1) }}') '''sudo''' /sbin/ip link set dev "$1" up '''sudo''' /usr/sbin/brctl addif ${switch} $1 exit 0 |
6. Нам нужен скрипт-обертка для запуска kvm. Я помещу этот скрипт в ~/bin и назову его kvm-bridge. Если ~/bin в вашей переменной path вы можете вызвать набрать команду в любом месте. Этот скрипт собран из множества источников
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#!/usr/bin/env bash # script to manage tap interface allocation # for linux kernels >= 2.6.18 # modified by bodhi.zazen from : # http://calamari.reverse-dns.net:980/cgi-bin/moin.cgi/FrequentlyAskedQuestions#head-2511814cb92c14dbe1480089c04f83c281117a86 # http://ubuntuforums.org/showthread.php?t=528046 # http://www.howtoforge.com/using-kvm-on-ubuntu-gutsy-gibbon # set up a tap interface for qemu # USERID - uid qemu is being run under. USERID=`whoami` # generate a random mac address for the qemu nic # shell script borrowed from user pheldens @ qemu forum ranmac=$(echo -n DE:AD:BE:EF ; for i in `seq 1 2` ; \ do echo -n `echo ":$RANDOM$RANDOM" | cut -n -c -3` ;done) # specify which NIC to use - see qemu.org for others # model=r8169 # Set model based on this how-to # http://www.howtoforge.com/using-kvm-on-ubuntu-gutsy-gibbon model=rtl8139 iface=`sudo tunctl -b -u $USERID` # start kvm with our parameters # echo "Bringing up interface $iface with mac address $ranmac" # nohup added to allow kvm to run independent of the terminal nohup kvm -net nic,vlan=0,macaddr=$ranmac -net tap,vlan=0,ifname=$iface $@ # kvm has stopped - no longer using tap interface sudo tunctl -d $iface &> /dev/null |
7. Установит бит запуска на ваш новый скрипт:
1 |
chmod 0755 ~/bin/kvm-bridge |
8. Измените группу суперпользователей для того, чтобы разрешить членам группы kvm запускать скрипт-обертку kvm-bridge и создавать сетевые мосты без запуска KVM от root.
1 |
visudo |
Добавьте эти строки в конец файла:
1 2 |
# Allow members of the kvm group to configure a bridged virtual network interface %kvm ALL=(ALL) NOPASSWD: /sbin/ip, /usr/sbin/brctl, /usr/sbin/tunctl |
9. Теперь запускайте kvm из командной строки. Вам не нужно прописывать сетевой интерфейс
1 |
kvm-bridge -m 512 -hda disk.img -cdrom ubuntu.iso -boot -d -smp 2 |
iptables
Добавляем эти правила в iptables :
1 2 3 4 |
# allow incoming packets for kvm guest IPTABLES -A FORWARD -d $IPADDR_FROM_GUEST_OS -j ACCEPT # allow outgoing packets from kvm IPTABLES -A FORWARD -s $IPADDR_FROM_GUEST_OS -j ACCEPT |
Измените «$IPADDR_FROM_GUEST_OS» на реальный ip адрес гостевой kvm машины (Я рассчитываю, что вы сконфигурировали вашу гостевую машину на использование статического IP).