Вопрос или проблема
Я пытаюсь запустить x86 VM на Mac Silicon, используя QEMU, Libvirt и Vagrant.
Я установил QEMU через brew, а также libvirt:
brew install libvirt qemu
Когда я пытаюсь запустить VM через vagrant, я получаю следующую ошибку:
Error while connecting to Libvirt: Error making a connection to libvirt URI qemu:///system:
Call to virConnectOpen failed: Failed to connect socket to '/opt/homebrew/var/run/libvirt/virtqemud-sock': No such file or directory
Я проверил, что сервис libvirt работает как ожидалось:
brew services list
Name Status User File
libvirt started xxxx ~/Library/LaunchAgents/homebrew.mxcl.libvirt.plist
unbound none
В тех случаях, когда другие люди имели ту же проблему на других ОС, решение заключалось в том, чтобы запустить сервис libvirtd через systemctl, что не является вариантом для установки brew/mac.
Я также попытался добавить mode = “legacy” в оба файла /opt/homebrew/etc/libvirt/libvirtd.conf и /opt/homebrew/etc/libvirt/libvirt.conf, как указано в следующей документации: https://libvirt.org/uri.html#mode-parameter. Для уверенности я также попробовал прямую опцию. Я сомневаюсь, что изменение конфигурации было учтено.
Вот мой файл Vagrant, хотя, судя по аналогичным проблемам у других людей на разных архитектурах/ОС, Vagrant не является тут проблемой:
Vagrant.configure("2") do |config|
config.vm.box = "mybox"
config.vm.synced_folder ".", "/vagrant", type: "rsync"
config.vm.box_download_insecure = true
config.vm.provider "libvirt" do |libvirt|
libvirt.driver = "qemu"
libvirt.emulator_path = "/opt/homebrew/bin/qemu-system-x86_64"
libvirt.uri = "qemu:///system"
libvirt.memory = 2048
libvirt.cpus = 2
end
end
Я был бы очень признателен, если бы кто-то, использующий Mac с ARM чипом, успешно выполнил вышеуказанное и смог бы пролить свет на то, что я делаю неправильно. Спасибо.
Ответ или решение
Проблема, с которой вы столкнулись, связана с попыткой использования QEMU, Libvirt и Vagrant для запуска x86 VM на базе Mac с чипом ARM (Apple Silicon). Ошибка "No such file or directory" при попытке подключения к сокету ‘virtqemud-sock’ чаще всего говорит о проблемах конфигурации Libvirt. Разберём несколько возможных решений данной проблемы.
Актуальные шаги для решения проблемы
Убедитесь, что Libvirt правильно настроен и запущен
-
Запуск Libvirt и проверка сервисов:
- Выполните проверку статуса сервиса Libvirt с помощью
brew services
, убедитесь, что он запущен под правильной учетной записью пользователя. В вашем случае это видно из вывода командыbrew services list
.
- Выполните проверку статуса сервиса Libvirt с помощью
-
Перезапуск Libvirt:
- Попробуйте перезапустить Libvirt:
brew services restart libvirt
. Иногда перезапуск может помочь, особенно если изменения в конфигурации не были ранее применены.
- Попробуйте перезапустить Libvirt:
-
Трейс ошибок:
- Проверьте логи ошибок Libvirt, которые могут быть полезны для диагностики проблемы. Обычно они находятся в
/opt/homebrew/var/log/libvirt
.
- Проверьте логи ошибок Libvirt, которые могут быть полезны для диагностики проблемы. Обычно они находятся в
Проверьте правильность выполнения конфигурационных изменений
-
Config файлы Libvirt:
- Дважды проверьте изменения в файлах конфигурации
/opt/homebrew/etc/libvirt/libvirtd.conf
и/opt/homebrew/etc/libvirt/libvirt.conf
. Проверьте все изменения, особенно атрибутmode = "legacy"
. Убедитесь, что данное изменение сохраняется, не содержит ошибок синтаксиса и применяется при запуске.
- Дважды проверьте изменения в файлах конфигурации
-
Перепроверьте URI подключения:
- Убедитесь, что URI подключения, который вы используете
qemu:///system
в вашем Vagrant-файле, правильно настроен и доступен. Это можно сделать с помощью команды:virsh -c qemu:///system list
- Если команда выводит ошибки, проблема может быть в конфигурации URI или его доступности.
- Убедитесь, что URI подключения, который вы используете
Особенности работы с архитектурой ARM
-
Альтернативные решения на базе ARM:
- Рассмотрите возможность использования UTM или Multipass как альтернативных инструментов виртуализации на базе ARM, которые могут предложить лучшие результаты в специфической среде Apple Silicon.
-
Проверка на сторонние плагины:
- Иногда плагины Vagrant или дополнительное ПО могут создавать конфликты. Убедитесь, что все плагины обновлены и совместимы с ARM.
Рекомендации
Диагностика и поддержка: Рассмотрите возможность обращения в сообщество или на форумы, посвященные Libvirt и QEMU на Mac, чтобы получить помощь о лиц, которые уже сталкивались с подобными трудностями.
Последовательное тестирование: В процессе решения этой проблемы может потребоваться несколько попыток и последовательных изменений, каждый шаг должен тестироваться отдельно для понимания его воздействия на систему.
Используя данные рекомендации, вы сможете организовать успешный запуск виртуальной машины x86 на вашем Mac с чипом ARM. Ваш опыт с данными технологиями будет очень важным шагом в лучшем понимании виртуализации и запуска разных архитектур на ARM-чипах.