Введение
Vagrant является удобной утилитой для быстрого развертывания виртуальных машин (для разработки, тестирования и т. п.). В 1 версии в качестве системы виртуализации поддерживался только VirtualBox. Во второй версии появилась поддержка иных систем виртуализации (например, VMware, облачных провайдеров типа Amazon, Rackspace и т. п.). Более-менее полный список можно посмотреть на github'е.
Из приятных моментов стоит отметить, что есть большое количество готовых сборок виртуальных машин. Загрузка такой сборки -- довольно тривиальное занятие, описанное на сайте vagrantbox.es.
vagrant box add precise64 https://dl.dropbox.com/u/14292474/vagrantboxes/precise64-ruby-1.9.3-p194.box
mkdir test-box && cd test-box
vagrant init precise64
vagrant up
Кастомизация
В случае vagrant'а существует два совершенно различных подхода к кастомизации:
В некоторых ситуациях более удобен первый подход, в некоторых -- второй.
Оставляя за кадром SCM и provisioning с использованием chef
и puppet
, рассмотрим второй подход.
И подводные камни, встречающие нас на нём.
Пересборка box'а
В любой момент текущий образ виртуальной машины vagrant может упаковать в box-контейнер.
На самом деле это обыкновенный tar.gz
, в котором лежат Vagrantfile и необходимые системе виртуализации компоненты
(в случае VirtualBox -- диск в формате vmdk
, файл экспорта настроек виртуальной машины ovf
;
в случае LXC -- образ rootfs и конфиги LXC etc).
В текущий момент автоматизированная пересборка box'а возможна только для машин, использующий VirtualBox в качестве провайдера виртуализации.
После подготовки виртуальной машины (установка необходимого софта, конфигов, создание пользователей и т. п.) достаточно выполнить
vagrant package --output=<some-box-file-name.box>
vagrant box add <box-name> <some-box-file-name.box>
По окончанию операции будет импортирована полученная сборка.
Теперь на её основе можно создавать новые виртуальные машины командой vagrant init <box-name>
.
Подводные камни
Без них бы не появилась статья. Vagrant активно использует VirtualBox Guest Additions. Для проброса портов, монтирования общих директорий между хостом и гостевой машиной.
А guest additions требуют пересборки в случае обновления ядра. При этом, необходимо загрузить виртуальную машину с новым ядром, после чего выполнить команду
/etc/init.d/vboxadd setup
В общем случае она может сообщить о невозможности собрать часть компонентов (например, интеграция Xorg/X11, если они не установлены). После чего надо перезагрузиться и проверить, что VirtualBox Guest Additions, представленные модулями ядра и демонами запущены.
Убедившись, что всё работает можно-таки паковать новый box.
P. S. Описание этой проблемы можно найти в документации к 1 версии (в разделе troubleshooting). В актуальной версии vagrant 2 оно не находится.
P. P. S. Статья в оригинал публиковалась на хабре, но сейчас в черновиках.