Linux Containers - TecPorto
3 Aprovisionamento
3.1 Criação de uma storage pool
3.1.1 Como directório
3.2 Exportar um dispositivo para ser usado pelo container
3.2.1 Exportar uma webcam
3.3 Executar aplicações gráficas (X11)
LXC ou Linux Containers é uma funcionalidade disponível em várias distribuições, e que pode ser adicionada manualmente a outras. É baseada em funcionalidades do kernel do Linux tais como CGROUPS e Namespaces, fornecendo ambientes isolados parecidos com chroot, mas mais avançados. É um meio termo entre uma máquina virtual e um chroot.
Para instalar, basta executar os seguintes comandos:
sudo pacman -S lxc
sudo pacman -S lxd
A configuração default de containers em Manjaro precisa de uns ajustes adicionais. Primeiro é necessário activar o bit setuid nos comandos /usr/bin/newuidmap e /usr/bin/newgidmap:
sudo chmod 4755 /usr/bin/new?idmap
Depois é necessário editar os ficheiros de configuração dos mapeamentos (e criá-los se não existirem) de modo a que as seguintes linhas existam neles (substituindo as existentes se forem mais restritivas:
/etc/subuid e /etc/subgid:
Alternativamente, em vez de se editar estes ficheiros, o mesmo pode ser conseguido usando o comando usermod com as opções --add-subuids e --add-subgids.
Para instalar basta executar o seguinte comando:
sudo apt install lxc lxd
Nota: A partir do Ubuntu 20.04 inclusive, ao tentar-se instalar o LXD via apt, o que vai acontecer é o apt instalar o snap (se já tiver sido removido) e instalar o lxd a partir do snap. Ew.
Para iniciar, é preciso, primeiro, correr o comando lxd init, respondendo às perguntas apresentadas.
Criação de uma storage pool
Como directório
Para criar uma storage pool como directório, deverá usar-se o seguinte comando:
lxc storage create <nome_da_pool> dir source=<caminho>
Neste comando deverá substituir <nome_da_pool> e <caminho> pelo nome que pretende dar à pool e o caminho onde a pretende criar, respectivamente. Por exemplo:
lxc storage create pool1 dir source=/home/containers
Exportar um dispositivo para ser usado pelo container
Exportar uma webcam
Exportar uma webcam é fácil. As webcams, quando devidamente detectadas, são apresentadas como ficheiros no devfs (em /dev). Neste caso, serão os dispositivos /dev/video* em que o * seria substituído por um número. Por exemplo, a primeira seria apresentada como /dev/video0
Para adicionar a webcam ao container, usa-se o seguinte comando:
sudo lxc config device add <nome do container> video2 unix-char path=/dev/video<número> gid=<grupo>
substituindo <nome do container>, <número> e <grupo> apropriadamente. A título de exemplo:
sudo lxc config device add u1804 video2 unix-char path=/dev/video2 gid=100
Executar aplicações gráficas (X11)
Para executar aplicações gráficas, é necessário partilhar as sockets de X11 com o projecto. Estas estão, normalmente, na pasta /tmp/.X11-unix