Очень часто в разработке возникает необходимость поднять локальное окружение для отладки каких-либо рабочих моментов. В своей работе я постоянно пользуюсь Vagrant для тестирования инфраструктурного кода, например ansible-ролей. Vagrant остаётся одной из самых популярных утилит для подобных задач, имеет гибкий синтаксис и поддержку базовых алгоритмических структур – можно поднимать N и K машин в цикле, используя заранее вводимые переменные, а потом еще и ansible-inventory генерировать на выходе, разбивая машины по группам. Долгое время я оставался пользователем MacBook на процессоре Intel, но больше так продолжаться не могло – пришлось сменить компьютер, хотя я и знал о некоторых особенностях работы М1 с виртуальными машинами. В этой статье я расскажу, как настроить и запустить Vagrant на процессорах Apple M1/M2 и вернуться в привычный рабочий режим. Rosetta 2: позволяет компьютерам Mac с процессорами Apple использовать приложения, созданные для компьютеров Mac с процессорами Intel. Vagrant (2.3.0+): программное обеспечение для создания и конфигурирования виртуальной среды разработки. Является обёрткой для программного обеспечения виртуализации, например VirtualBox, и средств управления конфигурациями, таких как Chef, Salt и Puppet. Vagrant-vmware-desktop (3.0.1+): Плагин, который позволяет вагранту контролировать VMware-based машины, обеспечивая более высокую стабильность и производительность, чем ПО от VMware. Vagrant vmware utility (1.0.21+): Сервис предоставляющий vagrant-vmware-desktop e доступ к различным функциям VMware. Так же используется для выполнения операций, требующих привилегированного доступа на хосте, сетевых операций и верификации машин. Гипервизор (VMware Fusion Public Tech Preview 22H2): Гипервизор виртуальных машин Первым делом, нужно установить Rosetta 2, для этого выполним следующую команду: Далее, необходимо установить сам Vagrant. Это можно сделать скачав его с официального сайта https://www.vagrantup.com/downloads – выбрав MacOS и установив dmg, либо через brew, выполнив команду: Проверить, что Vagrant работает можно также из консоли: Тут начинаются первые приколы, но обо всём по порядку. Просто так взять и скачать с сайта VMWare – мы не можем. Но можем посмотреть актуальную версию. Переходим на сайт https://customerconnect.vmware.com/downloads/get-download?downloadGroup=FUS-PUBTP-22H2, там находим и записываем цифры: После этого, можем скачать данный файл по ссылке, заменив версию на актуальную. Например, можно использовать команду: В качестве альтернативы, можно поставить через brew: Но это еще не всё. Дело в том, что "Tech preview" устанавливается по собственному пути (/Applications/VMWare Fusion Tech Preview.app), а провайдеры вагранта будут искать VMWare по стандартному (/Applications/VMWare Fusion.app). Чтобы исправить это недоразумение, воспользуемся командой: Страница, посвященная данной утилите: https://developer.hashicorp.com/vagrant/docs/providers/vmware/vagrant-vmware-utility, но можно просто перейти по следующей ссылке, скачать и установить последнюю версию https://developer.hashicorp.com/vagrant/downloads/vmware. В качестве альтернативы, можно снова воспользоваться brew: После установки рекомендую проверить работоспособность утилиты, кстати, таким же образом её можно дебажить чтобы понять, что не работает (я так и узнал про несоответствие путей установки): В выводе может получиться ошибка, что порт 9922 уже занят. Такое случается, если утилита уже включилась и работает. Её можно выключить и подебажить. Проверить заняты ли порты: Выгрузить утилиту: Загрузить утилиту обратно: Также, проверить работоспособность утилиты можно командой: Для установки плагина просто выполняем команду: На этом инсталляция завершена, пора попробовать запустить виртуальную машину. Далее, самое сложное :) В целом, всё вышеперечисленное может пройти без ошибок, но машина всё равно не запустится. Я перепробовал множество вариантов, комбинаций и настроек vagrantfile и предоставлю вам решение, которое заработало у меня и моих студентов. Мне удалось выявить три главных проблемных места при запуске виртуальной машины: Бокс (образ виртуальной машины) для процессоров ARMГотовые образы отличаются провайдерами, под которые они заточены, процессорами, и содержимым. Есть популярные образы, которые у меня не заработали, есть образы с 100 загрузок, которые показали себя успешно.Я остановился на следующих: spox/ubuntu-arm и bytesguy/ubuntu-server-20.04-arm64 GUIПо причинам, которые я пока не смог выяснить (подскажите в комментариях!) – виртуальная машина не стартует, если GUI выключен (а он выключен по-умолчанию). В виду этой особенности, приходится добавлять параметр vmware.gui = true в конфигурации Vagrantfile СетьКогда ваша машина уже практически работает, вагрант может предательски замереть на шаге ==> default: Waiting for the VM to receive an address... Решение было найдено – указать vmware.vmx["ethernet0.virtualdev"] = "vmxnet3" в конфигурации Vagrantfile Создаем директорию для конфигурации нашей будущей машины и Vagrantfile в ней. Итоговый Vagrantfile получается следующим: Выполняем запуск машины обычной командой vagrant up: Подключаемся к свежесозданной машине через vagrant ssh: На этом всё, надеюсь моё руководство помогло вам сэкономить нервы и время. Желаю вам приятного пользования ноутбуком и до новых встреч :) Ну а если вы увлекаетесь DevOps и системным администрированием – жду вас у себя в ламповом сообществе в телеграмм: https://t.me/deusops https://www.vagrantup.com/intro https://github.com/hashicorp/vagrant-vmware-desktop https://www.vagrantup.com/docs/providers/vmware/installation https://gist.github.com/sbailliez/f22db6434ac84eccb6d3c8833c85ad92 https://github.com/hashicorp/vagrant/issues/12195 https://github.com/hashicorp/vagrant/issues/12050 https://www.youtube.com/watch?v=UZXFMCfXqh8 https://www.vagrantup.com/docs/providers/vmware/configuration  DevOps, Преподаватель