Fedora Silverblue e Distrobox

O Guia de Dev pra Quem Não Quer Dor de Cabeça

O Fedora Silverblue mudou o jogo. A imutabilidade do sistema traz uma segurança incrível e os rollbacks salvam vidas. Mas, se você programa, instalar o Git, Neovim ou o Hugo com o rpm-ostree vira um pesadelo. Polui o sistema todo e exige reinicialização toda hora.

Acho que a melhor saída é usar o Distrobox como BoxBuddy. Você cria, gerencia e move seus ambientes de trabalho sem estressse.

O que são Distrobox e BoxBuddy?

O Distrobox uusa o Podman pra criar containers integrados ao seu sistema. Nada de máquinas virtuais pesadas. Ele acessa seus arquivos da pasta /home e seus periféricos direto.

O BoxBuddy traz a interface visual em Flatpak. Você monta distros em poucos cliques, idela pra quem odeia decorar comandos.

Montando seu primeiro ambiente

Se curte praticidade visual, abra o BoxBuddy, clique no botão de soma e escolha sua imagem. Dê um nome legal pro container, tipo fedora-dev-utils.

Prefere o terminal? Então manda bala nesses comandos:

# Criar um novo container
distrobox create --name fedora-dev-utils --image fedora:latest

# Acessar o ambiente
distrobox enter fedora-dev-utils

Lá dentro, instale o que quiser. Não tem perigo de quebrar o Silverblue. Rodamos isso aqui pra atualizar e instalar as ferramentas:

# Atualiza os pacotes de software instalados no Linux (Fedora, RHEL, CentOS)
sudo dnf update

# Instalação dos programas 
sudo dnf install git neovim hugo jekyll

Aí vem o truque! Pra rodar esses apps no terminal do Silveblue, você exporta o binário:

distrobox-export --bin /usr/bin/nvim --export-path ~/.local/bin
distrobox-export --bin /usr/bin/hugo --export-path ~/.local/bin

Só não esquece de colocar a pasta ~/.local/bin no seu PATH dentro do .bashrc.

Automatizando tudo no Script

Exporta programa por programa cansa rápido. Talvez sem bem vindo criar um xcript de automação dentro do container.

Crie o arquivo ~/exportar-tudo.sh:

#!/bin/bash
# Define que o interpretador a ser usado é o Bash.

# --- LISTAS DE EXPORTAÇÃO ---

# Lista de binários (programas de linha de comando).
# Exemplo: distrobox-export --bin /usr/bin/git
BINARIOS=(
"/usr/bin/git"
"/usr/bin/nvim"
"/usr/bin/hugo"
"/usr/bin/jekyll"
) # Fecha a lista de binários.

# Lista de aplicativos (geram ícones no menu do sistema).
# Exemplo: distrobox-export --app vlc
APLICATIVOS=(
) # Fecha a lista de aplicativos comerciais/GUI.

# Lista de serviços (daemons/systemd).
Exemplo: distrobox-export --service sshd
SERVICOS=(
) # Exemplo de lista vazia para testar a lógica do script.

# --- FUNÇÃO DE PROCESSAMENTO ---

# Criamos uma função para evitar repetir código para cada tipo de exportação.
exportar_tudo() {
    local TIPO=$1        # Primeiro argumento: o nome amigável (Binários, Aplicativos, etc).
    local FLAG=$2        # Segundo argumento: a flag do comando (--bin, --app, --service).
    shift 2              # Remove os dois primeiros argumentos para sobrar apenas a lista de itens.
    local ITENS=("$@")   # Armazena o restante dos argumentos como a lista de itens a processar.

    # Verifica se a quantidade de itens na lista é igual a zero.
    if [ ${#ITENS[@]} -eq 0 ]; then
        # Informa ao usuário que não há nada para processar nesta categoria.
        echo "--> [AVISO] A lista de $TIPO está vazia. Pulando..."
        # Retorna para continuar o script sem erro.
        return
    fi # Fim da verificação de lista vazia.

    # Exibe qual categoria está sendo processada no momento.
    echo "Iniciando exportação de $TIPO..."

    # Inicia o laço para percorrer cada item da lista recebida.
    for ITEM in "${ITENS[@]}"; do
        # O comando 'distrobox-export' faz a ponte entre o container e o host.
        # $FLAG define se é --bin, --app ou --service.
        distrobox-export "$FLAG" "$ITEM" --export-path ~/.local/bin
        
        # Exibe mensagem de confirmação para cada item processado.
        echo "[OK] $TIPO exportado: $ITEM"
    done # Fim do laço 'for'.
} # Fim da definição da função.

# --- EXECUÇÃO ---

# Chama a função para processar os Binários usando a flag --bin.
exportar_tudo "Binários" "--bin" "${BINARIOS[@]}"

# Chama a função para processar os Aplicativos usando a flag --app.
exportar_tudo "Aplicativos" "--app" "${APLICATIVOS[@]}"

# Chama a função para processar os Serviços usando a flag --service.
exportar_tudo "Serviços" "--service" "${SERVICOS[@]}"

# Exibe a mensagem final de conclusão do script.
echo "Processo concluído com sucesso!"

Dê permissão e rede o script:

chmod +x ~/exportar-tudo.sh/usr
./exportar-tudo.sh.

Levando seu Container para outro PC

Configurou o ambiente perfeito no Desktop e quer levar para o Notebook? É fácil.

No Computador de Origem (Exportar)

Salve o container como uma imagem:

podman commit fedora-dev-utils meu-setup-custom

Exporte para um arquivo:

podman save meu-setup-custom -o meu-setup.tar

No Computador de Destino (Importar)

Transfira o arquivo .tar e carregue a imagem:

podman load -i meu-setup.tar

Recrie o container no Distrobox:

distrobox create --name fedora-dev-utils --image localhost/meu-setup-custom

Atenção:
Entre no container e rode o seu script exportar-tudo.sh para recriar os atalhos no novo sistema!

Dicas Extras de Performance

Mesclagem de Home: O Distrobox compartilha sua /home. Se você tem configurações de plugins do Neovim em ~/.config/nvim, elas funcionarão automaticamente em qualquer container que tenha o Neovim instalado.

Múltiplas Distros: Use um container Arch Linux via Distrobox para ter acesso ao AUR, enquanto mantém a estabilidade do Fedora Silverblue como base.

O uso de containers via Distrobox transforma o Fedora Silverblue em uma estação de trabalho indestrutível e altamente flexível.

Rolar para cima