Introdução
Nesse texto, apresento o Fedora Silverblue e suas características, além de demonstrar também as vantagens de se utilizar um sistema operacional imutável no dia dia, seja para a utilização básica ou para desenvolvimento de software.
Imutabilidade
Basicamente, imutabilidade significa que algo não pode ser alterado. Por exemplo, em uma linguagem de programação qualquer, uma constante pode ser classificada como um valor imutável, pois não pode e não deve ser alterado.
Aplicando esse mesmo conceito em sistemas operacionais, a raíz do sistema (/) é imutável. Isso significa que tudo abaixo de / é somente leitura (read-only), assim como em /usr.
As exceções são as pastas /var, /boot, e /etc, as quais permanecem mutáveis.
Nesse sentido, para garantir o funcionamento das aplicações de sistema e de usuário, a pasta /var é utilizada.
Na raíz do sistema, pastas mutáveis são links simbólicos para outras pastas em /var.
/home
→ /var/home
/opt
→ /var/opt
/srv
→ /var/srv
/root
→ /var/roothome
/usr/local
→ /var/usrlocal
/mnt
→ /var/mnt
/tmp
→ /sysroot/tmp
Apenas arquivos e pastas considerados importantes para o funcionamente do sistema operacional, são imutáveis.
Atualizações atômicas
Uma das características de um sistema operacional imutável, são as suas atualizações. Com a raíz do sistema sendo imutável, atualizar pacotes da forma tradicional utilizando o comando sudo dnf upgrade
ou sudo apt upgrade
não se aplica.
Pois bem, o que significa “atualização atômica”?
O termo “átomo” deriva do grego e significa indivisível. Ou seja, uma atualização atômica é uma série indivisível e irredutível de operações, de modo que tudo ocorre ou nada ocorre. É tudo ou nada.
Nesse sentido, não há como obter uma atualização corrompida, ou atualização “pela metade”, pois se assim o for, nada será feito e tudo continuará da mesma forma.
Em resumo, uma atualização atômica só ocorre se a mesma for completada com sucesso.
ostree/libostree
Para garantir o funcionamente de atualizações atômicas, o Fedora Silverblue utiliza o ostree para gerenciar o versionamento das imagens do sistema.
O ostree funciona de forma semelhante ao git, providenciando meios de versionar imagens do sistema e realizar trocas de ramificações (branchs) do sistema.
Por exemplo, é possível trocar a base do sistema Silverblue (GNOME) para o Kinoite (KDE), trocando o branch do sistema através do ostree.
|
|
O primeiro comando fixa a implantação atual, caso queira voltar em algum momento. O comando rpm -E %fedora
exibe a versão do Fedora atualmente em uso.
Para desfazer:
|
|
O 1 representa a posição da imagem, o qual pode ser verificada pelo comando rpm-ostree status
.
Realizando essa troca, é possível migrar do GNOME para o KDE ou vice versa, sem danificar o sistema.
Isso significa que você pode fazer o rebase para o Fedora Kinoite e experimentá-lo, sem nunca tocar em seu sistema atual.
Como as duas imagens do sistema são isoladas uma da outra, os dois ambientes de desktop nunca serão instalados ao mesmo tempo.
Da mesma forma, podemos migrar para o branch de desenvolvimento (“rawhide” no Fedora).
|
|
E assim como o git, que oferece a opção revert para desfazer quaisquer alterações no código, o ostree oferece a opção rollback para voltar a base anterior, sem perder dados.
|
|
Com isso, basta reiniciar o sistema para “bootar” na imagem antiga e estável.
Gerenciamento de software
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 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 containêr, 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:
|
|
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 dnf install
.
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.
Finalizando, e para fins de curiosidade, é dessa forma que o toolbox cria contêineres com integração ao host:
|
|
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 eles e manter apenas a base, basta digitar o comando:
|
|
Para instalar um pacote na base, digite:
|
|
Será necessário reiniciar o sistema após a instalação, pois será gerada uma nova entrada no menu do grub.
Resumo
Espero que eu tenha esclarecido o básico do funcionamento de um sistema imutável, mais especificadamente do Fedora Silverblue.
Caso tenha dúvidas, deixe um comentário. :-)
Créditos: docs.fedoraproject.org