web-dev-qa-db-ja.com

lxcコンテナの下のビデオドライバ?

LXC(Linux Containers)はカーネルレベルのスーパーchrootであるため、コンテナーにはどのような種類のビデオドライバーがあるのか​​と思っていました。

私のホストはbuntu 12.04 ATI gpuを備えた64ビットマシンです。 LXCコンテナーは同じドライバーにアクセスできますか?または、各コンテナにインストールする必要がありますか?

4
lurscher

このスクリプトを見て、Steamをサウンドおよびビデオアクセラレーションで実行するLXCコンテナーを作成してください:

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

ここに魔法があります:

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))

コンテナがホストX11を使用できるように、/tmp/.X11-unixディレクトリをバインドマウントしてX11をエクスポートします。 /dev/driディレクトリとオーディオソケットでも同じことを行います。

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})

pactlを使用してUNIXソケットを使用してホストパルスオーディオサーバーと通信し、後でソケットとDISPLAY環境変数をエクスポートして、SteamがローカルX11サーバーとソケットをオーディオサーバーに使用できるようにします。

スクリプトを見て、楽しんでください:)

LXC内のその環境変数を使用すると、(理論的には)ほとんどすべてのゲームをプレイできます。

宜しくお願いします!

4
OscarGarcia

OpenVZやLXCなどのコンテナーベースの「仮想化」テクノロジーは、Xen、KVM、VMwareなどとは異なり、ハードウェアを仮想化しません。別の大きな違いは、LXC/OpenVZコンテナーが単一のLinuxカーネルの同じインスタンスで実行されることです実際の仮想マシンは独自のカーネルを実行しています。

コンテナは同じカーネル内にあり、ハードウェアを管理しないため、同じドライバを「実行」していますが、それについての知識はありません。すべてのプロセスは単純にchrootされ、これはハードウェアドライバー(カーネルモジュール)から完全に独立しています。

0
gertvdijk