В своё время, на работе мне была поставлена задача настроить сервер, на котором мы бы могли поднимать виртуалки для всевозможных трэшовых потребностей. Собственного говоря, кто-то это называет виртуализацией. Но я считаю, что решение, описанное здесь, несколько не дотягивает до полноценного понятия виртуализации. Оно подойдёт, например, для ситуации, когда у вас есть довольно мощная машина, которую не резонно использовать для сервера с малой нагрузкой, и поэтому на него вполне можно накатить несколько виртуальных серверов с небольшой нагрузкой.
Вообщем, что будем делать:
- ставить систему без иксов
- устанавливать на неё VirtualBox
- прикручивать к VirtualBox вэб-админку
- пользоваться полученным результатом во благо
Операционную систему я под это выбрал Fedora 17. Установку проводим через графический интерфейс anaconda. На шаге выбора пакетов я выбрал всё по минимуму, это:
В меню «базовая система» отметил «поддержка оборудования» и «системные средства», внутри которых оставил лишь: mc, p7zip, screen, unrar и yum-utils.
С таким скромным набором пакетов система установится очень быстро. А уже в процессе настройки будем ставить недостающие пакеты.
После установки системы нужно провести базовую настройку: настроить сеть, поставить обновления, отключить selinux и прочие действия, которые я уже много раз описывал в других статьях. Например вот в этих:
http://technotrance.su/index.php/moi-stati/linux-fedora/item/21-openmeetings2
http://technotrance.su/index.php/moi-stati/linux-fedora/item/19-1c-linux
Что ж, приступим к установке VirtualBox и вэб-интерфейса PhpVirtualBox. Мне в этом помогли вот эти статьи:
http://nikmy.ru/index.php/stati/linux/sistemnye/143-ustanovka-virtualbox-s-phpvirtualbox-ubuntu-12-04.html
http://my-box-371.blogspot.ru/2011/01/virtualbox-extension-pack-debian.html
http://yessajah.wordpress.com/2012/01/16/failed-to-opencreate-the-internal-network-verr_intnet_flt_if_not_found
Сперва наперво ставим все нужные пакеты, которые понадобятся для работы виртуалбокс и phpvirtualbox:
yum -y install SDL fontconfig freetype gsoap libICE libSM libXcursor libXdamage libXfixes libXi libXmu libXt libmng libpng mesa-libGL mesa-libglapi pciutils qt qt-settings qt-x11 kernel-devel gcc gcc-c++ make cmake automake dkms wget httpd php php-soap
Перезагрузим сервер после этого.
Теперь можно ставить VirtualBox. Я поставил версию 4.1.26_84997, поскольку с версией 4.2 и phpvirtualbox для 4.2 у меня были какие-то проблемы. Уже не помню какие, так как сервер настраивал несколько месяцев назад, а статью про это вот только щас решил написать Сейчас, уже наверняка, те проблемы ушли в прошлое, и можно ставить версию и 4.2.
Итак, скачиваю виртуалбокс:
wget http://download.virtualbox.org/virtualbox/4.1.26/VirtualBox-4.1-4.1.26_84997_fedora17-1.x86_64.rpm
и ставлю её:
rpm -ivh VirtualBox-4.1-4.1.26_84997_fedora17-1.x86_64.rpm
Теперь скачиваю Extension Pack:
wget http://download.virtualbox.org/virtualbox/4.1.26/Oracle_VM_VirtualBox_Extension_Pack-4.1.26-84997.vbox-extpack
Устанавливаю его вот такой командой:
VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.1.26-84997.vbox-extpack
Теперь нужно создать пользователя, под которым будут работать виртуалки. Я его назвал банально admin:
useradd -m admin -G vboxusers
ключ «-G vboxusers» вносит этого пользователя в группу vboxusers. Задаём пароль только что созданному пользователю:
passwd admin
После этого надо создать файл /etc/default/virtualbox вот с таким содержимым:
VBOXWEB_USER=admin
Потом перезапускаем сервис vboxweb-service:
service vboxweb-service restart
С самим VirtualBox разобрались. Теперь надо установить вэб-интерфейс phpvirtualbox. Скачиваем его от сюда:
Содержимое архива распаковываем в папку /var/www/html/phpvirtualbox и задаём правильные права на неё:
chown -R apache:apache phpvirtualbox
Потом находим файл /var/www/html/phpvirtualbox/config.php-example и в этом же месте делаем его копию с названием config.php. Затем открываем его ( config.php ) и вносим некоторые изменения. Я лишь напишу строчки, в которые я внёс изменения:
// указываем пользователя и его пароль, под которым будут создаваться виртуалки
var $username = 'admin';
var $password = 'pass_of_admin';
var $language = 'ru';
// Host ip to use for console connections. Тут надо указать локальный адрес сервака.
// Эта настройка означает, что к консольному экрану виртуалки можно будет
// подключиться через этот адрес. Адрес 127.0.0.1 здесь указывать НЕ надо!
var $consoleHost = '192.168.0.6';
Как видим, изменения в конфиге небольшие. Сохраняем.
Также, нужно не забыть открыть нужные порты на iptables. Находим файл /etc/sysconfig/iptables и в нужном месте вставляем строчки:
-A INPUT -p tcp -m tcp -m multiport -m state --state NEW -j ACCEPT --dports 80,433
-A INPUT -p tcp -m tcp -m state --dport 9000:9010 --state NEW -j ACCEPT
Т.е. мы открыли порты для подключения к вэб-админке и для подключения к консольному экрану виртуалки. Не забываем перезапустить iptables.
Теперь запускаем апач и добавляем его в автозагрузку:
service httpd start
systemctl enable httpd.service
И пробуем зайти в вэб-админку по адресу:
http://ip_of_your_serv/phpvirtualbox
Логин и пароль там изначально стоят admin admin. Само собой, что пароль надо будет потом сменить. phpvirtualbox выглядит так же, как и родной VirtualBox GUI:
Если вы знакомы с родным GUI-интерфейсом виртуалбокса, то с использованием интерфейса phpvirtualbox проблем не будет. Однако я всё равно заострю внимание на некоторых тонкостях. Первая из них — это удалённый дисплей (консольный экран), настраивается он вот так:
т.е. надо указать всего один порт, по которому этот дисплей будет доступен.
Идём далее. После того, как вы настроили все остальные параметры виртуальной машины и пытаетесь её запустить и получили вот такую ошибку:
Failed to open/create the internal network
‘HostInterfaceNetworking-’ (VERR_INVALID_PARAMETER).
Failed to attach the network LUN (VERR_INVALID_PARAMETER)
то эта проблема вызвана тем, что в типе сетевого соединения указан сетевой мост. Эта проблема решается так:
Сначала в консоли переключаемся на пользователя, из-под которого запущена виртуалка (см середину статьи). У меня это admin:
su admin
заетем делаем вот такие команды:
VBoxManage modifyvm win2008 --bridgeadapter1 em1
VBoxManage showvminfo win2008
где win2008 — это название виртуальной машины, а em1 — это сетевуха, через которую настроен сетевой мост.
После этих команд пробуем запустить виртуальную машину снова. На этот раз всё должно быть нормально, машина запустится:
а к удалённому дисплею (консольному экрану) машины можно подключиться через любой RDP-клиент. Например я подключился через KRDC:
Дальше уже идёт обычная установка Windows на виртуалку.
Ещё, от себя, хочу добавить следующее: у меня винда 2008 установилась нормально, но вот когда начал на неё устанавливать обновления, то винда упорно зависала на одном из них. Я так и не понял с чем это связано, потому что эта же самая винда с этого же самого образа без проблем устанавливается и обновляется в виртуалбоксе через GUI-интерфейс. Поэтому, в своём случае, я сделал так: установил и настроил виртуальную винду у себя на рабочем компе через GUI-интерфейс и потом, уже готовую виртуальную машину, я экспортировал на сервак с phpvirtualbox. Это легко делается через меню «экспорт конфигурации» и «импорт конфигурации», которые есть как и в GUI, так и в phpvirtualbox. В итоге всё прекрасно работает и по сей день.
Комментарии