Linux - LXC; distribuzione di immagini con il più piccolo possibile X11


19

è attualmente possibile installare container LXC con funzionalità X11? Non vedo l'ora che arrivi il contenitore X11 più leggero disponibile (per quanto riguarda la memoria), l'accelerazione hardware un vantaggio ma non essenziale.

Se al momento non è possibile, o prontamente disponibile, è noto quale funzionalità deve essere ancora implementata per supportarla?

Risposte:


15

Sì, è possibile eseguire un ambiente desktop X11 completo all'interno di un contenitore LXC.

In questo momento, lo faccio su Arch Linux. Non dirò che è "leggero" in quanto non sono arrivato al punto di provare a rimuovere le cose dall'installazione del gestore pacchetti standard, ma posso confermare che funziona molto bene.

Devi installare tutti i driver del kernel sull'HOST e nel container. Cose come il driver grafico (io uso nvidia). Devi rendere accessibili i nodi del dispositivo in sviluppo all'interno del contenitore configurando container.conf per consentirlo. È quindi necessario assicurarsi che quei nodi del dispositivo siano creati all'interno del contenitore (ad es. Mknod).

Quindi, per rispondere alla tua domanda: SÌ funziona. Se posso aiutare ulteriormente o fornire maggiori dettagli, per favore fatemelo sapere.

--- ulteriori informazioni fornite ---

Nel mio contenitore ... / etc / inittab inizia nel livello di esecuzione 5 e avvia "slim" Slim è configurato per utilizzare 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

Non sto usando un secondo display X sul mio attuale VT, ma uno completamente diverso (posso passare da molti di questi usando CTRL + ALT + Fn).

Se non stai usando slim, puoi usare un costrutto come questo per avviare X su un altro vt:

 /usr/bin/startx -- :10 vt10

Questo avvierà X sul display: 10 e lo metterà su vt10 (CTRL + ALT + F10). Questi non hanno bisogno di eguagliarsi, ma penso che sia più ordinato se lo fanno.

È necessaria la configurazione del contenitore per rendere disponibili i dispositivi pertinenti, in questo modo:

 # 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 devi creare i dispositivi nel tuo contenitore:

 # 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

Ho anche configurato manualmente i dispositivi di input (poiché non abbiamo udev nel contenitore)

 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

Quanto sopra sta andando in un file /etc/X11/xorg.conf.d/10-input.conf

Non sono sicuro se qualcuno di questi aiuterà, ma buona fortuna!


Non sono riuscito a farlo funzionare con nouveau o con nouveau + vesa. Qualche indizio? Devo usare il driver proprietario?
Robin Green

Sto usando il driver proprietario. Non ho provato nient'altro. Sei su ArchLinux? Ho installato xorg-xserver e nvidia sull'HOST e anche all'interno del contenitore. Posso quindi installare, diciamo, xterm e twm all'interno del contenitore per testarlo. Il mio desktop di tutti i giorni è configurato attorno a OpenBox e risiede in un contenitore.
Starfry,

Sono su Fedora. Come lo testate? Quello che ho provato è stato eseguire un server X all'interno del contenitore sullo schermo: 1, che ha fallito in modo spettacolare (l'host X è morto).
Robin Green

Robin, ho aggiornato la risposta originale con maggiori dettagli per te.
Starfry

2

Si, puoi farlo. Puoi anche usarlo in lxc.mount.entrymodo da non dover eseguire lo script di inizializzazione all'interno del contenitore con tutti i mknodcomandi. Quindi la configurazione del contenitore lxc dovrebbe contenere qualcosa del genere:

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

Per configurare i dispositivi di input per X, è possibile utilizzare evdev, il che è particolarmente utile se non è possibile utilizzare il xf86-input-keyboarddriver. Poiché il numero esatto di event*voci nel file di configurazione (ad es. /usr/share/X11/xorg.conf.d/10-lxc-input.conf) Dipenderà da ciò che si trova nel / container / input / del proprio contenitore, è possibile utilizzare uno script per generarne uno:

#!/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

Questo dovrebbe essere sufficiente per far funzionare X:

/usr/bin/startx -- :0 vt07

Puoi anche abilitare l'audio, passando / dev / snd, o impostando pulseaudio tramite tcp o un socket.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.