web-dev-qa-db-fra.com

Pilote vidéo sous conteneur LXC?

Puisque LXC (Conteneurs Linux) est un super chroot au niveau du noyau, je me demande quel type de pilote vidéo les conteneurs ont:

Mon hôte est buntu 12.04 Machine 64 bits avec ATI GPU. Le conteneur LXC aura-t-il accès au même pilote? Ou doivent-ils être installés sur chaque conteneur?

4
lurscher

Lisez ce script pour créer un conteneur LXC qui exécute Steam avec une accélération du son et de la vidéo:

http://Bazaar.launchpad.net/~ubuntu-lxc/lxc/Steam-lxc/view/head:/Steam-lxc

La magie vient ici:

En dehors de LXC:

    # Add the bind mounts to the container's fstab
    self.container.set_config_item("lxc.mount.entry",
                                   "/tmp/.X11-unix tmp/.X11-unix "
                                   "none bind,ro")
    self.container.set_config_item("lxc.mount.entry",
                                   "/dev/dri dev/dri none bind,ro")
    self.container.set_config_item("lxc.mount.entry",
                                   "%s/Pulse.socket home/%s/.Pulse_socket "
                                   "none bind,ro" % (self.config_path,
                                                     self.user.pw_name))

Nous exportons X11 avec une liaison. Montez le répertoire /tmp/.X11-unix afin d'autoriser le conteneur à utiliser l'hôte X11. Faites de même avec le répertoire /dev/dri et la prise audio.

À l'intérieur de LXC:

    # Get pulseaudio to listen on the socket
    with self.user_privileges():
        subprocess.call(['pactl', 'load-module',
                        'module-native-protocol-unix',
                        'socket=%s' % self.Pulse_socket,
                        'auth-cookie-enabled=0'])

    # Start Steam
    self.run_command(
        ["Steam"], {'DISPLAY': os.environ['DISPLAY'],
                    'Pulse_SERVER': "/home/%s/.Pulse_socket" %
                                    self.user.pw_name})

Utilise pactl pour utiliser un socket Unix afin de communiquer avec le serveur audio Host Pulse, puis pour exporter le socket et la variable d'environnement DISPLAY afin de permettre à Steam d'utiliser un serveur X11 local et un socket vers un serveur audio.

Jetez un coup d'œil au script et profitez-en :)

Avec ces variables d'environnement dans LXC, vous pouvez jouer (théoriquement) à presque tous les jeux.

Meilleures salutations!

4
OscarGarcia

Les technologies de "virtualisation" basées sur les conteneurs telles que OpenVZ et LXC ne virtualisent aucun matériel, contrairement à Xen, KVM, VMware, etc. Une autre différence majeure est que les conteneurs LXC/OpenVZ s'exécutent dans la même instance d'un seul noyau Linux, les vraies machines virtuelles utilisent leur propre noyau.

Comme les conteneurs se trouvent dans le même noyau et ne gèrent aucun matériel, ils "exécutent" le même pilote, mais ils n'ont aucune connaissance à ce sujet. Tous les processus sont simplement chrootés et ceci est complètement indépendant des pilotes matériels (modules du noyau).

0
gertvdijk