Plano de Fuga

Como chegámos aqui

A distribuição CentOS sempre foi um animal estranho: como é que podia ser que a principal distribuição Linux de utilização exclusivamente paga (Red Hat Enterprise Linux, ou RHEL) tivesse um clone de utilização totalmente gratuita?
Por isso, e por razões que indicarei abaixo, não me surpreendeu completamente que as condições de acesso à distribuição CentOS tenham mudado, se bem que o método, o tempo e a forma como tudo foi comunicado vão ser um caso de estudo de como-não-fazer…
Fiquei curioso com as duas alternativas que se perfilaram, o Rocky Linux e o AlmaLinux, e decidi testar a migração de um sistema CentOS 8 para ambos, uma vez que tudo isto resultou no End-Of-Life do CentOS8 em Dezembro de 2021 em vez de 2029 como muita gente tinha planeado.

Fragmentação?

Como sempre no mundo FOSS, nunca há apenas uma única resposta a um problema - é uma força, e uma fraqueza. Neste caso creio que ambos os projectos têm o seu público-alvo, que talvez lhes permita manterem-se os dois activos e vigorosos:

RockyLinux AlmaLinux
Base Territorial EUA Europa
Público-alvo High-Performance Computing, hardware com drivers distribuídos em binário (estou-te a ver, HPE), ex-utilizadores do Scientific Linux cPanel, servidores Web

Veremos se ambos sobreviverão…

Mais um concorrente pediu uma cadeira e sentou-se à mesa; dias depois da publicação original, a SuSE, que já tinha uma distribuição baseada em RPM (SuSE Linux Enterprise, ou SLE) e um kernel mais-ou-menos compatível com o RedHat em termos de kernel modules, anunciou o Liberty Linux, que oferece uma alternativa com suporte de nível empresarial e capaz de ser gerida pelas mesmas ferramentas que se usam para gerir uma infraestrutura baseada em SuSE bem, mas o RHEL também ja podia fazer isso…). De acordo com o The Register, é de ressalvar que o kernel do Liberty Linux é o mesmo do SuSE Linux Enterprise (5.3.x), que é muito mais recente que o existente no RHEL 8 (4.18) - por isso o Liberty Linux parece ser uma proposta para convencer certos tipos de clientes mistos a abandonarem de vez a RedHat caso os seus sistemas sejam compatíveis com o SLE.

O teste

Para este teste, baseei-me num conjunto de VMs que simulava uma rede de serviços tipicamente Windows (AD-DC, SMB, impressão, Group Policies) com base num servidor CentOS8 e Samba (compilado da fonte).

O objectivo é fazer o sidegrade a este último (TJGGS) para as alternativas ao CentOS8: Rocky Linux e AlmaLinux, e testar a funcionalidade básica.

Preparativos

Os computadores estão no domínio DASILVAT e utilizadores do domínio podem-se logar nos computadores:


LOGONSERVER=\\TJGGS
USERDNSDOMAIN=DASILVAT.LOCAL
USERDOMAIN=DASILVAT

Loguei-me em TJGGS com o PuTTY, a partir do computador RSAT
Fora da caixa, o sistema está tal e qual o deixei em Junho de 2020, quando terminei o trabalho para o CINEL.


login as: formando
Authenticating with public key "rsa-key-20200615"
Passphrase for key "rsa-key-20200615":
Last login: Sat Jun 27 20:31:21 2020 from 10.12.140.99
[formando@tjggs ~]$ uname -a
Linux tjggs 4.18.0-147.8.1.el8_1.x86_64 #1 SMP Thu Apr 9 13:49:54 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

A primeira coisa que temos de fazer é uma actualização geral. E como há mais de um ano que os repositórios não são actualizados, é melhor usar --refresh

1
sudo dnf upgrade -y --refresh

[...]
Transaction Summary
====================================================================================================================================
Install 22 Packages
Upgrade 518 Packages
[...]

Depois de um reinício, passámos do CentOS 8.1 para 8.4:

1
uname -a

Linux tjggs 4.18.0-305.19.1.el8_4.x86_64 #1 SMP Wed Sep 15 15:39:39 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Nos clientes Windows surgiu o aviso de que as credenciais precisavam de ser reintroduzidas; logoff, mudança de palavra-passe, e ao tentar de novo o logon, surgiu o erro de que o computador não estava registado no domínio.

Muito bem, loguei com o administrador local e tentei primeiro Remove-Computer -Credential DASILVAT\Administrator e depois Add-Computer; sempre não autorizado (Access is denied).
Loguei “localmente” em TJGGS e verifiquei os logs; /var/log/messages tinha uma indicação de que a sysvol estava com permissões erradas:


chdir_current_service: vfs_ChDir(/usr/local/samba/var/locks/sysvol) failed: Permission denied. Current token: uid=3000025, gid=3000026, 7 groups: 3000025 3000026 3000035 3000036 3000037 3000006 3000011

Apesar de ser um bocado perigoso, usei o esfregão de palha de aço:

1
2
samba-tool ntacl sysvolreset
systemctl restart samba-ad-dc

systemctl status samba-ad-dc já deu o serviço como activo e sem erros. E quando tentei de novo logar um utilizador no computador CLIENTE, funcionou, e os GPOs estavam activos.
Resolver o mesmo problema no cliente RSAT foi um pouco mais complicado; primeiro tive de tirar o cliente do domínio pela GUI (Computer Preferences como Administrator local), e depois já foi possível abrir uma PowerShell de Administrador e usar os comandos

1
2
Add-Computer -Credential DASILVAT\Administrator -Domain DASILVAT
Restart-Computer

No entanto, passei a ter outro problema no log do serviço samba-ad-dc; imagino que devido a ter reinicializado as ACLs da sysvol, agora são as permissões das shares que dão erro:


chdir_current_service: vfs_ChDir(/mnt/dumdum/recursos) failed: Permission denied. Current token: uid=3000041, gid=3000026, 7 groups: 3000041 3000026 3000035 3000036 3000037 3000006 3000011

Este token, claro, corresponde ao computador que acabei de reintroduzir no domínio:

1
wbinfo --sid-to-name $(wbinfo --uid-to-sid 3000041)

DASILVAT\WIN7-RSAT$ 1

A solução foi adicionar o grupo Domain Computers à share (bastaram permissões de leitura)
Agora que temos o sistema mais ou menos estabilizado, podemos testar a migração de TJGGS de CentOS 8 para Rocky Linux e para AlmaLinux

Rocky Linux

A página que documenta o processo de migração é https://docs.rockylinux.org/guides/migrate2rocky/ , e é aconselhado estarmos logados na conta root.
Para evitar o método curl <url> -o <script>.sh, que pode ser inseguro se houver um ataque Man-In-The-Middle, começamos por instalar o git:

1
dnf install git -y

Last metadata expiration check: 2:05:12 ago on Sun 31 Oct 2021 09:14:58 PM WET.
Package git-2.27.0-1.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

Descarregamos os scripts do repositório e corremos o script de migração:

1
2
3
git clone https://github.com/rocky-linux/rocky-tools.git
chmod u+x ./rocky-tools/migrate2rocky/migrate2rocky.sh
./rocky-tools/migrate2rocky/migrate2rocky.sh -r

[...]
Done, please reboot your system.
A log of this installation can be found at /var/log/migrate2rocky.log

Depois de reiniciar, o GRUB tem uma entrada “Rocky Linux”:

O resultado de hostnamectl é:

Um utilizador pré-existente ainda pode logar-se no domínio:

Usando o RSAT, criei um novo utilizador com as mesmas características e o mesmo pacote de GPOs:


O novo utilizador também se logou e as mesmas configurações foram aplicadas, excepto a impressora partilhada que é uma configuração muito sensível em Samba; no entanto, o fundo de ecrã correcto carregou (especificado por GPO a partir de uma pasta partilhada), por isso não foi impedido por qualquer problema de permissões nas shares do domínio.

AlmaLinux

Para uma avaliação equilibrada, usou-se um segundo clone de TJGGS ainda em CentOS mas já com os problemas do Samba resolvidos (pelo menos, aqueles que detectei)
O processo de migração do AlmaLinux não está tão bem documentado como o Rocky; em vez de uma página de explicação, o botão Migrate em https://almalinux.org vai directamente para o repositório GitHub do script de migração, onde a documentação do processo fica a cargo do README. Não é a situação ideal.
Por outro lado, também não é mencionada a hipótese de clonar localmente o repositório, e apenas é dada a sugestão de descarregar o script por curl. Ainda menos ideal, e claramente inseguro.
Por isso, vamos repetir o processo mais seguro, como fizemos para o Rocky:
Abrimos uma root shell e clonamos o repositório:

1
2
3
git clone https://github.com/AlmaLinux/almalinux-deploy.git
chmod u+x ./almalinux-deploy/almalinux-deploy.sh
./almalinux-deploy/almalinux-deploy.sh

Check root privileges OK
Check centos-8.x86_64 is supported OK
Download RPM-GPG-KEY-AlmaLinux OK
Import RPM-GPG-KEY-AlmaLinux to RPM DB OK
Download almalinux-release package OK
Verify almalinux-release package OK
Your OS is supported OK
Remove OS specific rpm packages OK
[...]
All Secure Boot related packages which were released by not AlmaLinux are reinstalledOK
Migration to AlmaLinux is completed

E reiniciei TJGGS




No RSAT criei um novo utilizador, agora na Active Directory baseada em AlmaLinux

Este novo utilizador também se logou no domínio a partir do computador Cliente, com as GPOs aplicadas correctamente (menos a impressora):

Conclusão

Como prometido, tanto o Rocky Linux como o AlmaLinux foram capazes de fazer a migração lateral de um servidor CentOS8 com alguns serviços (samba-ad-dc, chrony, RAIDs mdm, SSHd) sem grandes problemas.
Os problemas iniciais de permissões de certeza que foram causados por mim durante a configuração inicial do servidor, porque me lembro que tinha problemas com as permissões da sysvol que impediam alguns GPOs de funcionar correctamente; basicamente o problema arrastou-se até agora.

Editorial

O mundo do Free and Open Source sempre viveu um problema causado por “Liberdade” e “Gratuitidade” se escreverem exactamente da mesma maneira em Inglês: Free. E se a Liberdade é um valor relativo para muita gente, a Gratuitidade é um atractivo muito maior e que se pode medir directamente, por isso o mundo FOSS, pelo menos nos primeiros anos, pouco fez para frisar que, das duas possibilidades, a Liberdade é que é o objectivo principal do FOSS.
Obviamente que nada é “de graça”, tudo tem um custo que se não somos nós a pagar sendo o produto, alguém está a pagar por nós, seja em esforço humano, ciclos de CPU, armazenamento, conectividade, energia, hardware… Por isso quando os projectos FOSS atingem alguma maturidade e posição no mercado, tentam que os utilizadores contribuam com alguma coisa (qualquer coisa!) que beneficie o projecto directamente, mais do que a mera divulgação e promoção.
Deste modo, as companhias por trás de muitos projectos FOSS vendem serviços e suporte, mas cada vez mais também fecham certas conveniências por trás desses contratos, para incutir os utilizadores a pagarem dinheiro pelo produto FOSS. Essas conveniências extra (para além do simples suporte) costumam ser:

  • Funcionalidade limitada: certas funcionalidades de uso mais empresarial são desenvolvidas com base numa licença não-FOSS e apenas são desbloqueadas contra o pagamento de uma licença ou compra de hardware em pacote
    • OPNsense, e outros; notoriamente, quase todos os fornecedores de appliances de armazenamento baseadas em ZFS (como o TrueNAS) bloqueiam o acesso a funcionalidades de clustering e High-Availability à compra de hardware em pacote com o software.
  • Acesso a actualizações: apenas são disponibilizados os binários da versão x.0.0, e quaisquer actualizações sob a forma de binários pré-compilados apenas estão disponíveis para utilizadores com contrato de suporte; no entanto, graças às licenças FOSS, quem quiser pode compilar o código-fonte (e assumir o suporte).
    • Bareos, OPNsense
  • Acesso a versões estáveis: em sentido contrário ao anterior, apenas são disponibilizadas em binário a compilação diária (nightly) do estado actual do processo de desenvolvimento, sem qualquer tipo de testes de funcionalidade (mas pelo menos a compilação terminou com sucesso); neste caso, para se obter uma versão estável é mais seguro ir buscar o código-fonte da nightly da versão principal (major version) anterior, que estará mais bem testada e cujas actualizações deverão corresponder a resoluções de erros - mesmo assim, sem nenhuma garantia de que não tenham sido introduzidos novos erros.
    • VyOS

A RedHat decidiu-se por uma variante desta última opção: em vez de apenas disponibilizar as nightlies do CentOS, teve noção que isso seria um passo maior que as pernas (além de já terem o Fedora Rawhide para isso) e decidiu que o CentOS passaria a estar acessível em binário no estado de desenvolvimento da minor version actual

  • Em vez de a versão 8.4 do CentOS ser lançada depois do RHEL 8.4 ser lançado, o RHEL estará na versão 8.4 e o CentOS estará na versão seguinte 8.5, e apenas quando o CentOS Stream 8.5 for julgado estável é que será convertido em RHEL 8.5 e o CentOS passará imediatamente a testar as correcções previstas para versão 8.6.
  • Ou mais ainda, quem quiser testar as funcionalidades da versão 9 do RHEL, já pode tentar instalar o CentOS Stream 9…

Deste modo, os utilizadores do CentOS contribuirão com testes (e relatórios de erros, ou assim espera a RedHat), pagando qualquer coisa pelo uso do código desenvolvido pela RedHat.