Вопрос или проблема
Мой контекст:
- Я разработчик, работающий над проектом, который нужно запускать на отдельной системе (виртуальная машина подойдет очень хорошо),
- Я хочу использовать
libvirt
, чтобы создать эти отдельные виртуальные машины, и при этом иметь доступ к графическому интерфейсу virt-manager для изучения/отладки настройки виртуальных машин, - Моя задача — создать временные виртуальные машины на моем локальном рабочем месте, где я буду единственным пользователем, взаимодействующим с libvirt,
- Я хочу написать сценарии для провизионирования и запуска некоторых временных виртуальных машин из кода моего локального рабочего места (часть этого кода генерирует образы дисков, такие как .iso или .qcow2 файлы)
Моя проблема заключается в том, что:
когда я создаю виртуальную машину через скрипт и использую локальный образ (например: .iso
или .qcow2
файл), libvirt портит права файла: по умолчанию он изменяет владельца:группу на libvirt-qemu:kvm
, а права доступа на -rw-r--r--
.
Я знаю способ предотвратить это:
если я объявлю пул хранения в директории — и позабочусь о том, чтобы установить владельца:группу данного пула на свои собственные uid:gid
— и также объявлю объем для целевого файла — и снова: и объявлю, что этот объем должен иметь мой uid:gid
— то я все равно могу получить доступ к файлам объемов (например: ls
, или rm
устаревшие объемы …).
Однако это неудобно, что приходится определять объем каждый раз.
Я, безусловно, понимаю, что libvirt направлен на предоставление функций для управления доступом к виртуальным машинам в производственном контексте, однако в моем случае (разработчик / тестирование временных виртуальных машин) это мешает.
Мой вопрос:
существует ли способ сказать libvirt “оставьте права доступа к этим образам такими, какие они есть”?
либо глобально/по директории/при создании виртуальной машины?
Ответ или решение
Использование libvirt для локальных образов: сохранение прав доступа
Введение
Как разработчик, вам необходимо запускать тестовые виртуальные машины (VM) на вашем локальном компьютере с использованием libvirt и virt-manager. При этом вы столкнулись с проблемой изменения прав доступа к локальным образам, таким как .iso или .qcow2, создаваемым вашим скриптом. В данной статье мы рассмотрим, как можно сохранить права доступа к вашим образом, избегая проблем с доступом и обеспечивая удобство работы.
Проблема
По умолчанию при создании виртуальных машин через libvirt, права на локальные файлы меняются, перемещая владельца и группу на libvirt-qemu:kvm
, а также устанавливая права доступа на -rw-r--r--
. Это может затруднить ваши действия, такие как просмотр или удаление устаревших образов, поскольку теперь вы не имеете прав на управление этими файлами.
Возможное решение
Вы уже на правильном пути, используя хранилище и определяя объемы в libvirt. Однако, этот процесс может быть утомительным, особенно если вы создаёте множество временных виртуальных машин. Тем не менее, в libvirt нет прямого механизма, который позволяет бы сохранить исходные права доступа к образам. Вместо этого, следует рассмотреть несколько альтернативных подходов.
-
Использование хранилища:
Создайте хранилище libvirt, где ваше хранилище будет указывать на папки, в которых вы будете хранить свои образы. Убедитесь, что вы задаете правильные права доступа на уровень хранилища, а также устанавливаете владельца и группу на вашuid:gid
:virsh pool-define-as mypool dir --target /path/to/storage virsh pool-start mypool virsh pool-autostart mypool
Затем создайте тома на основе этого хранилища:
virsh vol-create-as mypool myvolume.qcow2 10G --format qcow2 --perm 0770
-
Автоматизация через скриптирование:
Если вы хотите избежать многократного определения томов, можно создать скрипт, который автоматически создает нужные объемы и устанавливает права. Этот скрипт можно вызывать каждый раз, когда вы создаёте новую виртуальную машину. Пример простого скрипта может выглядеть так:#!/bin/bash IMAGE_NAME=$1 IMAGE_SIZE=$2 virsh vol-create-as mypool $IMAGE_NAME $IMAGE_SIZE --format qcow2 --perm 0770
-
Изменение конфигурации libvirt:
К сожалению, возможности глобально изменить права доступа не существует, однако вы можете рассмотреть возможность внесения изменений в конфигурацию libvirt. Например, конфигурационные файлы libvirt могут быть настроены для настройки владельца образов на основе определённых условий. Это потребует изменений на уровне кода libvirt, что менее практично для вашей задачи. -
Использование Docker или Podman:
Если ваше тестирование заключается в работе с образами, вам может подойти использование контейнеризации. Docker или Podman могут предложить более гибкий способ управления приложениями и их зависимостями. Они позволяют работать с образами без необходимости постоянно регулировать права доступа файловой системы.
Заключение
Работа с libvirt в локальном окружении может быть неудобной из-за системы управления правами доступа, но с помощью вышеописанных методов вы сможете минимизировать потребность в ручном управлении хранилищами и правами на образы. Рекомендуется придерживаться подхода с определением хранилища и автоматизацией процессов через скрипты, что позволит сосредоточиться на разработке и тестировании без лишних отвлечений.