В этой заметке я хочу поделиться своим опытом по созданию свой Vagrant boxes в OS X с системой виртуализации Parallels Desktop. Если есть интерес, добро пожаловать под cut.
Про Vagrant и Chef yже был неплохой пост: Development Environment при помощи Vagrant и Chef.
Однако, если вы, как и я, используете Parallels Desktop, возникает проблема. Дело в том, что Parallels и VirtualBox не могут быть запущены одновременно. Поэтому можно воспользоваться провайдером виртуальных машин vagrant-parallels.
Процедура установки и использования довольно подробно описана на странице плагина на Github, но я, на всякий случай продублирую процесс.
Лично я для устанрвки разнообразных полезных приложений использую Homebrew — им и воспользуемся.
eric@Copoka-3 ~> brew tap phinze/cask
eric@Copoka-3 ~> brew cask install vagrant
eric@Copoka-3 ~> vagrant plugin install vagrant-parallels
В общем-то, все готово для работы. Не хватает самой мелочи — собственно box'ов. На сайте с плагином есть ссылка на devbox, но нам же хочется чего-то более разнообразного и своего.
И тут на сцену выходит veewee. К сожалению, готового пакета veewee нет, поэтому будем собирать сами.
Чтобы не зосорять систему лишними gem'ами, установим rvm:
eric@Copoka-3 ~> curl -sSL https://get.rvm.io | bash -s stable
eric@Copoka-3 ~> rvm install 2.1.0
eric@Copoka-3 ~> rvm use 2.1.0
Ruby готов. Теперь собственно veewee:
eric@Copoka-3 ~> cd Work
eric@Copoka-3 ~/Work> git clone https://github.com/jedi4ever/veewee.git
eric@Copoka-3 ~/Work> cd veewee
eric@Copoka-3 ~/W/veewee> rvm use 2.1.0@veewee --create
eric@Copoka-3 ~/W/veewee> gem install bundler --no-ri --no-rdoc
eric@Copoka-3 ~/W/veewee> bundle install
eric@Copoka-3 ~/W/veewee> rake install
Теперь, чтобы начать создавать ящики, нужно установить Parallels SDK, скачав его по ссылке SDK
Скачали, установили, можно приступать.
eric@Copoka-3 ~> cd Work
eric@Copoka-3 ~/Work> mkdir boxes
eric@Copoka-3 ~/Work> cd boxes
Для создания ящика предлагается воспользоваться шаблоном. Список шаблонов можно получить так:
eric@Copoka-3 ~/W/boxes> veewee parallels templates
Список довольно большой, приводить не буду. Для наших целей воспользуемся старой доброй Ubuntu 12.04 LTS:
eric@Copoka-3 ~/W/boxes> veewee parallels define 'precise64' 'ubuntu-12.04.3-server-amd64'
Дальше нам предлагается запустить сборку командой veewee parallels build
, однако нас постигнет неудача. Хотя, казалось бы, мы использовали шаблон для работы с parallels, данный шаблон пытается установить guest tools для VirtualBox и VMWare, но ничего не знает про Parallels. Исправим этот недостаток:
eric@Copoka-3 ~/W/boxes> cd definitions/precise64/
eric@Copoka-3 ~/W/b/d/precise64>
Здесь необходимо создать файл parallels.sh
со следующим содержимым (я подсмотрел в шаблоне для ubuntu-13.10-server-amd64, но там другая проблема, расскажу позже):
# Install the Parallels Tools
PARALLELS_TOOLS_ISO=prl-tools-lin.iso
mount -o loop $PARALLELS_TOOLS_ISO /media/cdrom
/media/cdrom/install --install-unattended-with-deps --progress
umount /media/cdrom
Затем редактируем definition.rb
, убираем из списка postinstall_files
упоминания про virtualbox и vmfusion, и добавляем parallels.sh
.
Вот теперь можно приступать:
eric@Copoka-3 ~/W/b/d/precise64> cd ../..
eric@Copoka-3 ~/W/boxes> veewee parallels build precise64
Можно сходить пообедать, процесс довольно длительный. В конце концов все благополучно завершится и мы увидим примерно следующее:
...много-много букв...
The box precise64 was built successfully!
You can now login to the box with:
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 22 -l vagrant 10.211.55.7
eric@Copoka-3 ~/W/boxes>
На этом этапе можно зайти на машину (пароль vagrant
), убедиться, что все нормально, что-нибудь добавить (например поддержку русского). После того, как мы убедились, что все установлено как надо, можно упаковать в коробку для Vagrant.
Но тут нас поджидает еще один подводный камень. При попытке сделать экспорт получаем следующую ошибку:
Error: We executed a shell command and the exit status was not 0 - Command :prl_disk_tool compact --buildmap --hdd /Users/eric/Documents/Parallels/precise64.pvm/harddisk.hdd. - Exitcode :2. - Output : Operation progress 5 %Unable to compact the disk.
Это известная ошибка, для ее решения нужно закомментировать строчку optimize_disk
в файле gems/veewee-0.3.12/lib/veewee/provider/parallels/box
(относительно используемой версии gemset'а) — у меня это была 69-я строка.
После этого экспорт отработает штатно, и в текущем каталоге мы увидим наш заветный ящик:
eric@Copoka-3 ~/W/boxes> ll
total 1252512
drwxr-xr-x+ 3 eric staff 102B 20 фев 17:44 definitions
drwxr-xr-x+ 4 eric staff 136B 20 фев 17:39 iso
-rw-r--r--+ 1 eric staff 612M 20 фев 18:46 precise64.box
eric@Copoka-3 ~/W/boxes>
Добавляем его в копилку:
eric@Copoka-3 ~/W/boxes> vagrant box add 'precise64' '/Users/eric/Work/boxes/precise64.box'
Теперь выбираем место для тестового запуска и стартуем получившийся ящик:
eric@Copoka-3 ~/W/boxes> cd ~/Work
eric@Copoka-3 ~/Work> mkdir testbox
eric@Copoka-3 ~/Work> cd testbox
eric@Copoka-3 ~/W/testbox> vagrant init precise64
eric@Copoka-3 ~/W/testbox> vagrant up --provider=parallels
eric@Copoka-3 ~/W/testbox> vagrant ssh
Welcome to Ubuntu 12.04.4 LTS (GNU/Linux 3.8.0-29-generic x86_64)
* Documentation: https://help.ubuntu.com/
Last login: Thu Feb 20 18:33:11 2014 from 10.211.55.2
vagrant@precise64:~$
Что и хотели получить.
Теперь про Ubuntu 13.10. Там шаблон практически не требует изменений, надо только в definition.rb
раскомментировать строчку для Parallels и, соответственно, закомментировать VirtualBox. Дальше все точно также.
Тем не менее, при попытке сделать vagrant up
нашего ящика с 13.10 происходит таймаут ожидания запуска машины, хотя машина успешно стартует. Связано это с ошибкой драйверов Parallels для Linux. Parallels знает об этой ошибке и обещает в ближайшем обновлении ее исправить. Прочитать об этом можно на vagrant-parallels issue tracker
В качестве временного решения предлагается, в момент запуска, помочь vagrant руками: зайти в машину с консоли и перезапустить dhclient на eth0.
Надеюсь, мои несколько сумбурные заметки кому-нибудь пригодятся, и позволят съекономить время.
Автор: tchu