Ich versuche, meinen Linux-Computer so einzurichten, dass mehrere Gastbetriebssysteme ausgeführt werden, von denen eines eine Windows-VM und eines ein Linux-Container ist. Das Ziel hier ist es, zu verhindern, dass ich das Host-System durcheinander bringe, während ich das Basis-Betriebssystem bedienen und mit der Host-Hardware spielen kann. Zusätzlich zum Ausführen meines Desktops im Container hoffe ich, grafikbeschleunigte Simulationen usw. ausführen zu können. Da Docker über eine so nette git-ähnliche Versionierung von Containern verfügt, schien es eine gute Idee zu sein, diese zu verwenden. Vielleicht würde libvirt mit LXC genauso gut funktionieren, aber der privilegierte Modus von Docker macht es einfacher, keine Geräte für den Container konfigurieren zu müssen.
Ich habe ein wenig recherchiert und bereits ein paar Antworten gefunden, aber ich habe Probleme, alles zusammenzusetzen.
Hintergrund in LXC
Durch Ausführen von X von LXC konnte ich sehen, wie ich einen Container mit (dh) konfigurieren kann:
lxc.cgroup.devices.allow = c 226:0 rwm
und mit
mknod -m 666 dri/card0 c 226 0
innerhalb des Containers, um eine Verbindung zum Host-Gerät herzustellen.
Docker
Von cuda - Mit der GPU aus einem Docker-Container habe ich gesehen, dass ich das gleiche Setup für Docker mit dem LXC-Backend erhalten kann.
Mir schien, wenn ein Docker-Container im privilegierten Modus ausgeführt wird, kann er ohne diese zusätzliche Konfiguration normal auf die GPU zugreifen. Also habe ich ein Basissystem gestartet, Grafiktreiber, xorg-server, xorg-xinit und einen Fenstermanager installiert, um es zu testen.
Erster Versuch
# startx
Cannot run from a console (or some message like that)
Okay, ich dachte ich wäre auf tty2.
# tty
/dev/console
Das habe ich nicht erwartet.
# chvt 2
# tty
/dev/tty2
Nun, es scheint, als ob das funktioniert hat. Versuchen wir es noch # startx
einmal. Es startete den Fenstermanager mit dem Cursor in der Mitte. Keine Mausantwort. Keine Tastaturantwort. Versuchen wir, das tty mit zu ändern Ctrl-Alt+F3
. Keine Antwort. Nun, es sieht so aus, als müsste ich kalt neu starten.
Zweiter Versuch
# tty
/dev/console
# chvt 2
# tty
/dev/console
Was? Ich kann es jetzt nicht ändern?
Fortsetzung
Nachdem ich es ein anderes Mal versucht hatte, ließ ich es tty ändern und startx fror den Computer erneut ein.
Was jetzt?
Also bin ich jetzt in einer Sackgasse. Ich möchte wirklich in der Lage sein, einen Container zu verwenden - Docker bevorzugt, LXC mit libvirt ist ebenfalls akzeptabel -, um als mein tägliches Betriebssystem ausgeführt zu werden und gleichzeitig ein schlankes Host-Betriebssystem beizubehalten.
Ist es am besten, Docker hier im privilegierten Modus zu verwenden oder das explizite LXC-Backend zu verwenden und die oben aufgeführten Optionen auszuprobieren?
Ich plane bereits, libvirt (möglicherweise unter vagrant-libvirt) zum Verwalten meiner Windows-VM zu verwenden. Wäre es in diesem Fall für mich ungefähr dasselbe, libvirt oder vagrant-LXC zu verwenden?
Bearbeiten: Beim Lesen von LXC vs. Docker habe ich das Gefühl, dass Docker- und Docker-Container für Umgebungen mit nur einer Anwendung gedacht sind. Daher ist es möglicherweise am besten, LXC anstelle von Docker als tägliches Betriebssystem zu verwenden. Gedanken?
Bearbeiten: Ich habe festgestellt, dass es wie bei Docker einen Befehl lxc-device gibt, mit dem ich die Schritte cgroups und mknod umgehen kann. Während ich x dazu bringen konnte, mein System zu starten und einzufrieren, ist es jetzt nur ein Fehler. Vielleicht kann ich das irgendwann herausfinden, da niemand da draußen zu sein scheint.
Update: Ich habe die Maus funktioniert. Auf dem Gast habe ich xf86-Eingabemaus und xf86-Eingabetastatur installiert. Auf dem Host habe ich Folgendes ausgeführt:
# 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
Funktioniert!
startx
mitexec twm
, aber das Ganze war aus meiner Sicht eingefroren. Keine Antwort auf Tastatur oder Maus.Antworten:
Diese Frage hatte die Antwort, die ich brauchte. Natürlich habe ich
lxc-device
anstelle von cgroup-Definitionen in der Konfigurationsdatei verwendet. In meinem Fall habe ich die Tastatur jedoch nur dann in X zum Laufen gebracht, wenn ich sie auf einem anderen tty starte.quelle