Блог Олега Сердюкова

Создание базового образа 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 '<box_name>' 'ubuntu-13.04-server-amd64' --workdir=/Users/ctrld/Documents/DevOps/t3
    veewee parallels define '<box_name>' 'ubuntu-13.04-server-amd64-rvm' --workdir=/Users/ctrld/Documents/DevOps/t3
    veewee parallels define '<box_name>' '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 x86_64 x86_64 x86_64 GNU/Linux
    vagrant@trusty64:~$

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

Comments