...

четверг, 26 сентября 2013 г.

Кастомизация виртуальных машин в Vagrant

Введение


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-систем (puppet или chef)

  • сборка нового образа системы


В некоторых ситуациях более удобен первый подход, в некоторых — второй.

Оставляя за кадром 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 оно не находится.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий