как удобно работать с kvm-qemu на удаленном сервере?

Какое-то время назад встала задача по поднятию на удаленном сервере виртуалок и, собственно, работе с ними. Цельной статьи "для удобной работы сделайте...." я как-то не нашел, что заставило таки попыхтеть над гуглом :) Собственно для того чтобы в следующий раз мне (или не мне) не пришлось опять искать все по отдельности - решил собрать все воедино. Собственно если измышления мои сугубо чайниковые, не пинайте почем зря, а лучше направьте на путь истинный, как сделать правильнее.

Итак у нас есть некая машина (gentoo) на просторах интернета где нужно поставить одну(несколько) виртуалок. При этом:
1. При шатдауне (ребуте) хост-машины виртуалки должны автоматически шатдаунится (а не отрубатся эмулируя "выключенное питание").
2. При поднятии хост машины виртуалки должны автоматически подниматся...
3. Нужно иметь возможность управления(изменения параметров) виртуалок без их перезагрузки (через qemu monitor) - чаще всего такая необходимость появляется когда нужно "вставить cdrom" :)

С первыми двумя задачами отлично справляется kvm.init некого Michael Mair-Keimberger.
Для работы скрипта необходимы следующие пакеты (скорее всего большинство из них уже стоит в вашей системе):

sys-apps/coreutils
sys-apps/net-tools
sys-apps/grep
sys-apps/iproute2
sys-process/procps
net-misc/bridge-utils
net-analyzer/netcat6

Работать с kvm.init достаточно просто, скачиваем, кладем в /etc/init.d/, далее

cd /etc/init.d/
chmod +x kvm.init
ln -s kvm.init kvm.virtualkaname 

Вместо "virtualkaname", естественно, пишем имя своей виртуалки (например windows2008 или haiku). Потом вытаскиваем default.config, кладем в /etc/conf.d/, переименовываем (или копируем) в kvm.virtualkaname (Это важно!!! название конфига должно совпадать с названием init скрипта) и редактируем конфиг. Там несложно, все с комментариями.

Собственно все, после этого можно запускать (/etc/init.d/kvm.virtualkaname start) вашу виртуалку.
...мне, правда, слегка не понравилось что виндовая виртуалка (по крайней мере 2008 винда) все время орала про "обнаружение новой сети", поэтому я слегка поменял в kvm.init функцию start_tap_device(). У меня она выглядит так:

start_tap_device(){
  if ( ${VM_HAVE_NET} ); then
    einfo "Setting up the tap interface: tap$startup_tap_id"
    ${TUNCTL} -b -u ${TAP_USERID} -t tap${startup_tap_id} || return 1

    einfo " Linking the bridge interface with tap${startup_tap_id}"
    ${BRCTL} addif ${BRDEV} tap${startup_tap_id} || return 1

    einfo " Bring tap${startup_tap_id} interface up"
    ${IP} link set dev tap${startup_tap_id} address 1a:46:0b:ca:bc:${startup_tap_id}  up promisc on || return 1
  fi
}

...благодаря чему каждый tap интерфейс имеет свой (неизменный) mac-address и винда (схавав эти адреса для разных tap интерфейсов) больше не ругается на "новую сеть". (впрочем это дело добровольное, можно работать и с оригинальным скриптом).

Собственно все, наши виртуалки работают до тех пор, пока нам не понадобится подключить к ним cd-rom (или еще что-нибудь сделать) не перегружая их.
С этим нам поможет маленький скриптик qemu-monitor.sh. Скачиваем, сохраняем, запускаем (под юзером, у которого есть доступ к сокетам виртуалок... ну или под рутом):

chmod +x qemu-monitor.sh
./qemu-monitor.sh /var/run/virtualkaname.sock info status

...и получаем информацию о статусе виртуалки. ...вместо info status можно указывать любые команды, которые поддерживает QEMU monitor.
Например, для того чтобы сменить cd:

./qemu-monitor.sh /var/run/virtualkaname.sock change ide1-cd0 /home/user/iso/MarioBrothers.iso

Спасибо за внимание, надеюсь это хоть кому-нибудь в чем-нибудь поможет. :)

Мдя, в меморииз как

Мдя, в меморииз как вылысыпыдный вылысыпыд для костыльных костылистов. Спасибо, схоронил в анналах.

app-emulation/libvirt

10 минут на настройку, virsh/viewer и "Он сказал поехали!"

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Учитывая безумие с настройкой

Учитывая безумие с настройкой виртуальных сетей в libvirt(хорошо что хоть есть режим "использовать указанное сетевое устройство") - альтернативы приветствуются. Но таки да, libvirt в остальном - довольно гибкое и адекватное решение.

Нейтральность - высшее достижение сознания!

>>Учитывая безумие с

>>Учитывая безумие с настройкой виртуальных сетей в libvirt
Виртуальными сетями не пользуюсь, это имхо для лаборатории нужно. Есть ли пруфлинки на руководство по безумной настройке выиртуальных сетей? Мои виртуалки в локальной сети работают через мост, указание локального моста на безумие явно не тянет. Связка неплохо ведет себя в кастере. Учитывая последнее мне удобно вообще не работать с qemu, а поручить сие дело связке pacemaker+libvirt. Ну а в случае разборок косяков лучше доступа по ссх на удаленку никто не придумал, ну или в крайнем случае неработоспособности - ило.

Альтернатив полно. От пионерских поделок до "вполне серьезных вещей за деньги".
http://qemudo.sourceforge.net/
http://witsbits.com/

безумие с настройкой

 безумие с настройкой виртуальных сетей в libvir

Ну от тебя не ожидал такого - у мну есть доступ к серверу с овер 70 виртуалками на ем, там куча сетей - и никакого геммора я не вижу.

Алсо, ты забыл про решвния виртуальных ( дистрибьютед ) свитчей -там да , сначала геммор, а потом счастье.
( возвращаясь к "срачику" на джаббере - опенсвитч в генте тоже не полнофункционально-рабочий , так что потестить ево не удастся именно на генте )
Хотя да, я согласен, что решений уровня датацентра под квм/либвит примерно 1>~(3*.(3)) причем конечно нестыкуемых между собой.

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".