Довольно часто возникает ситуация, когда для использования некоторых возможностей или программ необходимо установить на компьютер дополнительную операционную систему. Или, например, нужно проверить взаимодействие компонентов приложения, установленных на разные машины. Можно, конечно, установить непосредственно на компьютер две системы и переключаться между ними при необходимости. Или использовать физически два разных компьютера. Но это не всегда удобно и не всегда возможно.
Гораздо удобнее воспользоваться виртуальной машиной - изолированным программным контейнером, способным выполнять собственную операционную систему (гостевую) и приложения, как физический компьютер.
Для себя в качестве виртуальной машины я выбрал программный продукт VirtualBox, исходя из следующих его плюсов:- Это полностью бесплатная программа;
- Есть в наличии подробное руководство, описывающее работу с VirtualBox;
- Простота и удобство в использовании;
- Возможность установки русскоязычного интерфейса (не необходимость, но всё же приятно).
Установка
Для установки вместе с VirtualBox пакета расширений, в файл /etc/portage/package.use добавляем:
app-emulation/virtualbox extensions
Для размаскировки пакетов (в моем случае, для архитектуры x86) в файл /etc/portage/package.keywords добавляем:
app-emulation/virtualbox ~x86
app-emulation/virtualbox-extpack-oracle ~x86
app-emulation/virtualbox-additions ~x86
app-emulation/virtualbox-modules ~x86
И в файл /etc/portage/package.license:
app-emulation/virtualbox-extpack-oracle PUEL
app-emulation/virtualbox-additions PUEL
Выполняем:
# emerge -av app-emulation/virtualbox
Чтобы пользователь, от имени которого мы заходим в систему, мог запускать VirtualBox, добавим его в группу vboxusers:
# gpasswd -a username vboxusers
Теперь сделаем так, чтобы модуль ядра VirtualBox (vboxdrv) загружался при запуске системы. Для этого отредактируем файл /etc/conf.d/modules. Здесь можно указать, какие модули должны загружаться как для определенной версии ядра (modules_x="...", где x - номер версии ядра), так и для всех версий ядра (modules="..."). Укажем, что модуль vboxdrv должен загружаться для всех версий ядра:
modules="vboxdrv"
Перезагружаем Gentoo.Установка гостевой операционной системы и настройка
Запускаем VirtualBox. Чтобы переключить язык интерфейса, заходим в File->Preferences->Language и там выбираем язык:
Создаем новую виртуальную машину. Мне нужна была система Windows, поэтому я создавал и устанавливал Windows 7.
После создания виртуальной машины и установки на нее гостевой операционной системы, ставим дополнения гостевой ОС (Устройства->Установить дополненния гостевой ОС). Это нужно для расширения возможностей обмена данными между гостевой и хост системой, для правильной работы функции интеграции указателя мыши и клавиатуры, а также для возможности максимизации экрана гостевой ОС.
Завершаем работу в гостевой ОС, чтобы внести некоторые изменения в системные настройки.
Сначала настроим общую папку для обмена файлами между гостевой ОС и хост системой. В настройках на вкладке "Общие папки" добавляем папку:
После включения виртуальной машины с гостевой ОС, в сетевом окружении появится новый компьютер VBOXSVR с добавленной общей папкой.
Теперь разберемся с сетью. Мне нужно было, чтобы я мог обращаться к сервисам, запущенным внутри виртуальной машины на сервере apache. VirtualBox позволяет создать в гостевой системе виртуальную сетевую карту с подключением через NAT (реализуемый автоматически средствами VirtualBox) и пробросить произвольный порт гостевой системы на порт сервера VirtualBox. Таким образом, можно сделать так, чтобы при обращении к какому-либо порту на хост системе, запрос направлялся к виртуальной машине. Чтобы реализовать это, заходим в настройки на вкладку "Сеть", разворачиваем секцию "Дополнительно", заходим в "Проброс портов" и добавляем новое правило.
Указываем произвольное имя правила, "Порт хоста" - какой-нибудь свободный порт хост системы, при обращении к которому будет происходить перенаправление, "Порт гостя" - порт гостевой системы, на который будет происходить перенаправление. Можно еще указать "IP хоста" и "IP гостя", чтобы конкретизировать IP-адреса, но можно просто оставить эти значения пустыми. В моем случае я указал, что все запросы к хост системе по порту 8180 должны перенаправляться на 80 порт гостевой ОС, на котором находится apache.
Порт проброшен, теперь при обращению к нашему компьютеру на порт 8180, отвечать будет 80 порт виртуальной машины. Работает это только тогда, когда виртуальная машина запущена, иначе запрос будет попадать на порт хост системы и не будет перенаправлен.
Проверим правильность настройки. Допустим, виртуальная машина запущена, и на сервере apache внутри нее есть виртуальный хост "testing". На хост системе пропишем в /etc/hosts:
127.0.0.1 testing
В браузере заходим по адресу http://testing:8180. Если страница успешно открывается и отображает нужное содержимое, значит всё настроено правильно.