ฉันพยายามตั้งค่าเครื่องลีนุกซ์ของฉันให้ใช้งานระบบปฏิบัติการ guest หลายระบบหนึ่งในนั้นคือ Windows VM และอีกหนึ่งคอนเทนเนอร์ Linux เป้าหมายที่นี่คือการป้องกันไม่ให้ฉันทำระบบโฮสต์ในขณะที่มีอิสระในการใช้งานระบบปฏิบัติการพื้นฐานและเล่นกับฮาร์ดแวร์โฮสต์ ในที่สุดบนรันเดสก์ท็อปของฉันในคอนเทนเนอร์ฉันหวังว่าจะเรียกใช้การจำลองด้วยกราฟิกเร่งความเร็ว ฯลฯ เนื่องจาก Docker มีเวอร์ชันในตัวที่คล้ายกับคอมไพล์เช่นคอมไพล์มันจึงเป็นความคิดที่ดีที่จะใช้มัน บางที libvirt อาจทำได้ดีเช่นเดียวกับ LXC แต่โหมดสิทธิพิเศษของนักเทียบท่าช่วยให้ไม่ต้องกำหนดค่าอุปกรณ์กับคอนเทนเนอร์
ฉันทำวิจัยเล็กน้อยและได้คำตอบสองสามข้อแล้ว แต่ฉันมีปัญหาในการรวมมันเข้าด้วยกัน
พื้นหลังใน LXC
การรัน X จาก LXCช่วยให้ฉันเห็นว่าฉันสามารถกำหนดค่าคอนเทนเนอร์ด้วย (เช่น) ได้อย่างไร:
lxc.cgroup.devices.allow = c 226:0 rwm
และการใช้
mknod -m 666 dri/card0 c 226 0
ภายในคอนเทนเนอร์เพื่อเชื่อมต่อกับอุปกรณ์โฮสต์
นักเทียบท่า
จากcuda - การใช้ GPU จากตู้เทียบท่าฉันเห็นว่าฉันสามารถตั้งค่าแบบเดียวกันให้ทำงานใน Docker ด้วยแบ็กเอนด์ LXC
ปรากฏว่าสำหรับฉันถ้าหากนักเทียบท่าทำงานในโหมดที่ได้รับสิทธิพิเศษมันสามารถเข้าถึง GPU ได้โดยไม่ต้องมีการกำหนดค่าเพิ่มเติม ดังนั้นฉันจึงใช้ระบบฐานติดตั้งไดรเวอร์กราฟิก, xorg-server, xorg-xinit และผู้จัดการหน้าต่างเพื่อทดสอบมัน
ครั้งแรกลอง
# startx
Cannot run from a console (or some message like that)
โอเคฉันคิดว่าฉันใช้ tty2
# tty
/dev/console
นั่นไม่ใช่สิ่งที่ฉันคาดไว้
# chvt 2
# tty
/dev/tty2
ดูเหมือนว่ามันจะใช้งานได้ดี ลอง# startx
อีกครั้ง มันเริ่มต้นตัวจัดการหน้าต่างโดยมีเคอร์เซอร์อยู่ตรงกลาง ไม่มีการตอบสนองของเมาส์ ไม่มีการตอบสนองของแป้นพิมพ์ ลองเปลี่ยน TTY Ctrl-Alt+F3
กับ ไม่มีการตอบสนอง ดูเหมือนฉันจะต้องรีบูตเครื่องเย็น
ลองครั้งที่สอง
# tty
/dev/console
# chvt 2
# tty
/dev/console
อะไร? ฉันเปลี่ยนมันไม่ได้เหรอ?
อย่างต่อเนื่อง
หลังจากลองอีกครั้งฉันจะเปลี่ยน tty แล้ว startx ก็แช่แข็งคอมพิวเตอร์อีกครั้ง
เกิดอะไรขึ้น
ดังนั้นตอนนี้ฉันอยู่ที่ทางตัน ฉันต้องการใช้คอนเทนเนอร์ - ซึ่งเป็นที่ต้องการของนักเทียบท่า LXC กับ libvirt ก็ยอมรับได้ - ให้ทำงานเป็นระบบปฏิบัติการรายวันของฉันในขณะที่รักษาระบบปฏิบัติการแบบโฮสต์แบบลีน
เป็นการดีที่สุดที่จะใช้ Docker ด้วยโหมดสิทธิพิเศษที่นี่หรือใช้แบ็กเอนด์ LXC ที่ชัดเจนและลองตัวเลือกที่ระบุไว้ด้านบน
ฉันวางแผนที่จะใช้ libvirt (อาจอยู่ภายใต้ vagrant-libvirt) เพื่อจัดการ Windows vm ของฉันดังนั้นฉันจะใช้ libvirt หรือ LXC คนจรจัดในกรณีนี้ได้หรือไม่
แก้ไข: การอ่านLXC กับ Dockerฉันรู้สึกว่าตั้งแต่ Docker และ Docker container นั้นมีความหมายสำหรับสภาพแวดล้อมของแอปพลิเคชันเดี่ยวบางทีมันจะเป็นการดีที่สุดถ้าใช้ LXC แทนที่จะเป็น Docker เพื่อใช้เป็นระบบปฏิบัติการประจำวันของฉัน คิด?
แก้ไข: ฉันค้นพบแล้วว่าเช่นเดียวกับนักเทียบท่ามีคำสั่ง lxc-device ซึ่งอนุญาตให้ฉันข้ามขั้นตอน cgroups และ mknod ได้ ในขณะที่ก่อนที่ฉันจะได้รับ x เพื่อเริ่มและหยุดการทำงานของระบบมันเป็นข้อผิดพลาดในตอนนี้ บางทีฉันอาจจะสามารถเข้าใจสิ่งนี้ได้ในที่สุดเนื่องจากดูเหมือนว่าไม่มีใครอยู่ข้างนอก
อัปเดต: ฉันใช้เมาส์ทำงาน สำหรับแขกฉันติดตั้ง xf86-input-mouse และ xf86-input-keyboard บนโฮสต์ฉันทำสิ่งต่อไปนี้:
# lxc-device -n g1 add /dev/input/mice
# lxc-device -n g1 add /dev/dri/card0
# lxc-device -n g1 add /dev/dri/controlD64
# lxc-device -n g1 add /dev/dri/renderD128
# lxc-device -n g1 add /dev/fb0
# lxc-device -n g1 add /dev/tty2
Works!
startx
ด้วยexec twm
แต่สิ่งทั้งหมดนั้นแข็งจากมุมมองของฉัน ไม่มีการตอบสนองต่อแป้นพิมพ์หรือเมาส์