Сегодня будем устанавливать сервер виртуальных машин на базе ОС Ubuntu Server 10.04 и Virtualbox в режиме headless - без графического интерфейса (т.е. без запуска оконного менеджера на сервере). Управлять виртуальными машинами будем через веб интерфейс (phpvirtualbox) с любого компьютера в локальной сети. Так же напишем скрипт для автоматического запуска нашей виртуальной машины и научимся .
Часть 1. Установка VirtualBox
1) Устанавливаем Ubuntu Server 10.04 или 12.04 на наш физический сервер.
2) Настраиваем сетевые интерфейсы. (IP адрес моего сервера в сети 192.168.100.4)
3) устанавливаем ssh сервер и mc (Midnight Commander)
root@server: apt-get install ssh mc
4) подключаемся к серверу по ssh и далее все действия производим через ssh5) добавляем репозиторий в /etc/apt/sources.list
Открываем файл в редакторе nano:
root@server: nano /etc/apt/sources.list
в конец файла добавляем адрес репозитория virtualbox для нашего релиза(смотрим здесь: https://www.virtualbox.org/wiki/Linux_Downloads )
deb http://download.virtualbox.org/virtualbox/debian lucid contrib non-free
сохраняем. (Ctrl+O)Выходим из редактора (Ctrl+Q)
6) Добавляем ключ репозитория. В консоли:
root@server: wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
7) Обновляем список доступных для установки пакетов:
root@server: apt-get update
8) Обновляем систему:
root@server: apt-get upgrade
9) Устанавливаем пакеты, необходимые для автоматической пересборки модуля ядра virtualbox после обновления системы командой apt-get upgrade
root@server: apt-get install linux-headers-$(uname -r) build-essential dkms
10) На странице https://www.virtualbox.org/wiki/Linux_Downloads напротив нашей OS Ubuntu 10.04 LTS ("Lucid Lynx") есть две ссылки - выбираем нужную для нашего релиза ( в нашем случае i386) в браузере правой кнопкой мыши - копировать ссылку на закачку пакетаСкачиваем пакет virtualbox
root@server: wget http://download.virtualbox.org/virtualbox/4.1.12/virtualbox-4.1_4.1.12-77245~Ubuntu~lucid_i386.deb
11) Устанавливаем пакет
root@server: dpkg -i virtualbox-4.1_4.1.12-77245~Ubuntu~lucid_i386.deb
12) Устанавливаем необходимые зависимости пакета:
root@server: apt-get -f install
13) Далее надо установить VirtualBox_Extension_PackСсылка на странице https://www.virtualbox.org/wiki/Downloads
Скачиваем пакет:
root@server: wget http://download.virtualbox.org/virtualbox/4.1.12/Oracle_VM_VirtualBox_Extension_Pack-4.1.12-77245.vbox-extpack
14) Устанавливаем Extension_Pack, который добавляет следующий функционал:а) RDP сервер — позволяет подключаться к виртуальной системе удалённо с помощью любого RDP совместимого клиента;
б) Поддержка USB — позволяет передавать виртуальной машине USB устройства;
в) Intel PXE boot ROM — загрузка операционной системы по сети. Используется для создания тонких клиентов/бездисковых рабочих станций.
root@server: VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.1.12-77245.vbox-extpack
Видим вывод в консоли:
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Successfully installed "Oracle VM VirtualBox Extension Pack".
Successfully installed "Oracle VM VirtualBox Extension Pack".
Установка PHPVirtualBox.
15) Ставим веб сервер apache и php
root@server: apt-get install apache2 php5
16) Теперь необходимо установить phpvirtualbox - бесплатная реализация веб интерфейса для virtualbox с открытым исходным кодом. Идем по ссылке http://code.google.com/p/phpvirtualbox/downloads/list и берем последнюю версию phpvirtualbox.Скачиваем пакет:
root@server: wget http://phpvirtualbox.googlecode.com/files/phpvirtualbox-4.1-7.zip
17) Устанавливаем архиватор:
root@server: apt-get install unzip
18) Извлекаем файлы из архива:
root@server: unzip phpvirtualbox-4.1-7.zip
19) Запускаем Midnight Commander
root@server: mc
Удаляем все файлы в папке /var/www/копируем содержимое распакованного архива из /root/phpvirtualbox-4.1-7 в /var/www
Выходим из mc.
20) Переходим в корень нашего сайта
root@server: cd /var/www/
21) Создаем конфигурационный файл из дефолтного командой:
root@server: mv config.php-example config.php
22) Добавляем пользователя vbox в систему командой
root@server: adduser vbox
Указываем пароль пользователя vbox, запоминаем этот пароль.23) Добавляем пользователя vbox в группу vboxusers
root@server: usermod -a -G vboxusers vbox
24) Проверяем состоит ли пользователь в группе vboxusers
root@server: id vbox
25) Редактируем config.php
root@server: nano /var/www/config.php
Ищем строки:
/* Username / Password for system user that runs VirtualBox */
var $username = 'vbox';
var $password = 'pass';
Вместо pass - вводим пароль, который вы вводили при создании пользователя vbox.var $username = 'vbox';
var $password = 'pass';
----------------------------------------
В этом же файле находим строки:
/* SOAP URL of vboxwebsrv (not phpVirtualBox's URL) */
var $location = 'http://127.0.0.1:18083/';
Вместо 127.0.0.1 прописываем IP адрес нашего сервера в сети (у меня 192.168.100.4)var $location = 'http://127.0.0.1:18083/';
Получилось:
/* SOAP URL of vboxwebsrv (not phpVirtualBox's URL) */
var $location = 'http://192.168.100.4:18083/';
----------------------------------------var $location = 'http://192.168.100.4:18083/';
Находим строки:
// Host / ip to use for console connections
#var $consoleHost = '192.168.1.40';
Меняем IP на IP нашего сервера:#var $consoleHost = '192.168.1.40';
// Host / ip to use for console connections
var $consoleHost = '192.168.100.4';
----------------------------------------var $consoleHost = '192.168.100.4';
Сохраняем файл (Ctrl+O)
Выходим из nano (Ctrl+Q)
26) Для работы нашего веб интерфейса нам понадобится конфигурационный файл.
Создаем файл:
root@server: nano /etc/default/virtualbox
Вставляем в файл содержимое ниже (IP адрес меняем на IP своего сервера):
VBOXWEB_USER=vbox
VBOXWEB_HOST=192.168.100.4
VBOXWEB_PORT=18083
Сохраняем файлVBOXWEB_HOST=192.168.100.4
VBOXWEB_PORT=18083
27) Перезагружаем vboxwebsrv командой:
root@server: /etc/init.d/vboxweb-service restart
28) Для правильной обработки нажатия кнопки питания на сервере установим пакет acpid.
root@server: apt-get install acpid
29) Перезагружаем наш сервер
root@server: reboot
30) После перезагрузки сервера в браузере вводим http://192.168.100.4 (т.е. IP нашего сервера) и попадаем в веб интерфейс управления виртуальными машинами.
Логин admin
Пароль admin
Пароль admin
В веб интерфейсе phpvirtualbox можно сменить дефолтный пароль на свой и добавить / удалить пользователей, которые смогут управлять виртуальными машинами.
P.S.
Перекомпилировать модули ядра для virtualbox можно вручную запустив в консоли команду:
root@server: /etc/init.d/vboxdrv setup
Часть 2. Настраиваем автозапуск виртуальной машины при загрузке сервера.
После того, как мы создали виртуальную машину через веб интерфейс (имя: Windows2003), нам необходимо настроить автозапуск нашей виртуальной машины при загрузке сервера и сохранение состояния виртуальной машины (не выключение) при выключении/перезагрузке физического сервера.
Итак, я создал виртуальную машину с именем Windowz2003
1) Создаем скрипт автозапуска виртуальной машины (желательно, чтоб название скрипта совпадало с именем виртуальной машины - так будет легче в будущем запускать или останавливать виртуальные машины):
root@server: nano /etc/init.d/Windowz2003
Вставляем в файл следующий код:
#!/bin/bash
### BEGIN INIT INFO
# Provides: Windowz2003
# Required-Start: $all
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
# description: VirtualBox VM Autostarter v1.1 Written by Scorp.
. /lib/lsb/init-functions
VM_USER="vbox"
SU="sudo -H -u $VM_USER "
VM="Windowz2003"
#----------------------
VMSTATUS=`$SU VBoxManage showvminfo $VM |grep "State:"|awk 'NR<2{print $2}'`
# Вывод информации ---------------------
VMRUNS2=`$SU VBoxManage list -l runningvms|grep "Name:"`
VMRUNS=`$SU VBoxManage list vms | awk '{print $1}' | tr -d \"`
echo
echo -e "\e[0;36m===============================\e[00m"
echo -e "\e[01;33m Виртуальные машины в системе:\e[00m"
echo
for line in $VMRUNS
do
se_wd=`echo $VMRUNS2 | grep $line`
if [ -z "$se_wd" ]
then
echo -e "\e[01;31m OFF $line\e[00m"
else
echo -e "\e[01;32m ON $line\e[00m"
fi
done
echo -e "\e[0;36m===============================\e[00m"
echo
#---------------------------------------
case "$1" in
start)
if [ $VMSTATUS != "running" ]
then
log_daemon_msg "Starting VirtualBox $VM mashine"
$SU VBoxManage startvm $VM --type headless
log_end_msg 0
fi
;;
restart)
log_daemon_msg "Reseting VirtualBox $VM mashine"
$SU VBoxManage controlvm $VM reset
log_end_msg 0
;;
stop)
if [ $VMSTATUS != "saved" ]
then
log_daemon_msg "Saving state of VirtualBox $VM mashine"
$SU VBoxManage controlvm $VM savestate
log_end_msg 0
fi
;;
*)
echo "Usage: $0 {start|restart|stop}"
exit 1
;;
esac
:
. /lib/lsb/init-functions
VM_USER="vbox"
SU="sudo -H -u $VM_USER "
VM="Windowz2003"
#----------------------
VMSTATUS=`$SU VBoxManage showvminfo $VM |grep "State:"|awk 'NR<2{print $2}'`
# Вывод информации ---------------------
VMRUNS2=`$SU VBoxManage list -l runningvms|grep "Name:"`
VMRUNS=`$SU VBoxManage list vms | awk '{print $1}' | tr -d \"`
echo
echo -e "\e[0;36m===============================\e[00m"
echo -e "\e[01;33m Виртуальные машины в системе:\e[00m"
echo
for line in $VMRUNS
do
se_wd=`echo $VMRUNS2 | grep $line`
if [ -z "$se_wd" ]
then
echo -e "\e[01;31m OFF $line\e[00m"
else
echo -e "\e[01;32m ON $line\e[00m"
fi
done
echo -e "\e[0;36m===============================\e[00m"
echo
#---------------------------------------
case "$1" in
start)
if [ $VMSTATUS != "running" ]
then
log_daemon_msg "Starting VirtualBox $VM mashine"
$SU VBoxManage startvm $VM --type headless
log_end_msg 0
fi
;;
restart)
log_daemon_msg "Reseting VirtualBox $VM mashine"
$SU VBoxManage controlvm $VM reset
log_end_msg 0
;;
stop)
if [ $VMSTATUS != "saved" ]
then
log_daemon_msg "Saving state of VirtualBox $VM mashine"
$SU VBoxManage controlvm $VM savestate
log_end_msg 0
fi
;;
*)
echo "Usage: $0 {start|restart|stop}"
exit 1
;;
esac
:
Делаем файл исполняемым и добавляем его в автозагрузку командами:
root@server: chmod +x /etc/init.d/Windowz2003
root@server: update-rc.d Windowz2003 start 70 2 3 4 5 . stop 20 0 1 6 .
Скрипт можно запускать вручную из командной строки:root@server: update-rc.d Windowz2003 start 70 2 3 4 5 . stop 20 0 1 6 .
a) выводит состояние виртуальной машины и список параметров:
root@server: etc/init.d/Windowz2003
б) запускает текущую виртуальную машину, если она не запущена (если не со статусом "running":root@server: etc/init.d/Windowz2003 start
в) сохраняет состояние виртуальной машины, если она не со статусом "saved"
root@server: etc/init.d/Windowz2003 stop
г) рестарт виртуальной машины ( аналог нажатия кнопки reset)
root@server: etc/init.d/Windowz2003 restart
Для каждой гостевой машины необходимо сделать свой скрипт с уникальным именеем, запускающий и сохраняющий виртуальную машину при включении/выключении/перезагрузке физического сервера.
Внимание! Цель данной статьи - помочь начинающим пользователям Linux создать полигон для виртуальных машин в локальной сети. Если вы хотите выставить сервер в сеть интернет и управлять им - необходимо предпринять меры по защите сервера !!!
Комментариев нет:
Отправить комментарий