Автор прощается с Vagrant. Он пользовался им с 2010 года, сначала с VirtualBox, потом с libvirt и KVM. Но решил, что это слишком сложно. Зачем ещё один слой абстракции, если KVM уже встроен в ядро Linux? Он чувствовал себя ленивым и «вонючим маленьким кусочком дерьма». Несколько лет назад уже переключился с VirtualBox на libvirt, но только недавно окончательно удалил Vagrant и начал разбираться с KVM и virsh по-настоящему.
KVM превращает ядро Linux в гипервизор. libvirt — библиотека и демон, который управляет не только KVM, но и Xen, LXC, QEMU. Унифицирует команды для разных платформ. virsh — консольный фронтенд к libvirt. Установка: sudo apt-get install libvirt-daemon-system libvirt-clients virtinst. Примеры команд: domblkinfo, domiflist, domstate, start, shutdown, dumpxml. Схема: пользователь → virsh → libvirt → KVM.
После обновления с Debian bookworm на trixie сломался вывод через последовательный порт при запуске VM. Параметры ядра не передавались в grub. Автор решил не разбираться с багом, а перейти на предварительно настроенные (preseeded) виртуальные машины. Это детерминированно, версионируется, и все значения гарантированно попадут в VM. Пример команды virt-install:
$ virt-install --connect qemu:///system --name kilgore-trout --memory 8192 --extra-args="preseed/file=/preseed.cfg console=ttyS0,115200n8" --initrd-inject ./preseed.cfg --install debian13 --disk size=40 --filesystem type=mount,source=/home/btoll/libvirt/...,target=shared --network network=default --graphics none
Флаг --extra-args передаёт команды ядру, --initrd-inject подкладывает preseed-файл из host. Важно: без console=ttyS0 VM зависает — нет соединения с терминалом.
После успешного запуска virsh console показывает логин. Сеть работает: VM получает IP через DHCP (libvirt использует dnsmasq). Host создаёт мост virbr0, к нему подключается интерфейс vnet46 (TAP-устройство). Сеть изолирована, адресация 192.168.122.0/24.
Файловая система монтируется через протокол 9P (наследие Plan 9 от Bell Labs, Кена Томпсона и Роба Пайка). Но права доступа не настроены — пришлось разрешить на host костылём (touch grass). SSH agent forwarding включается через ssh -A. Проверить — ssh-add -l.
Автор остаётся доволен: virsh даёт всё, что нужно, без лишнего софта. Vagrant удалён (ну, почти — признаётся, что это ложь, он ещё на машине).