среда, 2 мая 2012 г.

Установка Ubuntu Server 10.04 или 12.04 + VirtualBox (virtualbox headless) + phpvirtualbox + автозапуск


      Сегодня будем устанавливать сервер виртуальных машин на базе ОС 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 и далее все действия производим через ssh
5) добавляем репозиторий в /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".

Установка 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.
----------------------------------------
В этом же файле находим строки:
/* 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)
Получилось:
/* SOAP URL of vboxwebsrv (not phpVirtualBox's URL) */
var $location = 'http://192.168.100.4:18083/';
----------------------------------------
Находим строки:
// Host / ip to use for console connections
#var $consoleHost = '192.168.1.40';
Меняем IP на IP нашего сервера:
// Host / ip to use for console connections
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
Сохраняем файл
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

В веб интерфейсе 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
:


В этом скрипте необходимо изменить  только значение переменной VM, в ней нужно указать название вашей виртуальной машины, которая отображается в веб интерфейсе phpvirtualbox.

Делаем файл исполняемым и добавляем его в автозагрузку командами:

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 .
Скрипт можно запускать вручную из командной строки:
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 создать полигон для виртуальных машин в локальной сети. Если вы хотите выставить сервер в сеть интернет и управлять им - необходимо предпринять меры по защите сервера !!!





Комментариев нет:

Отправить комментарий