QEMU

В общем случае запуск с подготовленным образом выглядит следующим образом.

#!/bin/bash
/sbin/modprobe tun
/sbin/modprobe kvm_intel
/usr/bin/chmod 666 /dev/kvm
/usr/sbin/tunctl -g qemu -t tap0
su -s /bin/sh -c "/usr/bin/qemu-system-i386 \
-hda /var/vm/ranok_vm.img \
-hdb /var/vm/ranok_var.img \
-m 256 -boot c \
-cdrom /home/ftp/iso_images/slackware13_37/slackware-13.37-install-dvd.iso \
-enable-kvm -net nic -net tap,ifname=tap0 -monitor telnet:localhost:7101,server,nowait,nodelay \
-localtime -daemonize -nographic " nobody

Коментарии

Подготовка запуска

/sbin/modprobe tun → Загрузить модуль псевдо-устройств TUN/TAP
/sbin/modprobe kvm_intel → Загрузить модуль поддержки виртуализации на процессоре Intel автоматически загружает подуль kvm
/usr/bin/chmod 666 /dev/kvm → Устанавливаем права позволяющие использовать виртуализацию всем пользователям
/usr/sbin/tunctl -g qemu -t tap0 → устанавливаем группу для псевдо-устройства для возможности доступа пользователям (в данном случае группы qemu)

Запуск

su -s /bin/sh -c «/usr/bin/qemu-system-i386 \

hda /var/vm/ranok_vm.img \

hdb /var/vm/ranok_var.img \

m 256 -boot c \

cdrom /home/ftp/iso_images/slackware13_37/slackware-13.37-install-dvd.iso \

enable-kvm -net nic -net tap,ifname=tap0 -monitor telnet:localhost:7101,server,nowait,nodelay \

localtime -daemonize -nographic » nobody

В данном примере запуск осуществляется от пользователя nobody.
# su -s /bin/sh -c «…….» nobody → обертка

Собственно сам запуск

/usr/bin/qemu-system-i386 → qemu эмулятор
-hda /var/vm/img1.img → образ для hda
-hdb /var/vm/img2.img → образ для hdb
-m 256 → Памяти 256Мб
-boot c → Загружаемся с hda
-cdrom /home/ftp/slackware13_37/slackware-13.37-install-dvd.iso → подключаем образ CD
-enable-kvm → Включить эмуляцию ядра
-net nic -net tap,ifname=tap0 → Подключить сетевую подсистему.
-monitor telnet:localhost:7101,server,nowait,nodelay → Разрешить использования монитора управления VM
-localtime → Системные часы показывают локальное время
-daemonize → Следует из названия
-nographic → Нет монитора

Дополнительные скрипты

qemu-ifup

#!/bin/sh
sudo /etc/qemu-ifup-sudo $@

qemu-ifup-sudo

#!/bin/sh
echo "Binding interface $1 "
/sbin/ip link set $1 up
/usr/sbin/brctl addif br0 $1

qemu-ifdown

#!/bin/sh
sudo /etc/qemu-ifdown-sudo $@

qemu-ifdown-sudo

#!/bin/sh
echo "Unbinding interface $1 "
/usr/sbin/brctl delif br0 $1
/sbin/ip link set $1 down

Выдержка из /etc/sudoers (Не забывая о необходимости использовать visudo)

%qemu ALL=(ALL) NOPASSWD: /etc/qemu-ifup-sudo *
%qemu ALL=(ALL) NOPASSWD: /etc/qemu-ifup *
%qemu ALL=(ALL) NOPASSWD: /etc/qemu-ifdown-sudo *
%qemu ALL=(ALL) NOPASSWD: /etc/qemu-ifdown *

При иннициализации системы создаем некоторые настройки

/usr/sbin/brctl addbr br0
/sbin/ip link set br0 up
/sbin/ip addr add <ip.add.res.s/su> dev br0

При этом сетевая подсистема выглядит как бридж в который подключена хост машина интерфейсом br0
и виртуальные машины интерфейсами tun/tap.
Cкрипты qemu-ifup и qemu-ifdown обеспечивают подключение и отключение от этого бриджа.

Монитор состояния может использоваться для

Выключения виртуальной машины и других функций контроля и управления.
«Нажать кнопку питания» на виртуальной машине можно так

echo "system_powerdown" | /usr/bin/nc localhost 7101