Создание базовых сборок

Несмотря на то, что сообщество уже позаботилось о наиболее распространенных образах операционных систем, тебе вполне может понадобиться иметь свою особенную сборку. Из соображений безопасности (а вдруг хакер Вася добавил свою магию в одну из сборок, лежащих в Сети), необходимости каких-то особенных настроек или просто из интереса - неважно, главное, что такая возможность есть. И здесь нам поможет гем veewee (https:// github.com/jediuever/veewee), созданный специально для этих целей.
Для начала установим его:
$ gem install veewee
Репозиторий veewee содержит большое количество шаблонов: https://gi thub.com/jedi4ever/veewee/tree/ma5ter/template5. Выберем интересующий нас - пусть это будет последняя версия Ubuntu Server. Теперь создадим новую базовую сборку на основе этого шаблона:
$ veewee vbox define myubuntubox - "ubuntu - 12.10 - server - i386"
В результате у нас появится новое «определение» бейс - бокса. В папке definitrons/myubuntubox содержатся файлы, описывающие нашу виртуальную машину:
•definition.rb;
•postinstall.sh;
•preseed.cfg.
Немного поправим конфигурацию виртуалки:
Veewee::Session.declare(( :cpu_count => '1', :memory_size=> '1024', :disk_size => '10140', :disk_format 'VDI', :hostiocache => 'off, : os_type_id => 'Ubuntu',
:iso_file => "ubuntu - 12.10 - server - i386.iso", :iso_src => "http://releases.ubuntu.eom/12.10/f
ubuntu - 12.10 - server - i386.iso", :iso_md5 => "b3d4d4edfC8f291af0b83f8a2bal9a2f', :iso_download_timeout => "1000", :boot_wait => "4", :boot_cmd_sequence => [
' ',
'/install/vmlinuz noapic preseed/url=
http://%IP%:%PORT%/preseed.cfg ',
"debian - installer=en_US auto locale=en_US -
kbd - chooser/method=us ',
'hostname=%NAME% ',
'fb=false debconf/frontend=noninteractive ', 'keyboard - configuration/modelcode=SKIP - keyboard - configuration/layout=us keyboard - configuration/variant=us console - setup/ - ask_detect=false ', 'initrd=/install/initrd.gz - - '
],
:kickstart_port => "7122", :kickstart_timeout =>-> "10000", :kickstart_file => "preseed.cfg", :ssh_login_timeout => "10000", :ssh_user => "vagrant",-> :ssh_password => "vagrant", - :ssh_key => "", :ssh_host_port => "7222", - > :ssh_guest_port => "22", - :sudo_cmd => "echo '%p'|sudo - S sh '%f", - :shutdown_cmd => "shutdown - P now", - :postinstall_files => [ "postinstall.sh"], - :postinstall_timeout => "10000" »
Теперь запустим сборку командой
$ veewee vbox build myubuntubox
Veewee задумается на время, пока будет создавать виртуальную машину, скачивать ISO-образ операционной системы, а также устанавливать и настраивать ее. После того как команда закончит работу, проверим созданную виртуалку при помощи следующей команды:
$ veewee vbox validate myubuntubox
Если все прошло гладко, можно двигаться дальше. Проэкспортируем созданную виртуальную машину как файл базовой сборки vagrant:
$ vagrant basebox export myubuntubox
Ну вот, собственно, и все. Теперь, чтобы использовать нашу базовую сборку, вызовем уже знакомые команды. Добавим бокс в список:
$ vagrant box add myubuntubox myubuntubox.box
И создадим новую виртуальную машину на основе уже созданной:
$ vagrant init myubuntubox
Вот и все - теперь даже самые рьяные параноики не смогут нас осудить, ведь теперь весь техпроцесс создания виртуальной среды контролируется нами же.
ЗАКЛЮЧЕНИЕ
Удобная среда разработки позволяет больше сконцентрироваться на решаемой проблеме, а не на вопросах совместимости ПО или различиях операционных систем, и это главная фишка Vagrant. С ним можно избавиться от проблем, когда на машине разработчика все работает, а на продакшене почему-то нет.
Разумеется, на данный момент несколько смущает его сильная руби-ориентированность, но будем надеяться, что со временем разработчики решат и эту проблему, расширив, например, список провизоров на Python или Java. И кстати, в настоящее время идет работа по добавлению других систем виртуализации, кроме Virtual Box.
В любом случае, уже сейчас проект представляет большой интерес как для отдельных разработчиков, так и для групп разработки. Удачи и новых познаний!