Distrobox (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de Distrobox. Data da última tradução: 2023-12-30. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

O Distrobox é uma camada de encapsulamento de contêineres que permite ao usuário instalar versões containerizadas do Linux diferentes do host, proporcionando uma integração estreita com o host e permitindo o uso de binários projetados para uma distribuição em outra.

O Distrobox não é um gerenciador de contêineres e depende do Podman ou Docker para criar contêineres.

Da documentação do Distrobox:

Use qualquer distribuição Linux dentro do seu terminal. Habilite compatibilidade retroativa e futura com softwares e tenha a liberdade de usar a distribuição que preferir. O Distrobox usa podman ou docker para criar contêineres usando a distribuição Linux de sua escolha. O contêiner criado será integrado ao host, compartilhando o diretório HOME do usuário, armazenamento externo, dispositivos USB externos e aplicativos gráficos (X11/Wayland) e áudio.

Implicações de segurança

O objetivo principal do Distrobox não é focar no sandboxing dos contêineres do host (o que seria impossível devido à natureza da integração estreita do projeto) e, como tal, os contêineres executados dentro do Distrobox terão acesso total à sua pasta home e a alguns outros locais.

É recomendado usar o Podman ao invés do Docker, já que por padrão o Docker executará contêineres como root e contêineres rootful terão acesso irrestrito ao sistema de arquivos do host. O Docker sem root atualmente não funciona, mas está sendo desenvolvido.

Sandboxing é possível, veja #Modo unsharing para detalhes.

Instalação

Com acesso root

Primeiro, siga a página para Podman (Português) ou Docker e verifique se você consegue instalar e executar um contêiner Hello World.

Instale o distrobox ou distrobox-gitAUR

Sem acesso root/sistema de arquivos imutável

É possível instalar o Distrobox na sua pasta home se você não tiver acesso root ao sistema ou se estiver usando uma distro imutável. Isso requer o uso de um pipe curl-to-sh, que é um método de instalação não suportado devido ao risco de segurança.

Você pode encontrar instruções na página de documentação do Distrobox

Desinstalando

O Distrobox fornece um script de desinstalação para instalações sem root, necessário apenas se você instalou sem root. Se instalou via Pacman, então deve desinstalar da maneira usual.

Uso

Nota:
  • Ao longo da seção seguinte, nome é uma variável e pode ser o que você quiser. Em todos os casos, substitua nome pelo nome real que escolher
  • Para a lista completa de opções suportadas em qualquer subcategoria, use --help, por exemplo, para ver todas as opções de criação use distrobox create --help
  • Uma lista completa de distribuições suportadas, junto com os nomes de suas imagens, pode ser encontrada em https://distrobox.it/compatibility/#containers-distros
  • Para técnicas de uso mais avançadas, consulte a página de Documentação do Distrobox em https://distrobox.it/usage/usage/

Para criar um novo contêiner, execute o seguinte:

$ distrobox create -n nome

Para listar contêineres instalados, execute o seguinte:

$ distrobox list

Para interagir com um contêiner instalado, execute o seguinte:

$ distrobox enter nome

ou você pode enviar um comando diretamente para um contêiner com:

$ distrobox enter nome -- comando-a-executar

Para parar um contêiner em execução, execute o seguinte:

$ distrobox stop nome

Para excluir um contêiner, execute o seguinte:

$ distrobox rm nome

Para instalar uma distribuição específica em um contêiner, execute o seguinte (neste exemplo, Ubuntu):

$ distrobox create --image ubuntu:22.04

As instalações podem ser totalmente personalizadas da seguinte forma (neste exemplo, um contêiner chamado teste executando Gentoo com acesso root):

$ distrobox create -i docker.io/gentoo/stage3:latest -n teste --root

Se você precisar que seu contêiner tenha acesso root ao host, recomenda-se usar a flag --root em vez de sudo distrobox.

Modo unsharing

O Distrobox agora permite que os usuários unshare certos locais em seu sistema de arquivos. No seu modo padrão, os seguintes compartilhamentos são criados, devsysfs, ipc, netns, process, $HOME e Acesso a Aplicativos.

Agora você pode escolher unshare alguns desses usando os comandos listados abaixo ao criar um novo contêiner:

Compartilhamentos
Compartilhamento Comando Uso
devsysfs --unshare-devsysfs Não compartilhar dispositivos e diretórios sysfs do host.
ipc --unshare-ipc Não compartilhar o namespace ipc com o host.
netns --unshare-netns Não compartilhar o namespace de rede com o host.
process --unshare-process Não compartilhar o namespace de processos com o host.
All --unshare-all Ativar todas as flags de unshare.

Não compartilhar $HOME e Acesso a Aplicativos não é possível, pois são obrigatórios e sem eles o Distrobox não seria capaz de operar.

Atenção: Embora este recurso ofereça segurança aprimorada em relação a um contêiner padrão, ainda é considerado não ser uma sandbox completa pelos desenvolvedores da aplicação.

Configuração

É possível configurar o Distrobox de duas maneiras, com um arquivo de configuração ou usando variáveis de ambiente.

Arquivo de configuração

O Distrobox verifica os seguintes locais para arquivos de configuração, do menos ao mais importante:

  • /usr/share/distrobox/distrobox.conf
  • /usr/etc/distrobox/distrobox.conf
  • /etc/distrobox/distrobox.conf
  • ~/.config/distrobox/distrobox.conf
  • ~/.distroboxrc

Um exemplo de arquivo de configuração é o seguinte:

container_always_pull="1"
container_generate_entry=0
container_manager="docker"
container_image_default="registry.opensuse.org/opensuse/toolbox:latest"
container_name_default="nome-teste-1"
container_user_custom_home="$HOME/.local/share/container-home-test"
container_init_hook="~/.local/distrobox/a_custom_default_init_hook.sh"
container_pre_init_hook="~/a_custom_default_pre_init_hook.sh"
non_interactive="1"
skip_workdir="0"

Variáveis de ambiente

As seguintes variáveis estão disponíveis e devem ser definidas usando variáveis por usuário:

DBX_CONTAINER_ALWAYS_PULL
DBX_CONTAINER_CUSTOM_HOME
DBX_CONTAINER_IMAGE
DBX_CONTAINER_MANAGER
DBX_CONTAINER_NAME
DBX_CONTAINER_ENTRY
DBX_NON_INTERACTIVE
DBX_SKIP_WORKDIR

Veja também