使用使用者 qemu 無法訪問的主目錄中的 iso 文件執行 virt-install 的干淨方式
我有一個自動創建和執行 VM 的腳本。該腳本被許多人使用。您基本上呼叫該腳本,為它提供一些資訊,例如您想要通過哪些 PCI 或 USB 設備以及使用哪個 iso 來安裝作業系統,然後腳本
sudo qemu-system-x86_64
使用適當的參數執行。所以如果你把它分解,你現在可以這樣呼叫我的腳本:
./create-vm.sh /home/me/os-images/windows10.iso
這很好用。
但現在我想更進一步,使用
sudo virt-install ...
而不是,sudo qemu-system-x86_64 ...
這會導致重大問題,因為virt-install
它無法再訪問 iso 文件。qemu
大概是因為即使我用 sudo 執行它,它也會放棄它的 root 權限並使用使用者…所以現在我必須做出一個艱難的決定:
- 我將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
.
單獨的原因
chown qemu:qemu $ISO
不起作用是因為qemu
可能沒有 $HOME 的搜尋權限。virt-install 嘗試檢測這種情況並列印警告。virt-manager 將更進一步,提供嘗試和修復,大致
setfacl --modify user:qemu:x $DIR
用於通向 iso 的鏈中的每個目錄。再加上 libvirt chown’ing 和 selinux 自動標記文件(預設行為),應該足以讓 VM 啟動。是的,這種行為確實會產生不必要的副作用,但如果您希望 VM 以不同的非 root 使用者身份執行,則無法繞過它。也就是說,如果您想要一個完全屬於一個使用者的 VM,請查看 qemu:///session 與預設 qemu:///system libvirt URI 的比較。這是對差異的解釋。儘管在這種情況下您將無法訪問諸如 PCI 直通之類的東西,但這些東西需要 libvirtd 才能擁有主機管理員訪問權限。