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

в 15:49, , рубрики: mac os x, parallels desktop, vagrant, виртуализация, разработка, метки: , ,

В этой заметке я хочу поделиться своим опытом по созданию свой 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

Источник

Поделиться

* - обязательные к заполнению поля