Diferenças entre edições de "Linux Containers"

Fonte: TecPorto
Saltar para a navegação Saltar para a pesquisa
(Criou a página com "= Manjaro = A configuração ''default'' de ''containers'' em Manjaro precisa de uns ajustes adicionais. Primeiro é necessário activar o '''bit setuid''' nos comandos /us...")
 
 
(Há 13 edições intermédias do mesmo utilizador que não estão a ser apresentadas)
Linha 1: Linha 1:
= Manjaro =
+
= Introdução =
 +
 
 +
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'''.
 +
 
 +
= Instalação =
 +
 
 +
== Alpine Linux ==
 +
 
 +
Nesta distribuição é preciso garantir que os repositórios Edge estão activados. Pode-se fazer isso editando o ficheiro /etc/apk/repositories e adicionando as seguintes linhas:
 +
 
 +
  @edge https://alpine.42.fr/edge/main
 +
  @edge https://alpine.42.fr.edge/community
 +
  @edge https://alpine.42.fr.edge/testing
 +
 
 +
(Existe a hipótese de não ser preciso adicionar os três repositórios, mas não foi ainda feito nenhum teste para confirmar).
 +
 
 +
Depois pode-se instalar os pacotes necessários:
 +
 
 +
  apk add lxc lxd@edge lxcfs dbus
 +
 
 +
De seguida edita-se os ficheiros /etc/subuid e /etc/subgid para acrescentar esta linha aos dois (o ID inicial aqui identificado e o tamanho da pool de IDs podem ser adaptados conforme o que se pretenda com os containers:
 +
 
 +
  root:10000:204783647
 +
 
 +
Pode-se, agora, adicionar o serviço ao arranque do sistema operativo:
 +
 
 +
  rc-update add lxc default
 +
  rc-update add lxd default
 +
  rc-update add lxcfs default
 +
  rc-update add dbus default
 +
 
 +
Caso pretenda executar distribuições baseadas em SystemD (Debian, Ubuntu, Fedora, etc), terá que editar o ficheiro /etc/conf.d/lxc, de forma a que a directiva "systemd_container" passe a ter o valor "yes":
 +
 
 +
  systemd_container=yes
 +
 
 +
Depois de reiniciar o sistema (preferível) ou iniciar cada um dos serviços anteriores manualmente, inicializa-se o LXC usando o comando LXD:
 +
 
 +
  lxd
 +
 
 +
Durante a execução do comando anterior são feitas várias perguntas, que deverá ir respondendo apropriadamente (TODO).
 +
 
 +
O sistema fica, então, pronto para aceitar a criação de containers.
 +
 
 +
== Manjaro ==
 +
 
 +
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:
 
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:
Linha 13: Linha 61:
  
 
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'''.
 
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'''.
 +
 +
 +
== Ubuntu ==
 +
 +
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.
 +
 +
TODO
 +
 +
== Manual ==
 +
 +
TODO
 +
 +
= Aprovisionamento =
 +
 +
Para iniciar, é preciso, primeiro, correr o comando '''lxd init''', respondendo às perguntas apresentadas.
 +
 +
TODO
 +
 +
 +
== 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
 +
 +
=== Partilhar uma pasta ===
 +
 +
Este método tanto permite partilhar pastas do ''host'' com o ''container'', como partilhar entre ''containers'' (directamente se forem ''containers'' com o armazenamento em formato directório, indirectamente se for noutros formatos de volume).
 +
 +
Não havendo ainda pasta a partilhar, pode-se criar com os seguintes comandos:
 +
 +
  mkdir /caminho/para/a/partilha
 +
  chmod 7777 /caminho/para/a/partilha
 +
 +
Sabendo-se já qual é a pasta que se pretende partilhar, basta executar o a seguir para partilhar com um determinado ''container'':
 +
 +
  lxc config device add nome_do_container nome_da_partilha disk source=/caminho/para/a/partilha path=/caminho/de/destino
 +
 +
Se pretender que a pasta seja só de leitura no ''container'' de destino, basta adicionar a partícula "readonly=yes" ao fim do comando anterior.
 +
 +
== 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
 +
 +
TODO

Edição atual desde as 23h16min de 1 de abril de 2022

Introdução

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.

Instalação

Alpine Linux

Nesta distribuição é preciso garantir que os repositórios Edge estão activados. Pode-se fazer isso editando o ficheiro /etc/apk/repositories e adicionando as seguintes linhas:

 @edge https://alpine.42.fr/edge/main
 @edge https://alpine.42.fr.edge/community
 @edge https://alpine.42.fr.edge/testing

(Existe a hipótese de não ser preciso adicionar os três repositórios, mas não foi ainda feito nenhum teste para confirmar).

Depois pode-se instalar os pacotes necessários:

 apk add lxc lxd@edge lxcfs dbus

De seguida edita-se os ficheiros /etc/subuid e /etc/subgid para acrescentar esta linha aos dois (o ID inicial aqui identificado e o tamanho da pool de IDs podem ser adaptados conforme o que se pretenda com os containers:

 root:10000:204783647

Pode-se, agora, adicionar o serviço ao arranque do sistema operativo:

 rc-update add lxc default
 rc-update add lxd default
 rc-update add lxcfs default
 rc-update add dbus default

Caso pretenda executar distribuições baseadas em SystemD (Debian, Ubuntu, Fedora, etc), terá que editar o ficheiro /etc/conf.d/lxc, de forma a que a directiva "systemd_container" passe a ter o valor "yes":

  systemd_container=yes

Depois de reiniciar o sistema (preferível) ou iniciar cada um dos serviços anteriores manualmente, inicializa-se o LXC usando o comando LXD:

 lxd

Durante a execução do comando anterior são feitas várias perguntas, que deverá ir respondendo apropriadamente (TODO).

O sistema fica, então, pronto para aceitar a criação de containers.

Manjaro

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:

 root:1000000:1000000000
 lxd:1000000:1000000000

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.


Ubuntu

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.

TODO

Manual

TODO

Aprovisionamento

Para iniciar, é preciso, primeiro, correr o comando lxd init, respondendo às perguntas apresentadas.

TODO


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

Partilhar uma pasta

Este método tanto permite partilhar pastas do host com o container, como partilhar entre containers (directamente se forem containers com o armazenamento em formato directório, indirectamente se for noutros formatos de volume).

Não havendo ainda pasta a partilhar, pode-se criar com os seguintes comandos:

 mkdir /caminho/para/a/partilha
 chmod 7777 /caminho/para/a/partilha

Sabendo-se já qual é a pasta que se pretende partilhar, basta executar o a seguir para partilhar com um determinado container:

 lxc config device add nome_do_container nome_da_partilha disk source=/caminho/para/a/partilha path=/caminho/de/destino

Se pretender que a pasta seja só de leitura no container de destino, basta adicionar a partícula "readonly=yes" ao fim do comando anterior.

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

TODO