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

Установка

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

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

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

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

vagrant plugin install vagrant-vbguest

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

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

vagrant plugin install vagrant-vbguest-0.30.0.gem

Vagrantfile и запуск

Чтобы vagrant мог качать основные box-ы, добавь строку в начало Vagrantfile:

Vagrantfile
ENV['VAGRANT_SERVER_URL'] = 'https://vagrant.elab.pro'

Как я понимаю, это снова одно из зеркал Яндекса 🙏

vagrant init

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

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

vagrant init ubuntu/trusty64

И тогда образ подставится в config.vm.box :

Vagrantfile
config.vm.box = "ubuntu/trusty64"

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

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

И дальше:

Vagrantfile
# можно расскоментить эту строку, если нужно пробросить порты для веб сервера в виртуалки, например (чтобы с пк получать доступ к серваку на виртуалке)
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:

Vagrantfile
# -*- 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

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

# После 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 файлов в виртуалку:

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

Troubleshoot

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

➜ 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.

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

# for Intel
grep vmx /proc/cpuinfo
 
# for AMD
grep svm /proc/cpuinfo
 
# Если в выводе будут совпадения, то виртуализация включена

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