가상 머신을 자동으로 생성하고 실행하는 스크립트가 있습니다. 많은 사람들이 이 스크립트를 사용하고 있습니다. 이 스크립트를 호출하고 운영 체제를 설치할 PCI 또는 USB 장치, ISO 및 스크립트가 sudo qemu-system-x86_64
적절한 매개변수로 실행될 것인지와 같은 일부 정보를 제공하기만 하면 됩니다.
따라서 분석하면 이제 다음과 같이 내 스크립트를 호출할 수 있습니다.
./create-vm.sh /home/me/os-images/windows10.iso
이것은 훌륭하게 작동합니다.
sudo virt-install ...
하지만 이제는 한 단계 더 나아가서 대신 를 사용하고 싶습니다 . 그러면 더 이상 iso 파일에 액세스할 수 없기 sudo qemu-system-x86_64 ...
때문에 큰 문제가 발생합니다 . 아마 sudo로 실행해도 루트권한을 포기하고 user를 이용해서 virt-install
그런거 같은데 ...qemu
이제 저는 어려운 결정을 내려야 합니다.
- 나는인가?이동하다iso 파일을
/var/lib/libvirt/images
? (아니요. 사용자가 파일이 현재 위치한 정확한 위치에 있어야 할 수도 있기 때문입니다.) - 나는인가?복사ISO를
/var/lib/libvirt/images
? (아니요. 사용자의 디스크 공간이 부족할 수 있으므로 리소스 낭비처럼 보입니다.) - 설정할까요
user = root
, 아니면user = me
들어갈까요/etc/libvirt/qemu.conf
? (아니요, 이는 전역 설정이고 사용자가 수행하는 다른 qemu 작업을 방해할 수 있기 때문입니다. - 시도해 보았지만libvirtd.service
충돌이 발생합니다.) - iso 파일의 그룹을 qemu 사용자에게 추가하시겠습니까? (아니요, 원치 않는 부작용이 있을 수 있으므로 사용자가 원하지 않을 때 qemu에 더 많은 액세스 권한을 부여할 수 있습니다. - 그래도 시도했지만 작동하지 않습니다. 아마도 일부 SElinux 마법이 이를 방지하는 것 같습니다. .)
- iso 파일의 소유자를 으로 변경하시겠습니까
qemu
? (아니요, 원치 않는 부작용이 있을 수 있기 때문입니다. - 게다가 시도할 때 여전히 권한 거부 오류가 발생합니다. 아마도 SElinux 때문일 것입니다.) - iso를 마운트하고 qemu 사용자가 마운트 지점을 사용할 수 있도록 하시겠습니까? (아니요. iso 파일은 매우 복잡할 수 있고 일부 데이터는 마운트 지점에서 사용할 수 없기 때문입니다.)
- iso가 포함된 폴더를 마운트하시겠습니까? (아니요. iso 파일에는 여전히 동일한 소유자/그룹이 있기 때문입니다.)
좋은 해결책을 찾지 못하는 것 같습니다. 이제 어떻게 해야 할까요? 정말 virt-install
좀 필요해요 qemu-system-x86_64
.
참고: 실제로 iso 이미지뿐만 아니라 플로피 이미지, 드라이버가 포함된 다른 iso 파일 및 ACPI 테이블 파일도 있습니다. 이 모든 파일에 대해 권한 오류가 발생합니다 virt-install
.
답변1
chown qemu:qemu $ISO
이것이 작동하지 않는 유일한 이유 는 qemu
$HOME에 대한 검색 권한이 없기 때문입니다.
virt-install은 이 상황을 감지하려고 시도하고 경고를 인쇄합니다. virt-manager는 한 단계 더 나아가 setfacl --modify user:qemu:x $DIR
iso로 이어지는 체인의 대략 모든 디렉터리를 사용하여 시도와 수정 사항을 제공합니다. libvirt chown'ing 및 selinux 자동 표시 파일(기본 동작)과 함께 VM을 시작하는 데 충분해야 합니다. 예, 이 동작에는 원치 않는 부작용이 있지만 루트가 아닌 다른 사용자로 가상 머신을 실행하려는 경우 이를 해결할 수 있는 방법이 없습니다.
즉, 한 명의 사용자에게 전적으로 속하는 가상 머신을 원한다면 기본 qemu:///system libvirt URI와 비교하여 qemu:///session을 살펴보세요.차이점에 대한 설명은 다음과 같습니다.. 이 경우에는 libvirtd에 호스트 관리 액세스 권한이 필요한 PCI 패스스루와 같은 항목에 액세스할 수 없습니다.