- PVSM.RU - https://www.pvsm.ru -

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

Введение

Vagrant [1] является удобной утилитой для быстрого развертывания виртуальных машин (для разработки, тестирования и т. п.).
В 1 версии в качестве системы виртуализации поддерживался только VirtualBox [2].
Во второй версии появилась поддержка иных систем виртуализации (например, VMware [3], облачных провайдеров типа Amazon [4],
Rackspace [5] и т. п.). Более-менее полный список можно посмотреть на github'е [6].

Из приятных моментов стоит отметить, что есть большое количество готовых сборок виртуальных машин.
Загрузка такой сборки — довольно тривиальное занятие, описанное на сайте vagrantbox.es [7].

пример

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 [8] или chef [9])
  • сборка нового образа системы

В некоторых ситуациях более удобен первый подход, в некоторых — второй.
Оставляя за кадром 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 [10]).
В актуальной версии vagrant 2 оно не находится.

Автор: grossws

Источник [11]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/razrabotka/44328

Ссылки в тексте:

[1] Vagrant: http://www.vagrantup.com/

[2] VirtualBox: https://www.virtualbox.org/

[3] VMware: http://www.vmware.com/

[4] Amazon: http://aws.amazon.com/ec2/

[5] Rackspace: http://www.rackspace.com/

[6] github'е: https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins#providers

[7] vagrantbox.es: http://www.vagrantbox.es/

[8] puppet: http://puppetlabs.com/

[9] chef: http://www.opscode.com/chef/

[10] troubleshooting: http://docs-v1.vagrantup.com/v1/docs/troubleshooting.html

[11] Источник: http://habrahabr.ru/post/195292/