Bom, se não podemos instalar aplicações de modo tradicional - através de gerenciadores de pacotes - como gerenciar softwares em um sistema imutável?
No Fedora Silverblue, temos três formas principais de instalação de softwares.
Flatpak
Aplicações flatpaks são aplicações em sandbox, semelhante aos apps de Android, os quais possuem permissões específicas para interagir com o sistema.
O GNOME Software (Silverblue/GNOME) e o Discover (Kinoite/KDE) oferecem apenas aplicações flatpaks em sistemas imutáveis. Isto é, toda aplicação listada nessas lojas são flatpaks.
Essa é a forma mais indicada para usuários não técnicos, que desejam utilizar um sistema operacional estável e imutável. Toda aplicação em flatpak funciona independentemente do sistema, sendo de fácil administração.
Os flatpaks são facilmente atualizados pela loja de software, e são instalados dentro da pasta do usuário (~/.var/).
Por isso, não é necessário reiniciar o sistema após a instalação, atualização, ou remoção de um aplicativo flatpak, pois estes não são gerenciados pelo ostree.
Entretanto, flatpaks funcionam apenas com aplicações gráficas, como Google Chrome, Brave, Visual Studio Code, Android Studio, etc.
Toolbox
O Toolbox é uma ferramenta nativa do Fedora, e funciona em conjunto com o Podman - um gerenciador de contêineres, semelhante ao Docker.
O Toolbox preenche o espaço vazio deixado pelo flatpak, que são aplicativos de linha de comando, SDKs, compiladores, e IDEs.
Isto é, qualquer aplicação que não exista em flatpak ou que não funcione bem nesse formato (IDEs, por exemplo), podem ser utilizados com Toolbox.
Embora o toolbox lide com contêineres, a integração com o host (som, vídeo, microfone, área de trabalho) funciona perfeitamente. Além disso, a pasta do usuário também é automaticamente compartilhada para dentro do contêiner.
É possível instalar jogos, ferramentas de transmissão, editores de vídeos e áudio, tudo dentro de um contêiner, e usá-los como se estivesse em uma instalação mutável do Fedora (Wokstation).
Essa opção certamente é a mais desejada para desenvolvedores, pois é possível criar diversos ambientes de desenvolvimento para finalidades distintas.
O Toolbox já vem instalado no Silverblue e Kinoite, bastando digitar:
toolbox create nome_do_container
Após a criação do contêiner, basta executar o comando:
toolbox enter nome_do_container
Para entrar no contêiner e começar a instalar pacotes.
O funcionamento é exatamente o mesmo de uma distribuição tradicional do Fedora Workstation, podendo instalar pacotes com o comando:
sudo dnf install pacote
Por padrão, o toolbox utiliza apenas imagens do Fedora Core OS para criar contêineres. Porém, é possível utilizar imagens de outras distribuições, criando "Containerfiles" ou Dockerfiles específicos.
E para fins de curiosidade, é dessa forma que o toolbox cria contêineres com integração ao host:
podman --log-level error
create --dns none
--env TOOLBOX_PATH=${TOOLBOX_PATH}
--env XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR}
--hostname toolbox
--ipc host
--label com.github.containers.toolbox=true
--mount type=devpts,destination=/dev/pts
--name
--network host
--no-hosts
--pid host
--privileged
--security-opt label=disable
--ulimit host
--userns keep-id
--user root:root
--volume /:/run/host:rslave
--volume /dev:/dev:rslave
--volume /run/dbus/system_bus_socket:/run/dbus/system_bus_socket
--volume ${HOME}:${HOME}:rslave
--volume ${TOOLBOX_PATH}:${TOOLBOX_PATH}:ro
--volume ${XDG_RUNTIME_DIR}:${XDG_RUNTIME_DIR}
--volume /run/avahi-daemon/socket:/run/avahi-daemon/socket
--volume /run/.heim_org.h5l.kcm-socket:/run/.heim_org.h5l.kcm-socket
--volume /run/pcscd/pcscd.comm:/run/pcscd/pcscd.comm
--volume /run/media:/run/media:rslave
--volume /etc/profile.d/toolbox.sh:/etc/profile.d/toolbox.sh:ro
<image>
toolbox --log-level debug
init-container --gid 1000
--home $HOME
--shell $SHELL
--uid $UID
Os valores entre <> são informados ao toolbox pelo usuário. Perceba que o toolbox é um wrapper para o podman, podendo replicar esses comandos em qualquer distribuição
Linux com o podman ou o docker instalado.
rpm-ostree
Com o rpm-ostree também é possível instalar pacotes na base do sistema. Porém nesse caso, o ideal é utilizarmos esse recurso somente em casos onde o Flatpak e o Toolbox não consegue resolver.
Nesse sentido, podemos citar a instalação de drivers nvidia e impressoras, módulos de virtualização (VirtualBox, VMWare), VPNs, e shells alternativos (zsh, fish, etc).
Os pacotes instalados pelo rpm-ostree ficam separados em um espaço chamado de "pacotes em camadas" (LayeredPackages), sendo possível visualizá-los utilizando o comando:
rpm-ostree status
Caso queria remover todos os LayeredPackages e manter apenas a base, basta digitar o comando:
rpm-ostree reset
Para instalar um pacote na base, digite:
rpm-ostree install nome_do_pacote
Será necessário reiniciar o sistema após a instalação, pois será gerada uma nova entrada no menu do grub.