Vagrant Virtual Environment

Необходимо было быстренько и непринужденно установить несколько виртуальных машин на основе CentOS, Debian, Ubuntu можно конечно же воспользоваться OpenVZ, а можно изучить новый инструмент для создания и распространения виртуальных окружений Vagrant

Vagrant — это надстройка над платформой виртуализации VirtualBox, которая позволяет легко и быстро создавать виртуальные машины по шаблону.

Сервер на котором будем устанавливать Vagrant

# uname -a
Linux centos.bezha.od.ua 2.6.32-220.4.2.el6.x86_64 GNU/Linux

Установим VirtualBox

# cd /etc/yum.repos.d
# wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo

Установим Epel и DAG

# rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
# rpm -ivh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

Установим DKMS (Dynamic Kernel Module Support)

yum --enablerepo rpmforge install dkms

Так как для установки VirtualBox необходимы искодные коды ядра то установим

# yum groupinstall "Development Tools"
# yum install kernel-devel openssl-devel zlib-devel

Устанавливаем VirtualBox 4.1

# yum install VirtualBox-4.1
Stopping VirtualBox kernel modules [  OK  ]
Uninstalling old VirtualBox DKMS kernel modules [  OK  ]
Trying to register the VirtualBox kernel modules using DKMS [  OK  ]
Starting VirtualBox kernel modules [  OK  ]

Installed:
  VirtualBox-4.1.x86_64 0:4.1.8_75467_rhel6-1
Complete!

Установим rubygems используя RVM

# bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
# source /etc/profile.d/rvm.sh
# rvm alias create default 1.9.2

Устанавливаем Vagrant используя gem

# gem install vagrant

Устанавливаем Vagrant используя rpm. Cкачиваем необходимый rpm downloads.vagrantup.com

# rpm -Uvh vagrant_0.9.99.2_x86_64.rpm

Устанавливаем свое первое Vagrant Virtual Environment

# mkdir /vagrant
# wget http://yum.mnxsolutions.com/vagrant/centos_56_32.box
# vagrant box add centOS_x32_5.6 centos_56_32.box
# vagrant init

Если заранее не были установлены zlib-devel и openssl-devel то произойдет следующая ошибка

ERROR:  Loading command: install (LoadError)
    no such file to load -- zlib
ERROR:  While executing gem ... (NameError)
    uninitialized constant Gem::Commands::InstallCommand

Исправляем ее

# cd /usr/local/rvm/src/ruby-1.9.2-p290/ext/zlib
# ruby extconf.rb && make && make install
# /usr/local/rvm/src/ruby-1.9.2-p290/ext/zlib
# ruby extconf.rb && make && make install

Запускаем виртуальную машину и заходим в нее

# vagrant up
# vagrant ssh

Конфигурационный файл Vagrant сформированный после vagrant init

# grep -v -E "#|^$" Vagrantfile 
Vagrant::Config.run do |config|
  config.vm.box = "base"
end

Пропишем на нашу машину ip адрес и изменим имя

# grep -v -E "#|^$" Vagrantfile 
Vagrant::Config.run do |config|
  config.vm.box = "centOS_x32_5.6"
  config.vm.network :bridged
end

После того как зайдем на виртуальную машину чтобы стать root выполним

# sudo su -

Посмотрим IP адреса

# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:D8:E9:7A  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fed8:e97a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1660 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1301 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:125182 (122.2 KiB)  TX bytes:144322 (140.9 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:9E:64:A7  
          inet addr:192.168.1.8  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe9e:64a7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:35 errors:0 dropped:0 overruns:0 frame:0
          TX packets:35 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4491 (4.3 KiB)  TX bytes:3612 (3.5 KiB)

Поменяем пароль для root и можем заходить удаленно

# passwd

Состояние виртуальной машины можно посмотреть

# vagrant status
Current VM states:

default                  running

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

Остановить виртуальную машину

# vagrant halt

Удалить виртуальную машину

# vagrant destroy

Образы виртуальных машин можно брать на www.vagrantbox.es

Запустим одновренном несколько виртуальных машин Multi-VM Environments

# vagrant box add db centos-6.0-x86_64.box

Приводим конфигурационный файл к следующему виду

# grep -v -E "#|^$" Vagrantfile 
Vagrant::Config.run do |config|
  config.vm.define :web do |web_config|
    web_config.vm.box = "centOS_x32_5.6"
    web_config.vm.network :bridged
  end
  config.vm.define :db do |db_config|
    db_config.vm.box = "centOS_x64_6.0"
    db_config.vm.network :bridged
  end
end

Запускаем виртуальные машины и проверяем их статус

# vagrant up
# vagrant status
Current VM states:

web                      running
db                       running

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`

Заходить на виртуальну машину

# vagrant ssh web
# vagrant ssh db

В результате всех этих манипуляций имеем для тестирования две виртуальные машины.
В будущем будем использовать Vagrant для тестирования рецептов Chef.