J'essaie de configurer ma machine Linux pour exécuter plusieurs systèmes d'exploitation invités, l'un d'entre eux étant une machine virtuelle Windows et un autre un conteneur Linux. Le but ici est de m'empêcher de gâcher le système hôte, tout en étant libre d'utiliser le système d'exploitation de base et de jouer avec le matériel hôte. Finalement, en plus d'exécuter mon bureau dans le conteneur, j'espère pouvoir exécuter des simulations accélérées par les graphiques, etc. Puisque Docker a une version géniale des conteneurs intégrée, cela semblait être une bonne idée de l'utiliser. Libvirt ferait peut-être tout aussi bien avec LXC, mais le mode privilégié de Docker facilite la configuration des périphériques dans le conteneur.
J'ai fait quelques recherches et trouvé déjà quelques réponses, mais j'ai du mal à tout rassembler.
Contexte dans LXC
L'exécution de X à partir de LXC m'a aidé à voir comment je peux configurer un conteneur avec (ie):
lxc.cgroup.devices.allow = c 226:0 rwm
et en utilisant
mknod -m 666 dri/card0 c 226 0
à l'intérieur du conteneur pour se connecter au périphérique hôte.
Docker
De cuda - Utilisation du GPU à partir d'un conteneur Docker Docker, j'ai vu que je peux obtenir la même configuration pour fonctionner dans Docker avec le backend LXC.
Il m'est apparu que si un conteneur Docker est exécuté en mode privilégié, il peut accéder au GPU normalement sans cette configuration supplémentaire. J'ai donc lancé un système de base, installé des pilotes graphiques, xorg-server, xorg-xinit et un gestionnaire de fenêtres pour le tester.
Premier essai
# startx
Cannot run from a console (or some message like that)
D'accord, je pensais que j'étais sur tty2.
# tty
/dev/console
Ce n'est pas ce à quoi je m'attendais.
# chvt 2
# tty
/dev/tty2
Eh bien, il semble que cela ait fonctionné. Essayons # startx
encore. Il a démarré le gestionnaire de fenêtres, avec le curseur au centre. Pas de réponse de la souris. Aucune réponse du clavier. Essayons de changer le tty avecCtrl-Alt+F3
. Pas de réponse. Eh bien, il semble que je devrai redémarrer à froid.
Deuxième essai
# tty
/dev/console
# chvt 2
# tty
/dev/console
Quelle? Je ne peux pas le changer maintenant?
A continué
Après avoir essayé une autre fois, je l'ai changé de tty et startx a de nouveau gelé l'ordinateur.
Et maintenant?
Donc, je suis maintenant dans une impasse. Je veux vraiment pouvoir utiliser un conteneur - Docker préféré, LXC avec libvirt est également acceptable - pour fonctionner comme mon système d'exploitation quotidien tout en conservant un OS hôte léger.
Est-il préférable d'utiliser Docker avec le mode privilégié ici, ou d'utiliser le backend LXC explicite et d'essayer les options répertoriées ci-dessus?
Je prévois déjà d'utiliser libvirt (peut-être sous vagrant-libvirt) pour gérer mon Windows vm, serait-il donc à peu près la même chose pour moi d'utiliser libvirt ou vagrant-LXC dans ce cas?
Edit: lecture de LXC vs. Docker , j'ai l'impression que puisque les conteneurs Docker et Docker sont destinés aux environnements à application unique, il serait peut-être préférable d'utiliser LXC au lieu de Docker pour fonctionner comme mon système d'exploitation quotidien. Pensées?
Edit: J'ai découvert que, comme docker, il existe une commande lxc-device qui me permet de contourner les étapes cgroups et mknod. Alors qu'avant j'ai pu obtenir x pour démarrer et geler mon système, il n'y a plus d'erreur maintenant. Peut-être pourrais-je éventuellement comprendre cela, car personne ne semble être là-bas.
Mise à jour: j'ai la souris qui fonctionne. Sur l'invité, j'ai installé xf86-input-mouse et xf86-input-keyboard. Sur l'hôte, j'ai exécuté ce qui suit:
# 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
Travaux!
startx
avec exec twm
, mais le tout était figé de mon point de vue. Aucune réponse au clavier ou à la souris.