Saya mencoba mengatur mesin Linux saya untuk menjalankan beberapa OS tamu, salah satunya adalah Windows VM, dan yang lain sebuah wadah Linux. Tujuannya di sini adalah untuk mencegah saya mengacaukan sistem host, sambil bebas mengoperasikan sistem operasi dasar dan bermain dengan perangkat keras host. Akhirnya, di atas menjalankan desktop saya di dalam wadah, saya berharap untuk menjalankan simulasi percepatan grafis, dll. Karena Docker memiliki versi yang mirip git seperti wadah bawaan, sepertinya ide yang bagus untuk menggunakannya. Mungkin libvirt akan sama baiknya dengan LXC, tetapi mode istimewa docker membuatnya lebih mudah untuk tidak harus mengkonfigurasi perangkat ke wadah.
Saya telah melakukan sedikit riset dan menghasilkan beberapa jawaban, tetapi saya kesulitan menyatukannya.
Latar belakang di LXC
Menjalankan X dari LXC membantu saya melihat bagaimana saya bisa mengkonfigurasi sebuah wadah dengan (yaitu):
lxc.cgroup.devices.allow = c 226:0 rwm
dan menggunakan
mknod -m 666 dri/card0 c 226 0
di dalam wadah untuk terhubung ke perangkat host.
Buruh pelabuhan
Dari cuda - Menggunakan GPU dari wadah buruh pelabuhan , saya melihat bahwa saya bisa mendapatkan pengaturan yang sama untuk bekerja di Docker dengan backend LXC.
Tampak bagi saya bahwa jika wadah buruh pelabuhan dijalankan dalam mode istimewa, maka ia dapat mengakses GPU secara normal tanpa konfigurasi tambahan ini. Jadi, saya menjalankan sistem basis, menginstal driver grafis, xorg-server, xorg-xinit, dan manajer jendela untuk mengujinya.
Percobaan pertama
# startx
Cannot run from a console (or some message like that)
Oke, saya pikir saya sudah tty2.
# tty
/dev/console
Bukan itu yang saya harapkan.
# chvt 2
# tty
/dev/tty2
Ya, sepertinya itu berhasil. Ayo coba # startx
lagi. Itu memulai manajer jendela, dengan kursor di tengah. Tidak ada respons mouse. Tidak ada respons keyboard. Mari kita coba ganti tty dengan Ctrl-Alt+F3
. Tidak ada respon. Yah, sepertinya saya harus reboot dingin.
Percobaan kedua
# tty
/dev/console
# chvt 2
# tty
/dev/console
Apa? Saya tidak bisa mengubahnya sekarang?
Lanjutan
Setelah mencoba lain kali, saya mengubahnya tty, dan startx membekukan komputer lagi.
Apa sekarang?
Jadi, saya sekarang di jalan buntu. Saya benar-benar ingin dapat menggunakan wadah - Docker lebih disukai, LXC dengan libvirt juga dapat diterima - untuk berjalan sebagai sistem operasi harian saya sambil menjaga OS lean host.
Apakah lebih baik menggunakan Docker dengan mode istimewa di sini, atau menggunakan backend LXC eksplisit dan mencoba opsi yang tercantum di atas?
Saya sudah berencana menggunakan libvirt (mungkin di bawah gelandangan-libvirt) untuk mengelola Windows vm saya, jadi apakah akan sama bagi saya untuk menggunakan libvirt atau vagrant-LXC dalam kasus ini?
Sunting: membaca LXC vs Docker , saya merasa bahwa karena wadah Docker dan Docker dimaksudkan untuk lingkungan aplikasi tunggal, mungkin sebaiknya menggunakan LXC daripada Docker untuk dijalankan sebagai sistem operasi harian saya. Pikiran?
Sunting: Saya telah menemukan bahwa, seperti buruh pelabuhan, ada perintah lxc-device yang memungkinkan saya untuk mem-bypass cgroup dan langkah mknod. Padahal sebelumnya saya bisa mendapatkan x untuk memulai dan membekukan sistem saya, itu hanya kesalahan sekarang. Mungkin akhirnya saya bisa memikirkannya, karena sepertinya tidak ada orang di luar sana.
Pembaruan: Mouse saya berfungsi. Pada tamu tersebut, saya menginstal xf86-input-mouse dan xf86-input-keyboard. Di tuan rumah, saya menjalankan yang berikut:
# 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
Bekerja!
startx
dengan exec twm
, tapi semuanya membeku dari perspektif saya. Tidak ada respons terhadap keyboard atau mouse.