Т.к. создание виртуальной машины - ручной hemorrhoid, то хотелось бы автоматизировать это всё (особенно, когда нужно создавать несколько машин, админить их). Тем более в компаниях, когда нужно всем “раздать” prod-like виртуалки - конечно, сложно это сделать руками. Поэтому и создаются vagrant boxes, схожие с docker containers, чтобы реализовать изолированность, повторяемость и переносимость.
Для всего этого и нужен vagrant (как один из менеджеров ВМ).
Установка
Установка с офиц сайта не катит, ибо они тоже решили России закрыть доступ к релизам. Anotha clowns
В любом случае, в apt есть более менее новая версия.
И именно оттуда лучше установить, потому что с версия из офиц сайта работает с траблами.
Также нужно установить плагин для той виртуалки, которая будет использоваться. Команда:
vagrant plugin install vagrant-vbguest
Доступа в России к ресурсам нет
Поэтому с помощью vpn нужно скачать этот плагин, например, отсюда
Это команда создаст 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 dirconfig.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 moshSHELL
После скачивания box-а (с расширением .box) выполняй следующие команды:
# После add указываем произвольное имя box-а и путь к немуvagrant box add ubuntu/trusty64 trusty-server-cloudimg-amd64-vagrant-disk1.box# Посмореть добавленнные боксы можно командой:vagrant box list# Это же название можно задать в config.vm.box в Vagrantfileconfig.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 Intelgrep vmx /proc/cpuinfo# for AMDgrep svm /proc/cpuinfo# Если в выводе будут совпадения, то виртуализация включена
Если всё норм, то следует попробовать установить vagrant с репозиториев apt, а не с офиц сайта.