Некоторое время назад столкнулись с задачей сделать виртуальную машину, которая будет подниматься как сервис на одном из серверов.
Для реализации этой задачи нам нужен Virtualbox с поддержкой Headless. Ставим либо app-emulation/virtualbox-bin, либо app-emulation/virtualbox. На virtulbox-bin версии 4.1.12 столкнулись с проблемой отсутствия звука, потому мы использовали ту версию, что полностью собирается из исходников.
echo "app-emulation/virtualbox headless extensions alsa" >> /etc/portage/package.use/custom
emerge -a app-emulation/virtualbox
После того, как мы установили Virtualbox, добавим /etc/conf.d/modules модули необходимые для работы виртуальных машин: vboxdrv vboxnetflt vboxnetadp
. Чтобы не перезагружать компьютер, а работать прямо сейчас выполним: modprobe -a vboxdrv vboxnetflt vboxnetadp
Теперь нам необходимо создать пользователя, от которого мы будем запускать нашу виртуальную машину и производить все последующие действия и перейдем на выполнение команд от этого пользователя.
useradd vbuser -m -G audio,cdrom,video,cdrw,users,vboxusers
su vbuser
cd
Теперь приступим к созданию и настройке виртуальной машины.
VBoxManage createvm --name "winxp" --register
Потом мы задаем настройки для этой машины. Сеть делаем в режиме бриджа, чтобы машина имела свой собственный ip в сети.
VBoxManage modifyvm "winxp" --memory "512" --acpi on --boot1 dvd --nic1 bridged --bridgeadapter1 eth0
Создаем виртуальный жесткий диск размером 10Гб и устанавливаем его первым для нашей машины.
VBoxManage createhd --filename "WinXP.vdi" --size 10000
VBoxManage storagectl "winxp" --name "IDE Controller" --add ide --controller PIIX4
VBoxManage storageattach "winxp" --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium "WinXP.vdi"
Включаем звук.
VBoxManage modifyvm "winxp" --audio alsa
Теперь подключаем cd-образ, с которого мы будем ставить систему:
VBoxManage storageattach "winxp" --storagectl "IDE Controller" --port 0 --device 1 --type dvddrive --medium /full/path/to/iso.iso
Теперь попробуем запустить нашу виртуальную машину, если все настроено нормально, то мы увидим строчки с копирайтами и информацию о том, на каком порту поднят RDP для доступа к виртуальной машине.
VBoxHeadless --startvm "winxp"
Нормальный запуск выглядит следующим образом.
Oracle VM VirtualBox Headless Interface 4.1.12_Gentoo_
(C) 2008-2012 Oracle Corporation
All rights reserved.
VRDE server is listening on port 3389.
Теперь используя net-misc/rdesktop
подключаемся к нашей машине rdesktop host:3389
и производим установку системы.
Порт VRDP можно поменять следующим образом.
VBoxManage modifyvm "winxp" --vrdeport 3390
В случае, если на машине несколько сетевых интерфейсов, то можно указать на каком из них будет подниматься VRDP.
VBoxManage modifyvm "winxp" --vrdeaddress 192.168.1.51
Теперь настало время настройки автозапуска виртуальной машины. Для этого нам понадобится несколько файлов:
Приложенный файл virtualbox.winxp
содержит в себе настройки для запуска виртуальной машины. Его следует разместить в папке /etc/conf.d/
В данном файле мы указываем от какого пользователя, какую машину и как именно будем запускать.
# Username to start vbox as, must be part of vboxusers group.
VM_USER="vbuser"
# Virtual Machine Name
VM_NAME="winxp"
# Shutdown Method: pause|resume|reset|poweroff|savestate|acpipowerbutton|acpisleepbutton
VM_SHUTDOWN="savestate"
# Nice Priority: -20 (most favorable scheduling) to 19 (least favorable)
VM_NICE=0
Файл virtualbox
следует сделать исполняемым и разместить в папке /etc/init.d/
- это демон для запуска виртуальных машин.
Остались финальные штрихи: создаем символическую ссылку для демона запуска и добавляем его в автозагрузку.
ln -s /etc/init.d/virtualbox /etc/init.d/virtualbox.winxp
rc-update add virtualbox.winxp default
Теперь виртуальная система будет стартовать при запуске и к ней можно будет подключиться по RDP.