Vagrant#
Vagrant — это интересный инструмент для создания тестовых окружений.
Фактически это обёртка над гипервизорами (KVM, VirtualBox), которая позволяет быстро поднимать виртуальные машины заданных конфигураций. Это действительно удобно, когда надо что-то проверить на сервере. Вместо покупки VDS у хостера ты быстро разворачиваешь машину прямо на своём компьютере, а потом убиваешь когда она уже не нужна.
Из фич могу отметить:
Проброс портов на хост-систему
Можно подключать директорию на хосте к виртуалке подобно Docker volume
Из одного Vagrantfile поднять несколько виртуальных машин, связанных в приватную сеть.
Можно использовать cloud-init и подобные системы для конфигурирования машины при её создании.
Пользователи Arch Linux здесь могут столкнуться с проблемами из-за дурдома с зависимостями. Мне пришлось даунгрейдить Ruby до версии 3.0.4-5, а Vagrant до версии 2.2.19-2.
Примечание
UPD: Vagrant 2.3.2 и Ruby 3.0.4p208 прекрасно уживаются вместе.
Так как у меня не завёлся VirtualBox (не больно и нужен), я решил использовать KVM/QEMU, он у меня уже был установлен как зависимость для GNOME Boxes. Если нет, то надо установить:
sudo pacman -Sy qemu dnsmasq bridge-utils virt-manager libvirt
Команды, которые я выполнял:
# Даунгрейд рубей
sudo pacman -U file:///var/cache/pacman/pkg/ruby-3.0.4-5-x86_64.pkg.tar.zst
# Даунгрейд самого Vagrant
sudo pacman -U https://releases.hashicorp.com/vagrant/2.3.0/vagrant-2.3.0-1-x86_64.pkg.tar.zst
# Поднимаем юниты systemd для libvirt
sudo systemctl start libvirtd.service
sudo systemctl start virtnetworkd.service
sudo systemctl start virtnetworkd-ro.socket
# Ставим плагин для libvirt. Тут нам потребуется включить прокси, так как
# Hashicorp россиян не любит и будет показывать фиктивную 404-ю ошибку.
vagrant plugin install vagrant-libvirt
# Vagrant будет мусорить в рабочий каталог, поэтому создадим диру
mkdir vagrant && cd vagrant
# Инициализируем вагрант
vagrant init generic/ubuntu2204
Далее я столкнулся с тем, что у меня уже есть стандартный системный сторадж
пул «images» и вагранту это не нравится. Чтобы использовать локальный пул я
указал в настройках vagrant-libvirt URI qemu:///session
.
В итоге у меня получился такой Vagrantfile:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "generic/ubuntu2204"
# vagrant-libvirt configuration. See
# https://github.com/vagrant-libvirt/vagrant-libvirt/blob/main/docs
config.vm.provider :libvirt do |libvirt|
libvirt.uri = "qemu:///session"
libvirt.storage_pool_name = "vagrant-pool"
libvirt.cpus = 2
libvirt.memory = 2048
libvirt.storage :file, :size => '15G'
end
# Network settings
config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
end
Далее я создал новый пул специально для Vagrant по инcтрукции рэдхата.
mkdir -pv $HOME/.local/share/vagrant_pool
virsh pool-list --all
virsh pool-define-as vagrant-pool dir - - - - "$HOME/.local/share/vagrant_pool"
virsh pool-build vagrant-pool
virsh pool-start vagrant-pool
virsh pool-autostart vagrant-pool
virsh pool-info vagrant-pool
Для сети скорее всего хватит сделать от рута:
sudo virsh net-start default
Это поднимет интерфейс virbr0 для будущих виртуалок.
Наконец, можно запустить виртуалку (не забываем включить прокси для скачивания образа):
# vagrant up --provider=libvirt ИЛИ
export VAGRANT_DEFAULT_PROVIDER=libvirt
vagrant up
На запущенную виртуалку можно зайти по SSH командой vagrant ssh
.