Skip to content

vagrant

Т.к. создание виртуальной машины - ручной hemorrhoid, то хотелось бы автоматизировать это всё (особенно, когда нужно создавать несколько машин, админить их). Тем более в компаниях, когда нужно всем 'раздать' prod-like виртуалки - конечно, сложно это сделать руками. Поэтому и создаются vagrant boxes, схожие с docker containers, чтобы реализовать изолированность, повторяемость и переносимость.
Для всего этого и нужен vagrant (как один из менеджеров ВМ).

Установка

Установка с офиц сайта не катит, ибо они тоже решили России закрыть доступ к релизам.

В любом случае, в apt есть более менее новая версия.

И именно оттуда лучше установить, потому что с версия из офиц сайта работает с траблами.

Также нужно установить плагин для той виртуалки, которая будет использоваться. Команда:

Bash
vagrant plugin install vagrant-vbguest

Доступа в России к ресурсам нет

Поэтому с помощью vpn нужно скачать этот плагин, например, отсюда

Bash
vagrant plugin install vagrant-vbguest-0.30.0.gem


Vagrantfile и запуск

Bash
vagrant init

Это команда создаст Vagrantfile в текущей директории. В этом файле мы описываем то, что фактически хотим видеть в виртуальной машине. Там указываться могут образ системы, настройки сети, порты, настройки производительности, shared folders, запускаемые скрипты при поднятии виртуалки и т.д.

После init можно сразу задать образ системы, который будет использоваться.

Bash
vagrant init ubuntu/trusty64

И тогда образ подставится в Vagrantfile в config.vm.box :
Ruby
config.vm.box = "ubuntu/trusty64"

Первая строка (не считая комментариев) говорит:

Ruby
# "2" в Vagrant.configure задает версию конфигурации
# (мы поддерживаем старые стили для обратной совместимости).
# Пожалуйста, не изменяйте его, если вы не знаете, что вы делаете.
Vagrant.configure("2") do |config|

И дальше:

Ruby
# можно расскоментить эту строку, если нужно пробросить порты для веб сервера в виртуалки, например (чтобы с пк получать доступ к серваку на виртуалке)
config.vm.network "forwarded_port", guest: 80, host: 8080

# эта строка используется для шейринга локальных директорий в директории виртуалки: сначала указывается local dir, потом - vm dir
config.vm.synced_folder "./data", "/vagrant_data"

# если нужно использоваться bridged adapter, то:
config.vm.network "public_network", bridge: "enp37s0"
# в bridge нужно указать сетевую карту

# настройки virtualbox-а (если нужны)
config.vm.provider "virtualbox" do |vb|
   vb.gui = true  # запуск gui окна virtualbox-а при vagrant up
   # потому что по дефолту виртулка запускается в headless режиме
   vb.memory = "1024"  # кол-во оперативной памяти для виртуалки
end

# настройка выполнения скриптов, команд
config.vm.provision :shell, path: "script.sh"  #скрипт

config.vm.provision :shell, inline: <<-SHELL  #команды инлайном
   apt-get update
   apt-get install -y mosh
SHELL

Готовый конфиг для ubuntu/trusty64:

Ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
 config.vm.box = "ubuntu/trusty64"
 config.vm.network "forwarded_port", guest: 80, host: 8080
 config.vm.network "public_network", bridge: "enp37s0"
 # config.vm.synced_folder "./data", "/vagrant_data"

 config.vm.provision "shell", inline: <<-SHELL
     apt-get update
     apt-get install -y nginx htop vim
 SHELL

end

Еще траблов с РФ

Запуск осуществляется с помощью vagrant up и vagrant начинает подтягивать с сервера выбранный box и запускать виртуалку.
Это по-хорошему, но в России доступа же нет, а vagrant игнорить глобальные конфиги VPN и не качает всё равно. Поэтому остается один вариант - скачать вручную нужный box с сайта vagrant boxes и установить.
Пример: box ubuntu/trusty64 --> https://app.vagrantup.com/ubuntu/boxes/trusty64 --> скачивать по синей кнопке загрузки"- нужно" (да, это не очевидно)

500

После скачивания box-а (с расширением .box) выполняй следующие команды:

Bash
# После add указываем произвольное имя box-а и путь к нему
vagrant box add ubuntu/trusty64 trusty-server-cloudimg-amd64-vagrant-disk1.box

# Посмореть добавленнные боксы можно командой:
vagrant box list

# Это же название можно задать в config.vm.box в Vagrantfile
config.vm.box = "ubuntu/trusty64"
# Либо
vagrant init ubuntu/trusty64

# Запускаем виртулку
vagrant up


Возможности vagrant

scp файлов в виртуалку:

Bash
vagrant upload ./dir/ /var/www/html/
# Внутренности папки dir/ попадут в /var/www/html/ на виртуалке
# То есть, это обычный и упрощенный scp


Troubleshoot

При возникновении подобной ошибки:

Text Only
➜ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
...
...
The guest machine entered an invalid state while waiting for it
to boot. Valid states are 'starting, running'. The machine is in the
'poweroff' state. Please verify everything is configured
properly and try again.

If the provider you're using has a GUI that comes with it,
it is often helpful to open that and watch the machine, since the
GUI often has more helpful error messages than Vagrant can retrieve.
For example, if you're using VirtualBox, run `vagrant up` while the
VirtualBox GUI is open.

The primary issue for this error is that the provider you're using
is not properly configured. This is very rarely a Vagrant issue.

Надо проверить сначала, включена ли виртуализация, например, такой командой:

Bash
# for Intel
grep vmx /proc/cpuinfo

# for AMD
grep svm /proc/cpuinfo

# Если в выводе будут совпадения, то виртуализация включена

Если всё норм, то следует попробовать установить vagrant с репозиториев apt, а не с офиц сайта.

troubleshoot


vagrant #v12n #virtualbox