Vagrant+VirtualBox в MacOS Catalina: Но Оно Работает на Моей Машине!

Что такое Vagrant?

Впервые запущенная в марте 2010 года Митчеллом Хасимото от Hashicorp и его напарником Джон Бендер, Vagrant является командной строкой с открытым исходным кодом для управления жизненным циклом виртуальных машин (ВМ). Данная утилита нацелена на повышение производительности разработки, упрощая этот процесс. Хотя изначально Vagrant был связан с Oracle VirtualBox, начиная с версии 1.1, он также поддерживает VMware, KVM и другие. Однако, как бы полезно виртуализация не было в веб-разработке, использование Vagrant не всегда является надежным вариантом.

Зачем использовать Vagrant? Стоит ли это?

Прежде всего, Vagrant обеспечивает значительно большую гибкость с гипервизорным неизменяемым окружением. Это позволяет разработчикам создавать среды, требующие функций, доступных только на других системах.

Например, если вам нужно было создать приложение, которое поддерживает различные операционные системы и ядра, вы могли бы легко создать несколько виртуальных машин, которые могли бы запускать тесты, используя Vagrant. Точно так же, если вы хотели воспроизвести среду вашего клиента (ОС, ресурсы и т. д.), комбинирование ВМ и Vagrant также может быть особенно полезным.

Установка Vagrant на рабочую станцию

Чтобы начать работу с Vagrant, загрузите установщик или подходящий пакет с официальной страницы загрузок Vagrant. Ниже приведены инструкции для Vagrant версии 2.3.3 (самая последняя на декабрь 2022 года).

Установка Vagrant на Windows

Для установки Vagrant на Windows сначала необходимо загрузить пакет MSI. Затем просто запустите файл и пройдите через обычный процесс установки.

Примечание: Установщик автоматически добавит «vagrant» в системный путь, поэтому он также будет доступен в терминалах. Если Vagrant не обнаружен, однако, попробуйте выйти из системы и снова войти, так как это распространенная ситуация на Windows.

Установка Vagrant на MacOS Catalina

Предполагая, что у вас уже установлен менеджер пакетов «brew», для быстрой настройки Vagrant на Mac, вы можете запустить установку с помощью этой однострочной команды:

 

```bash
$> brew install vagrant
```

В качестве альтернативы, вы можете установить Vagrant из двоичных файлов.

Установка Vagrant на Linux

Для систем Linux мы продемонстрируем процесс установки Vagrant на Ubuntu 20.04:

Установите ключ:

 

```bash
$> wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
```

Добавьте репозиторий:

 

```bash
$> echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
```

Получите обновления и запустите установку:

 

```bash
$> sudo apt update && sudo apt install vagrant
```

Вот и все! Теперь все, что вам нужно сделать, это открыть терминал и ввести “vagrant”. Стоит отметить, однако, что если вы запустите Vagrant самостоятельно, вам будет предоставлен список доступных подкоманд.

Основные проблемы, с которыми вы можете столкнуться при установке Vagrant

Хотя ошибки установки Vagrantдовольно редки, вероятность их возникновения значительно возрастает, если на вашем компьютере установлено несколько гипервизоров. В конце концов, гипервизоры не склонны разрешать создание виртуальных машин, когда более одного из них уже используется.

Ниже приведены несколько быстрых решений, взятых из официальной документации Vagrant, которые могут помочь вам использовать Vagrant и VirtualBox, когда присутствует другой гипервизор:

На Linux

При использовании другого гипервизора вы можете столкнуться с ошибкой ниже:

 

```bash
There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", <ID of the VM>, "--type", "headless"]

Stderr: VBoxManage: error: VT-x is being used by another hypervisor (VERR_VMX_IN_VMX_ROOT_MODE).
VBoxManage: error: VirtualBox can't operate in VMX root mode. Please disable the KVM kernel extension, recompile your kernel and reboot
(VERR_VMX_IN_VMX_ROOT_MODE)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole
```

Чтобы заставить VirtualBox работать правильно, любые дополнительные гипервизоры должны быть добавлены в черный список вашей системы.

Для этого сначала выясните, как называется гипервизор:

 

```bash
$> lsmod | grep kvm
kvm_intel             204800  6
kvm                   593920  1 kvm_intel
irqbypass              16384  1 kvm
```

Затем просто используйте команду “blacklist”, чтобы добавить гипервизор в ваш черный список.

 

```bash
echo 'blacklist kvm-intel' >> /etc/modprobe.d/blacklist.conf
```

Наконец, перезагрузите свою машину и снова используйте команду “vagrant”.

На Windows

На Windows, если вы пытаетесь запустить виртуальную машину VirtualBox, вы можете столкнуться с резким синим экраном.

Для нормальной работы VirtualBox необходимо убедиться, что Hyper-V отключен. Используйте следующую простую команду для отключения функции на Windows 10:

 

```PowerShell
$> Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
```

На Windows 11 вы также можете использовать поднятую Powershell:

 

```PowerShell
$> bcdedit /set hypervisorlaunchtype off
```

В качестве альтернативы, вы можете отключить Hyper-V через настройки системы Windows.

  • Щелкните правой кнопкой мыши на кнопке Windows и выберите “Приложения и функции”
  • Откройте “Включить или выключить функции Windows”
  • Снимите флажок “Hyper-V” и, наконец, нажмите “ОК”

Перезагрузите свое устройство для применения этих изменений.

На MacOS

Если вы сталкиваетесь с следующим сообщением об ошибке при попытке выполнить VBoxManage:

не удалось открыть /dev/vboxnetctl: Файл или каталог не найден

Либо полностью переустановите VirtualBox, либо просто используйте команды ниже:

 
sudo /Library/StartupItems/VirtualBox/VirtualBox restart

или

 
sudo /Library/StartupItems/VirtualBox/VirtualBox start

Обратите внимание, что в более новых версиях файл /Library/StartupItems/VirtualBox/VirtualBox не существует, поэтому вам придется использовать следующую команду:

 
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.pl

MacOS Catalina: Но Оно Работает на Моем Машине

Еще одна проблема, которая может возникнуть на Mac, это классическая проблема, когда вы слышите, что приложение “хорошо работает на моем компьютере”, и никакая мольба или слёзы не заставят его делать то же самое где-либо еще. Моя команда из SPG также сталкивалась с этой проблемой раньше.

Представьте, что вы сейчас развертываете и тестируете локальные среды с помощью Vagrant + VirtualBox. Один из разработчиков в вашей команде использует настраиваемую версию VagrantBox, которая пока что хорошо им работает. Они будут известны как Developer 1. На их рабочей станции VirtualBox v6.1.34, Vagrant 2.2 и Ubuntu работают без проблем.

С другой стороны, очевидно, что Developer 2 должен обновить свою локальную среду. В настоящее время они используют смесь MacOS, VirtualBox v6.1.24 и Vagrant 2.1.x на своей рабочей станции.

В результате, по крайней мере на первый взгляд, стратегия Developer 2 кажется простой:  

  • Шаг 1: Обновите версии VirtualBox и Vagrant (важно использовать унифицированные версии)  
  • Шаг 2: Установите все дополнительные компоненты проекта

Оба действия выполнены успешно, но результат неожиданный — по какой-то причине веб-сайт, установленный в VirtualBox, теперь полностью недоступен. Что за черт!?

Когда сталкиваешься с такой загадкой, важно продумать решение и предпринять разумные действия, такие как:  

  • Просмотр лог-файлов  
  • Проверка, что все службы VirtualBox, такие как PHP, Nginx и MySQL, работают  
  • Использование curl для доступа к странице

В данном случае, однако, все кажется работающим должным образом, без явных проблем внутри экземпляра VirtualBox.

Ваша команда решает изменить подход и определить, доступен ли хост VirtualBox извне. После использования простой команды ping, они не ожидали обнаружить, что 100% пакетов теряются. Хотя эта новость немного обескураживает, это может быть причиной всей ситуации.

Следуя этому пути, они в итоге выясняют, что адаптеры HostOnly теперь должны получать другой диапазон IP-адресов. Это, видимо, началось с обновления VirtualBox v6.1.30 (патч-обновление, во всех отношениях):

 

192.168.55.х prior to the update

192.168.56.х. after the update.

Вот оно, ясно как день, в недавно пересмотренном руководстве пользователя VirtualBox user manual

На Linux, Mac OS X и Solaris, Oracle VM VirtualBox будет разрешать назначение IP-адресов только в диапазоне 192.168.56.0/21 адаптерам host-only.”

Все в вашей команде вздыхают с облегчением. Проблема внезапно исчезает после создания нового адаптера HostOnly и изменения существующего в экземпляре VirtualBox. Критический веб-компонент решения наконец-то доступен, и Developer 2 наконец доволен.

Vagrant Or…? Какие есть альтернативы? Чем они лучше?

С таким азартом вы могли бы быть прощены за поиск альтернатив Vagrant. Если бы вы это сделали, однако, вы, вероятно, столкнулись бы с рядом веб-сайтов, сравнивающих эту утилиту с контейнерами (чаще всего с Docker). Но действительно ли это корректное сравнение? Как оказалось, это так, если вы понимаете разницу между ними.

Многие преимущества Docker над гипервизорами также могут рассматриваться как недостатки — все зависит от того, для чего они вам нужны. Итак, начнем с главной: время загрузки. В то время как контейнеры могут запускаться быстро, потому что они, по сути, представляют собой набор процессов, это также означает, что они используют ядро хоста. В результате, вместо того чтобы полагаться на виртуализированное оборудование, контейнеры будут использовать оборудование хоста напрямую.

Гипервизоры также могут иметь выделенные ресурсы в виде памяти, времени ЦП, места на диске и других. С другой стороны, контейнеры делят ресурсы с другими процессами на компьютере-хосте. Точно так же, хотя Vagrant позволяет создать целую виртуальную машину — что потребует больше времени и ресурсов — подход Docker с контейнеризацией позволяет развертываться быстрее с меньшими ресурсами.

Итак, помня об этом, просто помните, что это не соревнование. Это просто вопрос потребностей вашей компании.

Заключение

В то время как Vagrant, несомненно, является внушительным инструментом, он также не лишен проблем. Если в вашей компании не хватает опыта или знаний, специальная команда разработчиков программного обеспечения может оказать помощь. Ведь даже когда “это работает только на моем компьютере”, для каждой проблемы существует решение.

Source:
https://dzone.com/articles/vagrantvirtualbox-on-macos-catalina-but-it-works-o