Pull to refresh

Быстрое создание базовых образов vagrant с помощью veewee

Reading time4 min
Views19K
Многие уже, наверное, слышали про утилиту для автоматизации создания виртуальных машин vagrant.

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

vagrant box add lucid32 http://files.vagrantup.com/lucid32.box
vagrant init lucid32
vagrant up


При этом vagrant скачает box с сайта и создаст на его основе виртуальную машину. Box это tar архив с виртуальной машиной и дополнительной конфигурацией. Также, на сайте www.vagrantbox.es есть куча предустановленных box'ов.

Но могут возникнуть ситуации, когда понадобится создать свой box, и создавать виртуалки на его основе. На сайте vagrant описан процесс создания box'а. В этой статье я хотел бы показать, как можно автоматизировать эту часть, с помощью утилиты veewee.


Сразу оговорюсь, что с ruby я не знаком, поэтому если вы считаете, что есть более простой способ настройки ruby окружения, буду рад конструктивным предложениям в комментариях.

Для примера в качестве рабочей ОС возьмем Ubuntu 12.04, а для виртуальной среды выберем CentOS 6.
Настройки для vagrant будем хранить в директории vagrant, veewee соответственно в директории veewee.

Первая проблема, с которой я столкнулся: veewee отказался работать с версией ruby, которая была установлена из репозитория Ubuntu.
Пришлось удалить ruby-rvm из ОС, и установить более свежую версию, более подробно тут, на английском:

sudo apt-get --purge remove ruby-rvm
sudo rm -rf /usr/share/ruby-rvm /etc/rvmrc /etc/profile.d/rvm.sh
curl -L https://get.rvm.io | bash -s stable --ruby --autolibs=enable --auto-dotfiles


Далее устанавливаем ruby, и несколько зависимостей:

source ~/.rvm/scripts/rvm
sudo apt-get install libxslt-dev libxml2-dev
rvm install ruby-1.9.2-p320


При установке ruby, rvm пытался скачать дистрибутив по адресу: ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p320.tar.bz2 и получал 404 в ответ. Если у вас та же проблема, откройте файл ~/.rvm/config/db, найдите строку ruby_1.9_url и замените http:// на ftp://, после попробуйте установить ruby снова.

Теперь переходим непосредственно к созданию box'а. Создаем необходимые директории:

mkdir {vagrant,veewee}


Скачиваем текущую версию veewee:

cd veewee
git clone https://github.com/jedi4ever/veewee .
bundle install


veewee содержит шаблоны для большинства популярных версий ОС, включая Windows:

bundle exec veewee vbox templates | grep -i centos-6.4


Создаем файл настройки ОС на основе выбранного шаблона. Назовем нашу ОС 'centos6-x86_64-minimal'. Соответственно, шаблон veewee для CentOS 6 указываем 'CentOS-6.4-x86_64-minimal':

bundle exec veewee vbox define 'centos6-x86_64-minimal' 'CentOS-6.4-x86_64-minimal'


В файле 'definitions/centos6-x86_64-minimal/definition.rb' можно указать различные настройки для виртуальной машины, например, объем памяти, размер диска и т.п.

Создаем виртуальную машину для Virtual Box:

bundle exec veewee vbox build 'centos6-x86_64-minimal' --workdir=.


Если у вас есть заранее скачанный дистрибутив CentOS-6.4-x86_64-minimal.iso, можете скопировать его в директорию iso в текущей директории. Также, можно скопировать VBoxGuestAdditions.iso для вашей версии VirtualBox. Если veewee не найдет iso образ устанавливаемой OC, утилита предложит его скачать во время создания виртуальной машины.

Veewee создаст виртуальную машину, которая также будет доступна через Virtual Box GUI. При желании, можно установить необходимый софт, настроить ОС, и прочее, прежде чем создавать vagrant box на ее основе. Это можно сделать вручную, либо автоматизировать. Veewee поддерживает пост установочные скрипты — это набор команд, которые будут выполнены в виртуальной машине сразу после ее установки.

Также, veewee создаст перенаправление порта 22 в виртуальной машине на порт 7222 в основной ОС.

Теперь можно создать vagrant box:
bundle exec bundle exec veewee vbox export 'centos6-x86_64-minimal'


Файл 'centos6-x86_64-minimal.box' будет создан в текущей директории.

Добавляем новый box в vagrant:
vagrant box add 'centos6-x86_64-minimal' centos6-x86_64-minimal.box


Можем удалить 'centos6-x86_64-minimal.box' из текущей директории.

Теперь мы можем создавать виртуальные машины на основе только что созданного box'а:
cd ../vagrant
mkdir centos6-x86_64-minimal
cd centos6-x86_64-minimal
vagrant init 'centos6-x86_64-minimal'
vagrant up
vagrant ssh


Если нужно изменить настройки box'a, нет ничего проще чем удалить текущий box, настроить виртуальную машину и пересобрать box с помощью veewee.

Пример Vagrantfile для виртуальной ОС.

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define :vm1 do |vm1config|
    vm1config.vm.box = "centos6-x86_64-minimal"
    vm1config.vm.network :private_network, ip: "192.168.11.10"
    vm1config.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", "1024"]
    end
  end
end


Я преднамеренно указал vm1 в конфиге. Таким образом можно с одного и того же box'а запускать несколько виртуальных машин с разными параметрами. Это называется multivm и описано тут.

Спасибо за внимание.
Tags:
Hubs:
+5
Comments4

Articles

Change theme settings