Захотел настроить на своём сервере виртуализацию, для бесплатного VPS.
Имею FreeBSD и не имею иксов. Остановил свой выбор на VirtualBox + phpVirtualBox.
1. Начинаем установку. Переходим в каталог с VirtualBox:
# cd /usr/ports/emulators/virtualbox-ose
Внимание! В FreeBSD портирована только OSE версия, в которой нет поддержки RDP.
2. Устанавливаем:
# make && make install && make clean && rehash
Т.к на сервере нет иксов, выбираем следующие опции:
Options for virtualbox-ose 3.2.10_1
[X] DEBUG Build with debugging symbols
[X] GUESTADDITIONS Build with Guest Additions
[X] DBUS Build with D-Bus and HAL support
[X] VDE Build with VDE support
[X] VNC Build with VNC support
[X] WEBSERVICE Build Webservice
3. Перед первым запуском VirtualBox-а необходимо установить модуль ядра:
# kldload vboxdrv
4. Для того, чтобы модуль ядра загружался автоматически необходимо прописать его:
# vboxdrv_load="YES" >> /boot/loader.conf
5. Запускаем ldconfig:
# /sbin/ldconfig -m /usr/local/lib/virtualbox
Теперь нам нужно как-то управлять нашим VirtualBox-ом. Для этого выберем Веб интерфейс. phpVirtualBox.
6. Устанавливаем phpVirtualBox:
# cd /usr/ports/www/phpvirtualbox
# make && make install && make clean
Далее нам необходимо настроить файрвол, DNS сервер и WEB сервер. Данный пункт вам придется настроить самостоятельно в зависимости от ваших серверов. У меня используются ipfw, BIND и Apache. Apache настраиваем на директорию /usr/local/www/phpvirtualbox, именно суда по умолчанию устанавливается phpvirtualbox.
7. Перезагружаем ipfw, Apache и BIND для применения изменений.
Не запускается. Т.к. у меня PHP установлено без поддержки SOAP.
9. Удаляем PHP:
# cd /usr/ports/lang/php5
# make deinstall
10. Ставим PHP с поддержкой SOAP:
# cd /usr/ports/net/php5-soap
# make && make install && make clean
После данных действий у меня возникли некоторые конфликты, пришлось удалить несколько ранее установленных портов. После чего у меня и у тех кто у меня хостился возникли проблемы с отображением вебсайтов. Пришлось установить следующие порты:
- php5-json
- php5-mysql
- php5-session
- php5-sockets
- php5-xml
- php5-xmlrpc
И подконфигурировать php.ini. У вас может список будет другим, а может и вообще не возникнет проблем.
11. После этого создаём пользователя для работы phpvirtualbox:
# adduser phpvbuser
12. Для работы phpvirtualbox наш пользователь должен входить в группу vboxuser, создаём группу:
# pw groupadd vboxusers
13. Добавляем пользователя в группу:
# pw groupmod vboxusers -m phpvbuser
14. Правим конфиг любым удобным редактором:
# vi /usr/local/www/phpvirtualbox/config.php
в нём нас интересует 2 строки:
var $username = 'phpvbuser';
var $password = 'пароль';
15. Назначаем в собственность phpvbuser каталог с phpvirtualbox:
# chown -R phpvbuser:vboxusers /usr/local/lib/virtualbox
16. Создаём скрипт для автозапуска phpvirtualbox после перезагрузки:
# touch /usr/local/etc/rc.d/phpvirtualbox.sh
17. И правим любым удобным редактором:
# vi /usr/local/etc/rc.d/phpvirtualbox.sh
Добавляем в него примерно следующее:
#!/bin/sh
echo -n 'phpVirtualBox daemon'
case "$1" in
start)
su - phpvbuser -c "vboxwebsrv -t 0 -F /dev/null"
;;
stop)
killall vboxwebsrv
killall VBoxSVC
killall VBoxXPCOMI
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
exit 64
;;
esac
exit 0
18. После этого запускаем phpvirtualbox:
# su - phpvbuser -c vboxwebsrv -H localhost -p 18083 -t 0 -F /dev/null"
Дальше, всё как в GUI:
19. Переходим на страницу, что настроили в Apache:
20. Cоздаём новую машину:
21. Вводим название и выбираем устанавливаемую ОС:
22. Выбираем объём оперативной памяти:
23. Выбираем существующий диск или создаём новый:
24. Выбираем тип жесткого диска, фиксированный размер или динамически увеличивающийся до определённого размера:
25. Задаём размер нашего диска:
26. Просматриваем суммарную информацию по выбранной конфигурации:
27. В списке виртуальных компьютеров выбираем наш компьютер и запускаем его:
Т.к. нет поддержки RDP можно устанавливать заказанную систему на отдельном компьютере, настраивать удалённый доступ и подкладывать в новую виртуальную машину уже готовый жесткий диск, а дальнейшие действия пусть проводит клиент на своей виртуальной мишине.
Но если кто-нибудь напортачит с виртуальной машиной, например "правильно" настроив файрвол\подмонтировав диск, или что-то в этом роде, так, что нет возможности подключиться удалённо по SSH\Telnet или другим удобным способом, то придётся этой машине настраивать консоль. Но в phpVirtualBox данной вкладки нет, т.к. мы установили версию OSE. Но мы собрали с поддержкой VNC. Поэтому для таких случаев для клиентов можно запускать на день доступ к консоли компьютера.
28. Делаем к примеру такой скриптик:
# touch /usr/local/virtualboxvnc.sh
29. И правим любым удобным редактором:
# vi /usr/local/virtualboxvnc.sh
Добавляем в него примерно следующее:
#!/bin/sh
vpc="$1"
port="$2"
pass="$3"
# Запускаем виртуальную машину под названием "vpc" (-s), с поддержкой
# VNC (-n), на порту "port" (-m), c паролем для доступа к VNC "pass" (-o)
su - phpvbuser -c "VBoxHeadless -s $vpc -n -m $port -o $pass"
# Перезапускаем через сутки машину в обычном режиме (без VNC)
echo su - phpvbuser -c \"VBoxManage controlvm $vpc reset\" | at now + 1 days
exit 0
29. Запускаем скрипт с параметрами: имя виртуального компа, порт на котором будет слушать VNC, пароль для доступа к VNC:
# /usr/local/virtualboxvnc.sh Client1_OpenSolaris 5500 password
Не забываем открыть порт на файрволе для доступа с наружи к VNC серверу.
30. Сообщяем клиенту порт, пароль доступа и срок ребута машины. И он может подключаться любым клиентом VNC к заданному порту вешего сервера и работать консольно с виртуальной машиной: