Distrobox (Portuguê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
- Ao longo da seção seguinte,
nome
é uma variável e pode ser o que você quiser. Em todos os casos, substituanome
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 usedistrobox 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:
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.
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