...

четверг, 20 февраля 2014 г.

OS X, Vagrant и Parallels Desktop. Строим свои коробки с помощью veewee

В этой заметке я хочу поделиться своим опытом по созданию свой 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 http://ift.tt/1aa8mgK
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/http://ift.tt/1eXBKlH.
- 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: http://ift.tt/ABdZxn
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.


Надеюсь, мои несколько сумбурные заметки кому-нибудь пригодятся, и позволят съекономить время.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий