Создание базового образа Ubuntu 14.04 для Vagrant с провайдером Parallels

Ubuntu 14.04 вышел пару дней назад, и его нет для провайдера Parallels. Не то, чтобы мне он был совсем уж нужен, но показать, как его сделать, хочется.

Для этого я использую утилиту Veewee. Требования и установка описаны на странице проекта.

Я использую RVM, поэтому достаточно было установить gem:

$ rvm use 2.0.0 Using /Users/ctrld/.rvm/gems/ruby-2.0.0-p247

$ gem install veewee

В этом случае не нужно добавлять «alias veewee=«bundle exec veewee» в .zshrc или .bashrc, иначе закономерно столкнётесь с невозможностью его запуска.

Для Parallels нужно обязательно поставить пакет Parallels Virtualization SDK 9 for Mac и добавить модуль prlsdkapi в пакеты python

$ sudo ln -fs /Library/Frameworks/ParallelsVirtualizationSDK.framework/Libraries/Python/2.7/prlsdkapi /Library/Python/2.7/site-packages/

или добавить в переменные окружения

export PYTHONPATH=»/Library/Frameworks/ParallelsVirtualizationSDK.framework/Libraries/Python/2.7:$PYTHONPATH»

Получаю список образов:

$ veewee parallels templates | grep ubuntu

veewee parallels define '' 'ubuntu-13.04-server-amd64' --workdir=/Users/ctrld/Documents/DevOps/t3 veewee parallels define '' 'ubuntu-13.04-server-amd64-rvm' --workdir=/Users/ctrld/Documents/DevOps/t3 veewee parallels define '' 'ubuntu-13.10-server-amd64' --workdir=/Users/ctrld/Documents/DevOps/t3

Создаю новый образ, базируясь на ubuntu-13.10-server-amd64, даю ему имя trusty64 (14.04 = Trusty Tuhr, 64-битная версия):

$ veewee vbox define trusty64 ubuntu-13.10-server-amd64

The basebox 'trusty64' has been successfully created from the template 'ubuntu-13.10-server-amd64' You can now edit the definition files stored in /Users/ctrld/Documents/DevOps/t3/definitions/trusty64 or build the box with: veewee vbox build 'trusty64' --workdir=/Users/ctrld/Documents/DevOps/t3

Правлю файл определений definition.rb

$ vim definitions/trusty64/definition.rb

заменяю строки

: iso_file => «ubuntu-13.10-server-amd64.iso», : iso_src => «http://releases.ubuntu.com/13.10/ubuntu-13.10-server-amd64.iso», : iso_md5 => »4d1a8b720cdd14b76ed9410c63a00d0e»,

на

: iso_file => «ubuntu-14.04-server-amd64.iso», : iso_src => «http://releases.ubuntu.com/14.04/ubuntu-14.04-server-amd64.iso», : iso_md5 => »08d25bf879e353686a974b7b14ae7d81»,

Для того, чтобы найти iso_md5, зашёл в каталог релиза и открыл файл MD5SUMS.

Также в этом же файле проверяю секцию postinstall_files и закомментариваю строку «vbox.sh» и расскоментариваю «parallels.sh»:

: postinstall_files => [ «build_time.sh», «apt.sh», «sudo.sh», «vagrant.sh», «ruby.sh», «chef.sh», «puppet.sh», #«vbox.sh», «parallels.sh», «cleanup.sh» ],

Создаю образ:

$ veewee parallels build trusty64

Building Box trusty64 with Definition trusty64:  — debug: false  — cwd: /Users/ctrld/Documents/DevOps/t3  — force: false  — auto: false  — checksum: false  — postinstall_include: []  — postinstall_exclude: []

We did not find an isofile here: /Users/ctrld/Documents/DevOps/t3/iso/ubuntu-14.04-server-amd64.iso.

The definition provided the following download information:  — Download url: http://releases.ubuntu.com/14.04/ubuntu-14.04-server-amd64.iso  — Md5 Checksum: 08d25bf879e353686a974b7b14ae7d81

Download? (Yes/No) Yes Creating an iso directory Checking if isofile ubuntu-14.04-server-amd64.iso already exists. Full path: /Users/ctrld/Documents/DevOps/t3/iso/ubuntu-14.04-server-amd64.iso Moving /var/folders/_9/dwc1x_zs6ps4rf1w_wn7xd600000gn/T/open-uri20140419–88232–1p5t7gb to /Users/ctrld/Documents/DevOps/t3/iso/ubuntu-14.04-server-amd64.isoooooooooooooo| 564.0MB 9.7MB/s ETA: 0:00:00 Mounting cdrom: /Users/ctrld/Documents/DevOps/t3/iso/ubuntu-14.04-server-amd64.iso Waiting 4 seconds for the machine to boot Finding unused TCP port in range: 7122 — 7199 Selected TCP port 7122 Starting a webserver:7122

The box trusty64 was built successfully!

Изменений по сравнению с 13.10 нет, образ с полным набором ruby, chef и puppet у меня построился за 48 минут.

Дальше нужно сделать экспорт, однако в коде Veewee есть ошибка, приводящая к остановке на стадии сжатия образа с сообщением «Unable to compact the disk». Нужно найти файл lib/veewee/provider/parallels/box/export.rb в пакете veewee

$ find $HOME/.rvm -name export.rb

И заккоментировать строку 179 c «shell_exec optimize_command»:

$ vim $HOME/.rvm/gems/ruby-2.0.0-p247/gems/veewee-0.3.12/lib/veewee/provider/parallels/box/export.rb

def optimize_disk env.ui.info «Optimizing Disk» path_to_hdd = File.join read_settings.fetch («Home»), «harddisk.hdd» optimize_command = »#{@prldisktool} compact --buildmap --hdd #{path_to_hdd}» # shell_exec optimize_command end

Экспортирую образ:

$ veewee parallels export trusty64

To import it into vagrant type: vagrant box add 'trusty64' '/Users/ctrld/Documents/DevOps/t3/trusty64.box'

To use it: vagrant init 'trusty64' vagrant up --provider=parallels vagrant ssh

Перед этим рекомендуется сделать валидацию, но я её не делаю:

$ veewee vbox validate 'trusty64'

Файл trusty64.box создан в текущем каталоге:

$ ls -l

drwxr-xr-x 3 ctrld staff 102 Apr 19 21:16 definitions drwxr-xr-x 3 ctrld staff 102 Apr 19 21:25 iso -rw-r--r-- 1 ctrld staff 584975720 Apr 19 21:55 trusty64.box

Добавляю базовый образ в Vagrant под именем t03:

$ vagrant box add --name t03 ./trusty64.box

==> box: Adding box 't03' (v0) for provider: box: Downloading: file:///Users/ctrld/Documents/DevOps/t3/trusty64.box ==> box: Successfully added box 't03' (v0) for 'parallels'!

Создаю Vagrantfile:

$ vagrant init t03

A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.

Создание виртуальной машины:

$ vagrant up --provider=parallels

Bringing machine 'default' up with 'parallels' provider… ==> default: Importing base box 't03'… ==> default: Setting the name of the VM: t3_default_1397934186513_34171 ==> default: Preparing network interfaces based on configuration… default: Adapter 0: shared ==> default: Clearing any previously set network interfaces… ==> default: Booting VM… ==> default: Waiting for machine to boot. This may take a few minutes… default: SSH address: 10.211.55.13:22 default: SSH username: vagrant default: SSH auth method: private key default: Warning: Connection refused. Retrying… ==> default: Machine booted and ready! ==> default: Checking for Parallels Tools installed on the VM… ==> default: No Parallels Tools were detected on the base box for this VM! Parallels ==> default: Tools are required for forwarded ports, shared folders, host only ==> default: networking, and more. If SSH fails on this machine, please install ==> default: the Parallels Tools and repackage the box to continue. ==> default: ==> default: This is not an error message; everything may continue to work properly, ==> default: in which case you may ignore this message. ==> default: Mounting shared folders… default: /vagrant => /Users/ctrld/Documents/DevOps/t3

Подключение по ssh:

$ vagrant ssh

Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0–24-generic x86_64)

* Documentation: https://help.ubuntu.com/ Last login: Sat Apr 19 18:53:15 2014 from 10.211.55.2 vagrant@trusty64:~$ uname -a Linux trusty64 3.13.0–24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014×86_64×86_64×86_64 GNU/Linux vagrant@trusty64:~$

Можно пользоваться.

Я описал быстрый процесс создания, о правильном именовании базовых образов в Vagrant и их публикация — отдельно.

Полный текст статьи читайте на TheAppleGeek