Bash

使用使用者 qemu 無法訪問的主目錄中的 iso 文件執行 virt-install 的干淨方式

  • July 23, 2021

我有一個自動創建和執行 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 才能擁有主機管理員訪問權限。

引用自:https://unix.stackexchange.com/questions/659370