Vagrant

Матеріал з Wiki.Zina
Перейти до навігації Перейти до пошуку

Vagrant — это интерфейс командной строки для VirtualBox. Позволяет скачать готовую виртуальную машину из репозитория, запустить ее, поставить на паузу, выключить и т.п.

Установка Vagrant

[ред. | ред. код]

В Ubuntu Vagrant можно установить штатным образом:

sudo apt install vagrant

Но, скорее всего, будет установлена не последняя версия. Пока что официального репозитория с последними версиями Vagrant не существует, поэтому проще всего скачать последнюю версию для Debian с официального сайта https://www.vagrantup.com/downloads.html и установить:

sudo dpkg -i vagrant_*.deb

Добавление бокса из URL

[ред. | ред. код]

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

Бокс Vagrant нужно или где-то взять готовый, или создать самостоятельно из имеющейся виртуальной машины VirtualBox.

Готовые боксы Vagrant можно найти на сайтах:

Несколько наиболее популярных боксов (все x64):

Ubuntu 15.04 Desktop:  box-cutter/ubuntu1504-desktop
Ubuntu 14.04 Desktop:  puphpet/ubuntu1404-x64
Ubuntu 12.04 Server:  hashicorp/precise64
Debian 7.5:  puphpet/debian75-x64
Debian 8:  debian/jessie64
Mas OS X Yosemite 10.10:  http://files.dryga.com/boxes/osx-yosemite-0.2.1.box

Добавление бокса делается командой:

vagrant box add <имя_бокса>

Примеры:

vagrant box add hashicorp/precise64
vagrant box add "Mas OS X Yosemite 10.10" http://files.dryga.com/boxes/osx-yosemite-0.2.1.box

В результате Vagrant скачает бокс в папку ~/.vagrant.d/boxes и подготовит его к дальнейшему использованию - к разворачиванию из него виртуальных машин.

Посмотреть список добавленных боксов:

vagrant box list

Удалить бокс:

vagrant box remove <имя_бокса>

Установка виртуальной машины из бокса

[ред. | ред. код]

Установим Ubuntu 12.04 из добавленного бокса.

Создадим папку проекта и перейдем в нее:

mkdir -p ~/Vagrant/Ubuntu-12.04
cd ~/Vagrant/Ubuntu-12.04

Сгенерируем файл Vagrantfile, в котором будут сохраняться настройки виртуальной машины:

vagrant init hashicorp/precise64

Имя бокса hashicorp/precise64 можно узнать в выводе команды vagrant box list

Сразу отредактируем Vagrantfile, чтобы к Apache внутри виртуальной машины можно было обращаться по IP адресу 192.168.33.10 — для этого достаточно раскоментировать строку:

config.vm.network "private_network", ip: "192.168.33.10"

Запустим виртуальную машину:

vagrant up

Начнется процесс импорта и первоначальной настройки виртуальной машины из ~/.vagrant.d/boxes, после чего машина будет запущена в VirtualBox.

Во время импорта виртуальная машина (т.е. образ жесткого диска .vmdk и файл настроек .vbox) будет развернута в стандартной папке VirtualBox ~/VirtualBox VMs.

Проверим:

Зайдем в машину по SSH:

vagrant ssh

Управление виртуальной машиной

[ред. | ред. код]

В дальнейшем виртуальную машину можно запускать или командой vagrant up в папке ~/Vagrant/<имя_машины>, или из любой папки, но указывая ID виртуальной машины:

Запуск­:  vagrant up <id>
Выключение:  vagrant halt <id>
Пауза:  vagrant suspend <id>
Восстановление:  vagrant resume <id>
Удаление:  vagrant destroy <id>

Узнать ID можно командой, выводящей список всех виртуальных машин, установленных через Vagrant:

vagrant global-status

Будет показан список виртуальных машин типа такого:

id       name    provider   state   directory                           
------------------------------------------------------------------------
61e50ed  default virtualbox running /home/user/Vagrant/

Соответственно, чтобы запустить виртуальную машину, нужно выполнить команду:

vagrant up 61e50ed

или указав только первые символы ID:

vagrant up 61

Доступ к файлам

[ред. | ред. код]

Из коробки Vagrant синхронизирует каталог хоста с Vagrantfile в директорию /home/vagrant виртуальной машины.

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

config.vm.synced_folder "../../Projects", "/vagrant_data"

где:

  • первый — путь на хосте,
  • второй — путь на виртуальной машине.

Если на хосте указывать относительный путь, то он будет относительно каталога с Vagrantfile.

Переустановка виртуальной машины

[ред. | ред. код]

Vagrant особенно удобен тем, что позволяет быстро получить виртуальную машин в чистом, свежеустановленном виде.

Если вы провели с виртуальной машиной эксперименты и теперь хотите ее вернуть в первозданный вид, сделать это можно двумя командами, находясь в папке виртуальной машины:

vagrant destroy
vagrant up

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

[ред. | ред. код]

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

У пользователя-администратора должен быть логин vagrant и пароль vagrant.

# Установите Guest Additions:
sudo mount /dev/cdrom /media/cdrom
sudo /media/cdrom/VBoxLinuxAdditions.run
sudo umount /media/cdrom
sudo reboot now
# Отключите ввод пароля при выполнении команды sudo:
sudo su -
visudo
# Добавьте строку в конец файла:
vagrant ALL=(ALL) NOPASSWD:ALL
# Обновите систему:
sudo apt-get update
# Установите MC и Vim:
sudo apt-get install -y vim mc
# Установите Vagrant Public Keys
mkdir -p /home/vagrant/.ssh
wget --no-check-certificate https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub -O /home/vagrant/.ssh/authorized_keys
# Установите правильные права:
chmod 0700 /home/vagrant/.ssh
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant /home/vagrant/.ssh
# Установите OpenSSH Server:
sudo apt-get install -y openssh-server
# Откройте конфиг:
sudo vim /etc/ssh/sshd_config
# Проверьте настройки:
 Port 22
 PubkeyAuthentication yes
 AuthorizedKeysFile %h/.ssh/authorized_keys
 PermitEmptyPasswords no
# Перезагрузите SSH:
sudo service ssh restart
# Перезагрузите виртуальную машину:
sudo shutdown -r now

Подробнее см. Steps to create a Vagrant Base Box with Ubuntu 14.04 Desktop

После подготовки виртуальной машины нужно ее упаковать в бокс.

vagrant package --base <VitualBox VM Name>

Будет создан файл с названием package.box. Его можно переименовать.

Добавление бокса делается аналогично добавлению из URL:

vagrant box add "<VitualBox VM Name>" package.box

package.box будет конвертирован в файл .vmdk, который, вместе с сопутствующими конфигурационными файлами, будет помещен в папку ~/.vagrant.d/boxes/<VitualBox VM Name>/.

Дальше установка виртуальной машины из бокса делается как обычно:

mkdir ~/Vagrant/<VitualBox VM Name>
cd ~/Vagrant/<VitualBox VM Name>
vagrant init <VitualBox VM Name>
vagrant up

Ошибка 'VirtualBox is complaining that the kernel module is not loaded'

[ред. | ред. код]

Часто это происходит после обновления ядра Linux или переносе виртуальной машины на другой компьютер. Для исправления достаточно выполнить переинициализацию VirtualBox:

sudo /etc/init.d/vboxdrv setup

См. также

[ред. | ред. код]

Ссылки

[ред. | ред. код]