Как правило, я работаю с ноутбука под Windows. Но иногда нужно иметь локальную рабочую копию Linux сервера, например, для разработки. Конкретно в этом частном случае важно, чтобы окружение максимально соответствовало окружению на тестовых и боевых серверах. Поэтому я сразу отмёл cygwin, и обратил внимание на виртуализацию. Лично мне, приглянулся VirtualBox от Oracle. Они мне за рекламу не заплатили, но я всё равно о них напишу, так как инструмент оказался очень удобным и бесплатным. Пользуюсь с 2012 года.

Итак, в этой статье я опишу, как установить linux на windows без KDE/GNOME графической оболочки (за ненадобностью). При этом мне лично удобно ходить на него через привычный PuTTY - точно также, как я хожу на продакшн боевые и тестовые сервера. И кроме этого, я хочу пользоваться для работы с приложениями в виртуалке своими привычными клиентами, установленными на Windows: SFTP-клиент, веб-броузер, и т.д. Чаще всего я ставлю Debian, поэтому описывать установку буду именно этого Linux дистрибутива. Однако вам никто не мешает поставить любой другой дистрибутив. Один раз VirtualBox мне помог с установкой старой программы, которая отказалась работать под Windows7, но без проблем завелась на WindowsXP в виртуалке.

Поехали.

Скачиваем VirtualBox на сайте Oracle, устанавливаем. В процессе нет ничего особенного, кроме установки виртуальных сетевых адаптеров - обязательно соглашаемся на просьбу Windows подтвердить их установку.

Скачиваем дистрибутив Debian Linux в формате ISO. Я обычно использую зеркало Yandex для этого. Выбираем папку с версией дистрибутива, далее выбираем архитектуру i386 - это важно, т.к. при создании хоста я выбрал Debian 32bit. Далее выбирайте по вашему вкусу. Лично мне не хочется скачивать большой дистрибутив - я выбираю сетевой установщик (netinstall), благо интернет всегда под рукой.

Пока дистрибутив скачивается, запускаем VirtualBox и создаём новый Host (см. скриншот), далее солашаемся на предложеный объём памяти (1 гигабайт) и объём жесткого диска (8 гигабайт). Естественно, никто не мешает подкрутить объёмы так, как вам нужно. Формат файла жесткого диска я оставляю по-умолчанию - VDI. Выбор между динамическим и фиксированным виртуальным жестким диском расписан в диалоговом окне предельно ясно: если скорость его работы важна, то создаём фиксированный. Если важно по максимуму сэкономить место на жестком диске Windows, то - динамический. Кстати, динамический, в отличие от фиксированного, по вполне понятным причинам, создаётся моментально.

Дистрибутив скачался, хост мы создали. Приступаем к настройке. Первое, что нужно сделать - это скормить виртуалке дистрибутив, чтобы при запуске сразу же запустилась установка Linux. Для этого выбираем хост в списке и жмём "Настроить". Далее, идём в раздел "Носители", выбираем там оптический привод в контроллере IDE, и загружаем туда образ свежескаченного дистрибутива (см. скриншот).

Затем, нас интересует раздел "Сеть". Дело в том, что по-умолчанию, хост имеет лишь один виртуальный сетевой интерфейс, который "смотрит" в доступный на Windows по-умолчанию Интернет через виртуальный NAT. По этой причине, открыть консоль Linux я смогу только через окно VirtualBox, а мне хочется пользоваться привычным для меня PuTTY. По этой же причине, закачать и скачать файлы я смогу только через настройку общих папок, что для меня также непривычно и неудобно - я хочу пользоваться обычным SFTP-клиентом под Windows. Ну и самое главное - при разработке web-приложений, я хочу пользоваться привычным и уже настроеным веб-броузером под Windows. Через NAT, все эти удобства не проходят. Поэтому я создаю ещё один локальный сетевой интерфейс для виртуалки, вручную даю ему нужный мне IP адрес и делаю симметричную настройку виртуального интерфейса на Windows. В результате, Linux ходит в Интернет через NAT, а я на него с Windows хожу напрямую через "Виртуальный адаптер хоста".

Если решение проблем с прямым доступом на виртуалку по сети для вас пока непонятно, то я предлагаю посмотреть схему, которую я нарисовал. Однако, вы можете и не вникать во все эти тонкости - просто пропустите этот абзац со схемой, и переходите к пошаговой настройке. На схеме видно, что между Windows хостом и VirtualBox Linux появляется ещё одна локальная сеть, состоящая всего из двух IP-адресов. При этом, Linux и Windows продолжают ходить в Интернет независимо друг от друга. Однако, как Linux может получить доступ к любым сетевым службам Windows, так и Windows спокойно может ходить на любые TCP/IP сервисы Linux. Меня, в частности, интересует как раз второе - возможность с Windows напрямую подключаться по SSH с помощью PuTTY, тестировать веб-приложения с броузера, и т.д.

Теперь, по шагам. Идём в настройки в секцию "Сеть". Включаем там второй адаптер, выбираем тип "Виртуальный адаптер хоста", и указываем отличный от первого тип адаптера, чтобы не путать их внутри Linux. Это не особо важно, так как я ещё ни разу не видел, чтобы Linux мог их выводить не в том порядке, в каком они перечислены в настройках. Но для пущей уверенности не помешает. Жмём ОК и запускаем виртуальную машину кнопкой "Запустить". Начнётся обычная установка Linux, ничего особенного в ней нет. Когда установщик увидит два сетевых интерфейса и попросит выбрать основной, выбираем тот, на котором NAT - он у нас первый в списке.

Пока Linux устанавливается, я настраиваю сетевой интерфейс на Windows. У меня Windows7, поэтому я иду в Панель управления — Центр управления сетями и общим доступом — Изменение параметров адаптера — Выбираю адаптер "VirtualBox Host-Only Network" и присваиваю ему IP адрес 192.168.56.1/24. Вы, естественно, можете выбрать любую другую приватную сеть, отличную от 10.0.2.0/24, которая используется VirtualBox для NAT интерфейса. Для справки, всего есть три сети, которые зарезервированы для подобного использования: 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16. Другие адреса использовать не надо, т.к. скорее всего они в Интернете есть, и значит мы потеряем доступ к этим ресурсам.

Итак, Linux поставился. Осталось только настроить второй сетевой интерфейс на нём, и можно начинать работать. Настройка сети на Debian делается правкой файлов в /etc/network/interfaces.d/. Я лично создаю там файл eth1 с таким содержанием:

auto eth1
iface eth1 inet static
    address 192.168.56.2
    netmask 255.255.255.0
И отправляю виртуалку в reboot. После перезагрузки пробуем командной строки Windows сделать ping 192.168.56.2 - всё должно работать. Теперь я могу использовать этот IP адрес в броузере, PuTTY, моём SFTP клиенте и любых других программах для работы с Linux сервисами.

Если в дальнейшем вам понадобится поднимать ещё один Linux VBox на этом же Windows, то настройка почти не отличается. Второй и последующий Linux VBox должны иметь на втором интерфейсе IP-адреса из этой же сети (192.168.56.3, .56.4 и т.д.), а на Windows донастраивать сеть уже не надо - всё будет работать.