Linux - LXC; implantar imagens com o menor X11 possível

18

é atualmente possível configurar contêineres LXC com recursos do X11? Estou ansioso pelo mais leve contêiner X11 disponível (memória-sábio), aceleração de hardware um plus, mas não essencial.

Se atualmente não é possível, ou está prontamente disponível, é conhecido que funcionalidade ainda precisa ser implementada para suportá-lo?

    
por lurscher 03.08.2011 / 21:09

2 respostas

16

sim, é possível executar um ambiente de área de trabalho X11 completo dentro de um contêiner LXC.

Agora, faço isso no Arch Linux. Eu não vou dizer que é "leve", já que não fui tão longe quanto tentar remover coisas da instalação padrão do gerenciador de pacotes, mas posso confirmar que ele funciona muito bem.

Você precisa instalar qualquer driver de kernel no HOST, assim como no container. Coisas como o driver de gráficos (eu uso nvidia). Você precisa tornar os nós do dispositivo em dev acessíveis dentro do contêiner, configurando seu container.conf para permitir isso. Em seguida, você precisa se certificar de que esses nós de dispositivo sejam criados dentro do contêiner (por exemplo, mknod).

Então, para responder a sua pergunta: sim, funciona. Se eu puder ajudar mais ou fornecer mais detalhes, por favor me avise.

--- informações adicionais fornecidas ---

No meu contêiner ... / etc / inittab começa no nível 5 e lança "slim" Slim está configurado para usar vt09:

 # Path, X server and arguments (if needed)
 # Note: -xauth $authfile is automatically appended
 default_path        /bin:/usr/bin:/usr/local/bin
 default_xserver     /usr/bin/X
 xserver_arguments   -nolisten tcp vt09

Eu não estou usando um segundo display X no meu vt atual, mas um outro completamente diferente (eu posso alternar entre muitos de thise usando CTRL + ALT + Fn).

Se você não estiver usando slim, você pode usar uma construção como esta para iniciar o X em outro vt:

 /usr/bin/startx -- :10 vt10

Isso iniciará o X no display: 10 e o colocará em vt10 (CTRL + ALT + F10). Isso não precisa ser igual, mas acho que é melhor se o fizerem.

Você precisa da configuração do seu contêiner para disponibilizar os dispositivos relevantes, assim:

 # XOrg Desktop
 lxc.cgroup.devices.allow = c 4:10 rwm    # /dev/tty10 X Desktop
 lxc.cgroup.devices.allow = c 195:* rwm  # /dev/nvidia Graphics card
 lxc.cgroup.devices.allow = c 13:* rwm   # /dev/input/* input devices

E você precisa criar os dispositivos no seu contêiner:

 # display vt device
 mknod -m 666 /dev/tty10 c 4 10

 # NVIDIA graphics card devices
 mknod -m 666 /dev/nvidia0 c 195 0
 mknod -m 666 /dev/nvidiactl c 195 255

 # input devices
 mkdir  /dev/input           # input devices
 chmod 755 /dev/input
 mknod -m 666 /dev/input/mice c 13 63 # mice

Eu também configurei dispositivos de entrada manualmente (já que não temos udev recipiente)

 Section "ServerFlags"
         Option "AutoAddDevices" "False"
 EndSection

 Section "ServerLayout"
     Identifier     "Desktop"
     InputDevice    "Mouse0" "CorePointer"
     InputDevice    "Keyboard0" "CoreKeyboard"
 EndSection

 Section "InputDevice"
     Identifier "Keyboard0"
     Driver "kbd"
     Option "XkbLayout" "gb"
 EndSection

 Section "InputDevice"
     Identifier "Mouse0"
     Driver "mouse"
     Option "Protocol" "auto"
     Option "Device" "/dev/input/mice"
     Option "ZAxisMapping" "4 5 6 7"
 EndSection

O exemplo acima vai em um arquivo /etc/X11/xorg.conf.d/10-input.conf

Não tenho certeza se isso ajudará, mas boa sorte!

    
por 28.09.2011 / 14:50
2

Sim, você pode fazer isso. Você também pode usar lxc.mount.entry para não ter que executar o script de inicialização dentro do contêiner com todos os comandos mknod . Portanto, a configuração do contêiner lxc deve conter algo assim:

lxc.cgroup.devices.allow = c 4:7 rwm
lxc.mount.entry = /dev/tty7 dev/tty7 none bind,optional,create=file
lxc.cgroup.devices.allow = c 4:8 rwm
lxc.mount.entry = /dev/tty8 dev/tty8 none bind,optional,create=file
lxc.cgroup.devices.allow = c 10:63 rwm
lxc.mount.entry = /dev/vga_arbiter dev/vga_arbiter none bind,optional,create=file
lxc.cgroup.devices.allow = c 13:* rwm
lxc.mount.entry = /dev/input dev/input none bind,optional,create=dir
lxc.cgroup.devices.allow = c 29:0 rwm
lxc.mount.entry = /dev/fb0 dev/fb0 none bind,optional,create=file
# /dev/dri/card0 AMD Graphics card
lxc.cgroup.devices.allow = c 226:0 rwm 
lxc.cgroup.devices.allow = c 226:64 rwm
lxc.cgroup.devices.allow = c 226:128 rwm
lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir
#lxc.cgroup.devices.allow = c 195:* rwm  # /dev/nvidia Graphics card
#lxc.mount.entry = /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
#lxc.mount.entry = /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
#lxc.cgroup.devices.allow = c 116:* rwm
#lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir

Para configurar dispositivos de entrada para o X, você pode usar evdev , o que é especialmente útil se você não puder usar o driver xf86-input-keyboard . Como o número exato de event* entradas no arquivo de configuração (por exemplo, /usr/share/X11/xorg.conf.d/10-lxc-input.conf ) dependerá do que está no / dev / input do seu contêiner, você pode usar um script para gerar um:

#!/bin/bash
cat >/usr/share/X11/xorg.conf.d/10-lxc-input.conf << _EOF_
Section "ServerFlags"
     Option "AutoAddDevices" "False"
EndSection
_EOF_

cd /dev/input
for input in event*
do
cat >> /usr/share/X11/xorg.conf.d/10-lxc-input.conf <<_EOF_
Section "InputDevice"
    Identifier "$input"
    Option "Device" "/dev/input/$input"
    Option "AutoServerLayout" "true"
    Driver "evdev"
EndSection
_EOF_
done

Isso deve ser suficiente para o X funcionar:

/usr/bin/startx -- :0 vt07

Você também pode ativar o áudio, passando / dev / snd ou configurando o pulseaudio via tcp ou um soquete.

    
por 02.02.2017 / 14:31