Содержание

Перейти к концу метаданных
Переход к началу метаданных


Vagrant — программное обеспечение для создания и конфигурирования виртуальной среды разработки.
Является системой управления для программного обеспечения виртуализации, например VirtualBox,
и инструментом для средств управления конфигурациями, такими как Chef, Salt и Puppet.

Работает с  VirtualBox, VMware Workstation, поддерживает облачные среды, реализована встроенная поддержка для использования контейнерной виртуализации на базе LXC.

Установка пакетов

Пакет vagrant доступен в репозитории ОСОН Орёл.

Пакет может быть установлен с помощью графического менеджера пакетов, или из командной строки  командой 

apt install vagrant

Так как vagrant работает с виртуальной средой разработки, для его работы предварительно нужно установить пакет виртуализации VirtualBox.

После установки VirtualBox следует установить его расширение VirtualBox Extension Pack.

На гостевые машины, с которыми будет работать Vagrant, должно быть установлено Дополнение Гостевой ОС

Корректировка пакета Vagrant

Для того, чтобы пакет Vagrant версии 1.9.1 и пакет VirtualBox версии 5.2, входящие на момент написания статьи в состав дистрибутива ОСОН Орёл, работали совместно,
нужно внести исправление в файл настроек Vagrant


 /usr/share/rubygems-integration/all/gems/vagrant-1.9.1/plugins/providers/virtualbox/driver/meta.rb

а именно, после строки номер 63

"5.1" => Version_5_1,

добавить строку


"5.2" => Version_5_1,

Настройка пакета

Пакет vagrant по умолчанию выполняет все настройки виртуальной среды разработки из-под учетной записи пользователя vagrant с паролем vagrant.
Однако, такой пароль является ненадежным, и ОС семейства ASTRALINUX не позволят его использовать.

Изменить настройки имени и пароля можно с момощью так называемого VagrantFile, однако, на данном этапе используем вход по открытому ключу.
Стандартный НЕБЕЗОПАСНЫЙ открытый ключ vagrant можно скачать по ссылке 
(небезопасный ключ будет автоматически заменён случайно сгенерированным ключём при первом подключении через SSH)

Работа с пакетом

Общий сценарий работы

  • Создаем базовую виртуальную машину (далее ВМ) в VirtualBox (или скачиваем готовый образ из репозитория Vagrant);
  • Переноcим созданную ВМ в БД Vagrant;
  • Клонируем и запускаем готовый образ ВМ, изменяя, по мере надобности, настройки и сценарии запуска;

Создание базовой виртуальной платформы

Создать в VirtualBox виртуальную платформу  в соответствии с инструкцией:

  • С удобным вам именем платформы (для примера возьмём vagrant-astralinux);

Установить на виртуальную платформу нужную версию ОС с нужными настройками.

  • С именем пользователя vagrant;
  • С любым паролем, допустимым требованиями безопасности используемой ОС
  • При установке ОС можно сразу установить сервер SSH, выбрав пункт "Средства удалённого доступа SSH" в диалоге "Выбор программного обеспечения" установщика ОС

После завершения установки ВМ войти в виртуальную ОС, и выполнить следующие действия:

После установки гостевых дополнений желательно сразу "вынуть" гостевой компакт-диск из виртуального привода ВМ
  • Передать серверу SSH на ВМ открытый ключ Vagrant
    (адрес ВМ можно определить, выполнив на ней команду ifconfig)
  • дополнительно, можно выполнить нужные вам первичные настройки ОС
    (пункт необязательный, настройки ОС может выполнять Vagrant, если ему предоставить соответствующий сценарий, см. ниже)

Экспорт ВМ из VirtualBox

Локальный контейнер созданной ранее в VirtualBox ВМ создается командой
vagrant package --base <имя_виртуальной_платформы> --output <имя_файла_для_сохранения>, например:

vagrant --base vagrant-astralinux --output vagrant-astralinux-one.box


В имени пути к рабочему каталогу, в котором выполняются дествия с Vagrant-ом, и в именах файлов не дожно быть символов кириллицы

Команда выполняется довольно долго, но, в итоге, vagrant выполнит экспорт созданной в VirtualBox ВМ с именем vagrant-astralinux, 
в файл (контейнер, box) vagrant-astralinux-one.box, расположенный в рабочем каталоге.

Далее этот файл может быть перемещен на другую машину, или импортирован в локальную базу данных Vagrant командой vagrant box add (имя образа машины в БД Vagrant будет astralinux-one):

Импорт ВМ в Vagrant

Импорт контейнера в локальную базу данных Vagrant выполняется командой vagrant box add (имя образа машины в БД Vagrant будет astralinux-one):

vagrant box add --name astralinux-one vagrant-astralinux-one.box

После выполнения команды запись о ВМ astralinux-one будет создана в каталоге базы данных Vagrant  ~/vagrant.d/boxes.

При этом в каталоге будет создан конфигурационный файл  Vigrantfile, содержащий базовые настройки для запуска виртуальной машины. 

Запуск ВМ в Vagrant

Для запуска виртуальной платформы создадим отдельный рабочий каталог, и перейдём в него:


mkdir test
cd test

Все дальнейшие действия должны выполняться в одном рабочем каталоге. Можно создать множество таких каталогов с файлами виртуальных машин,  но единственным способом сообщить Vagrant о том, какую виртуальную машину требуется запустить, является исполнение команды в соответствующем каталоге. В результате, Vagrant создаст виртуальную машину на основе ранее загруженного файла-контейнера. Виртуальный жесткий диск, и все файлы конфигурации будут сохранены в текущем каталоге в подкаталоге с именем .vagrant.  

После этого выполним инициализацию платформы:

vagrant init astralinux-test

В результате выполнения этой команды в текущем каталоге будет создан локальный файл с именем Vagrantfile, содержащий индивидуальные настройки для запуска виртуальной машины.
Локальный Vagrantfile будет выполняться при запуске ВМ после базового Vigrantfile, созданного при импорте VM, и переопределять базовые настройки.

Файлы Vagrantfile представляют собой сценарий на языке программирования Ruby.

В этих сценарийях файле можно указать индивидуальные параметры запуска, которые будут применяться к ранее созданному образу, хранящемуся в базе данных.
Можно изменить ограничения по памяти и CPU, включить или отключить разделение каталогов, изменить настройки сети, в том числе — настроить проброс портов из гостевой системы в хост-систему, вызов сценариев bash,  и так далее.
В том числе, можно указать команды, которые будут применяться только при первичном запуске ВМ, или при каждом запуске.

Запуск виртуальной машины:

vagrant up

Подключение к виртуальной машине:

vagrant ssh

После выполнения этой команды произойдёт вход в ВМ с именем пользователя vagrant.
Для первичного входа будет использован ранее созданный небезопасный открытый ключ, который сразу же будет заменён на случайно сгенерированный ключ.
При этом, текущий рабочий каталог, из которого запускалась ВМ,  будет автоматически доступен из ВМ через каталог /vagrant.

Пример использования сценария

Подробное описание возможностей сценариев Vagrant имеется в оригинальной документации пакета

Пример сценария Vagrantfile, запускающего сразу несколько ВМ из ранее созданного контейнера astralinux-test:

  • ВМ с именем v_ipa и с доменным именем ipa.astra.test, предназначенная на роль сервера
  • Три ВМ с именами node_1, node_2 и node_3, предназначенные на роль клиентов


Vagrant.configure("2") do |config|
    config.vm.box = "astralinux-test"
    config.vm.guest = "debian"
    config.ssh.shell = "bash"

    config.vm.define "ipa" do |ipa|
        ipa.vm.provider "virtualbox" do |vb|
            vb.name = "v_ipa"
        end
        ipa.vm.hostname = "ipa.domain.test"
    end

    (1..3).each do |i|
        config.vm.define "node-#{i}" do |node|
            node.vm.provider "virtualbox" do |vb|
                vb.name = "node-#{i}"
            end
            node.vm.hostname = "node-#{i}"
            node.vm.provision "shell",
            inline: "echo hello from node #{i}"
        end
    end
end

Выполнение сценария осуществляется одной командой vagrant up.

Полное удаление, пересоздание и запуск всех созданных ВМ (с сохранением локального файла настроек Vagrantfile, и, соответственно, с выполнением сценариев Vagrantfile при запуске):

vagrant destroy -f && vagrant up




  • Нет меток