Vagrant
Vagrant — это интерфейс командной строки для VirtualBox. Позволяет скачать готовую виртуальную машину из репозитория, запустить ее, поставить на паузу, выключить и т.п.
В Ubuntu Vagrant можно установить штатным образом:
sudo apt install vagrant
Но, скорее всего, будет установлена не последняя версия. Пока что официального репозитория с последними версиями Vagrant не существует, поэтому проще всего скачать последнюю версию для Debian с официального сайта https://www.vagrantup.com/downloads.html и установить:
sudo dpkg -i vagrant_*.deb
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.
Проверим:
- http://192.168.33.10/
ping 192.168.33.10
Зайдем в машину по 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
Часто это происходит после обновления ядра Linux или переносе виртуальной машины на другой компьютер. Для исправления достаточно выполнить переинициализацию VirtualBox:
sudo /etc/init.d/vboxdrv setup