Необходимо было быстренько и непринужденно установить несколько виртуальных машин на основе 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
Запустим одновренном несколько виртуальных машин 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.