Por: @jonasc Publicado em: 2022-02-28

Migração FWFLEX CentOS 8 para Alma Linux 8

Pré-requisito que o CentOS esteja na versão 8.5. Necessário update antes de iniciar processo de migração.

Alternativas de migração

  1. Script de migração fornecido pela distro: almalinux-deploy
  2. Comando dnf distro-sync
  3. Atualizar através da interface do produto

Script de migração fornecido pela distro

Utilizar o script almalinux-deploy.sh disponível no GitHub.

Necessário configurar exclude de pacotes da itflex e pacotes que apresentaram erros de dependência na execução do script e habilitar repos que não são ativos por padrão.

Alterar as variáveis abaixo no script:

local dnf_repos="--enablerepo=powertools,ha"
local exclude_pkgs="--exclude=itflex*,python3-botocore,python3-dateutil,python3-clufter,clufter-bin,clufter-common"

O script utiliza o comando dnf distro-sync, que sincroniza a versão dos pacotes locais com os dos repositórios. Necessário fazer exclude de quaisquer pacotes que não desejamos atualizar.

Após execução do comando, é necessário habilitar os repos ha e powertools, passando para enabled=1 no conf.

Após o sync, o dnf update apresentou erro do clufter-bin, pois o pacote possui nome diferente no repo novo.

[root@fwflex-testing-3-fw01 yum.repos.d]# dnf update --exclude=itflex*
iTFLEX 3rdparty repo                                                                                                                                                         8.2 kB/s | 2.9 kB     00:00    
iTFLEX repo                                                                                                                                                                   10 kB/s | 2.9 kB     00:00    
Erro: 
 Problema: package python3-clufter-0.77.1-5.el8.noarch requires clufter-bin = 0.77.1-5.el8, but none of the providers can be installed
  - cannot install both clufter-bin-0.77.1-5.el8.alma.x86_64 and clufter-bin-0.77.1-5.el8.x86_64
  - cannot install the best update candidate for package python3-clufter-0.77.1-5.el8.noarch
  - cannot install the best update candidate for package clufter-bin-0.77.1-5.el8.x86_64
(tente adicionar '--allowerasing' à linha de comando para substituir pacotes conflitantes ou '--skip-broken' para pular pacotes desinstaláveis ou '--nobest' para usar não apenas os melhores pacotes candidatos)

Para corrigir é necessário forçar o install:

dnf install clufter-bin

Após instalação acima, não apresentou pacotes a serem atualizados:

[root@fwflex-testing-3-fw01 yum.repos.d]# dnf update --exclude=itflex*
Última verificação de data de vencimento de metadados: 0:02:52 atrás em seg 28 fev 2022 12:22:56 -03.
Dependências resolvidas.
Nada para fazer.
Concluído!

Comando distro-sync

Importar chave GPG do repositório:

rpm --import http://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux

Remover arquivos .repo do CentOS:

mv /etc/yum.repos.d/CentOS-Linux-* /tmp/

Configurar arquivos .repo do Alma Linux (utilizar o que vem na instalação da distro), deve ficar conforme listado abaixo:

[root@fwflex-testing-3-fw01 ~]# ll /etc/yum.repos.d/
total 52
-rw-r--r-- 1 jonasc itflex  951 fev  2 10:39 almalinux-ha.repo
-rw-r--r-- 1 jonasc itflex  893 fev  2 10:27 almalinux-plus.repo
-rw-r--r-- 1 jonasc itflex  971 fev  2 10:39 almalinux-powertools.repo
-rw-r--r-- 1 jonasc itflex 2690 fev  2 10:27 almalinux.repo
-rw-r--r-- 1 jonasc itflex 1049 fev  2 10:27 almalinux-resilientstorage.repo
-rw-r--r-- 1 root   root   1485 jan 31 13:19 epel-modular.repo
-rw-r--r-- 1 root   root   1422 jan 31 13:19 epel.repo
-rw-r--r-- 1 root   root   1584 jan 31 13:19 epel-testing-modular.repo
-rw-r--r-- 1 root   root   1521 jan 31 13:19 epel-testing.repo
-rw-r--r-- 1 root   root    374 out 18 19:50 itflex.repo
-rw-r--r-- 1 root   root    831 set 16 17:23 netify.repo
-rw-r--r-- 1 root   root    194 set 16 17:16 osquery.repo
-rw-r--r-- 1 root   root    410 set 16 17:23 zabbix.repo

Habilitar os repos ha e powertools, passando para enabled=1 no conf.

Executar clean all e distro-sync:

dnf clean all
dnf distro-sync --exclude=itflex*,python3-botocore,python3-dateutil,python3-clufter,clufter-bin,clufter-common --disablerepo=itflex

O distro sync realiza praticamente o mesmo que um dnf update. Porém ele verifica os pacotes instalados localmente e sincroniza para a mesma versão dos repositórios configurados. Caso tenha algum downgrade necessário, também é executado.

Após o sync, o dnf update apresentou erro do clufter-bin, pois o pacote possui nome diferente no repo novo.

[root@fwflex-testing-3-fw02 yum.repos.d]# dnf update --exclude=itflex*
iTFLEX 3rdparty repo                                                                                                                                                         8.2 kB/s | 2.9 kB     00:00    
iTFLEX repo                                                                                                                                                                   10 kB/s | 2.9 kB     00:00    
Erro: 
 Problema: package python3-clufter-0.77.1-5.el8.noarch requires clufter-bin = 0.77.1-5.el8, but none of the providers can be installed
  - cannot install both clufter-bin-0.77.1-5.el8.alma.x86_64 and clufter-bin-0.77.1-5.el8.x86_64
  - cannot install the best update candidate for package python3-clufter-0.77.1-5.el8.noarch
  - cannot install the best update candidate for package clufter-bin-0.77.1-5.el8.x86_64
(tente adicionar '--allowerasing' à linha de comando para substituir pacotes conflitantes ou '--skip-broken' para pular pacotes desinstaláveis ou '--nobest' para usar não apenas os melhores pacotes candidatos)

Para corrigir é necessário forçar o install:

dnf install clufter-bin

Após instalação acima, não apresentou pacotes a serem atualizados:

[root@fwflex-testing-3-fw02 yum.repos.d]# dnf update --exclude=itflex*
Última verificação de data de vencimento de metadados: 0:02:52 atrás em seg 28 fev 2022 12:22:56 -03.
Dependências resolvidas.
Nada para fazer.
Concluído!

Atualizar através da interface do produto

Importar chave GPG do repositório:

rpm --import http://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux

Remover arquivos .repo do CentOS:

mv /etc/yum.repos.d/CentOS-Linux-* /tmp/

Configurar arquivos .repo do Alma Linux (utilizar o que vem na instalação da distro), deve ficar conforme listado abaixo:

[root@fwflex-testing-3-fw01 ~]# ll /etc/yum.repos.d/
total 52
-rw-r--r-- 1 jonasc itflex  951 fev  2 10:39 almalinux-ha.repo
-rw-r--r-- 1 jonasc itflex  893 fev  2 10:27 almalinux-plus.repo
-rw-r--r-- 1 jonasc itflex  971 fev  2 10:39 almalinux-powertools.repo
-rw-r--r-- 1 jonasc itflex 2690 fev  2 10:27 almalinux.repo
-rw-r--r-- 1 jonasc itflex 1049 fev  2 10:27 almalinux-resilientstorage.repo
-rw-r--r-- 1 root   root   1485 jan 31 13:19 epel-modular.repo
-rw-r--r-- 1 root   root   1422 jan 31 13:19 epel.repo
-rw-r--r-- 1 root   root   1584 jan 31 13:19 epel-testing-modular.repo
-rw-r--r-- 1 root   root   1521 jan 31 13:19 epel-testing.repo
-rw-r--r-- 1 root   root    374 out 18 19:50 itflex.repo
-rw-r--r-- 1 root   root    831 set 16 17:23 netify.repo
-rw-r--r-- 1 root   root    194 set 16 17:16 osquery.repo
-rw-r--r-- 1 root   root    410 set 16 17:23 zabbix.repo

Habilitar os repos ha e powertools, passando para enabled=1 no conf.

Executar clean all e check updates:

dnf clean all
itflex-check-updates 

Acessar a interface do produto e realizar a atualização do SO.

Funciona em partes. Ocorre alguns skippings, conforme log:

Skipping packages with conflicts:
(add '--best --allowerasing' to command line to force their upgrade):
 corosynclib                      x86_64  3.1.5-1.el8                                        appstream   68 k
 iproute                          x86_64  5.12.0-4.el8                                       baseos     774 k
 iptables-libs                    x86_64  1.8.4-20.el8                                       baseos     106 k
 libguestfs                       x86_64  1:1.40.2-28.module_el8.5.0+2608+72063365.alma      appstream  2.7 M
 libguestfs-tools-c               x86_64  1:1.40.2-28.module_el8.5.0+2608+72063365.alma      appstream  5.6 M
 libvirt-client                   x86_64  6.0.0-37.1.module_el8.5.0+2621+39fdc467            appstream  367 k
 mariadb-common                   x86_64  3:10.3.28-1.module_el8.3.0+2177+7adc332a           appstream   62 k
 mariadb-errmsg                   x86_64  3:10.3.28-1.module_el8.3.0+2177+7adc332a           appstream  233 k
 nginx-all-modules                noarch  1:1.14.1-9.module_el8.3.0+2165+af250afe.alma       appstream   23 k
 nginx-filesystem                 noarch  1:1.14.1-9.module_el8.3.0+2165+af250afe.alma       appstream   23 k
 nginx-mod-http-perl              x86_64  1:1.14.1-9.module_el8.3.0+2165+af250afe.alma       appstream   44 k
 nginx-mod-http-xslt-filter       x86_64  1:1.14.1-9.module_el8.3.0+2165+af250afe.alma       appstream   32 k
 nginx-mod-mail                   x86_64  1:1.14.1-9.module_el8.3.0+2165+af250afe.alma       appstream   63 k
 nginx-mod-stream                 x86_64  1:1.14.1-9.module_el8.3.0+2165+af250afe.alma       appstream   84 k
 pacemaker-cli                    x86_64  2.1.0-8.el8                                        ha         334 k
 pacemaker-cluster-libs           x86_64  2.1.0-8.el8                                        appstream  135 k
 virt-manager-common              noarch  2.2.1-4.el8.alma                                   appstream  889 k
Skipping packages with broken dependencies:
 glibc                            i686    2.28-164.el8                                       baseos     3.4 M
 glibc                            x86_64  2.28-164.el8                                       baseos     3.6 M
 glibc-devel                      x86_64  2.28-164.el8                                       baseos     1.0 M
 glibc-headers                    x86_64  2.28-164.el8                                       baseos     479 k
 glibc-langpack-pt                x86_64  2.28-164.el8                                       baseos     507 k
 iptables-ebtables                x86_64  1.8.4-20.el8                                       baseos      71 k
 mariadb                          x86_64  3:10.3.28-1.module_el8.3.0+2177+7adc332a           appstream  6.0 M
 mariadb-backup                   x86_64  3:10.3.28-1.module_el8.3.0+2177+7adc332a           appstream  6.1 M
 mariadb-gssapi-server            x86_64  3:10.3.28-1.module_el8.3.0+2177+7adc332a           appstream   50 k
 mariadb-server-utils             x86_64  3:10.3.28-1.module_el8.3.0+2177+7adc332a           appstream  1.1 M
 nginx-mod-http-image-filter      x86_64  1:1.14.1-9.module_el8.3.0+2165+af250afe.alma       appstream   34 k
 nodejs-full-i18n                 x86_64  1:10.24.0-1.module_el8.3.0+2047+b07ac28e           appstream  7.3 M
 npm                              x86_64  1:6.14.11-1.10.24.0.1.module_el8.3.0+2047+b07ac28e appstream  3.7 M
 openssh-clients                  x86_64  8.0p1-10.el8                                       baseos     667 k
 openssh-server                   x86_64  8.0p1-10.el8                                       baseos     484 k
 openssl-devel                    x86_64  1:1.1.1k-5.el8_5                                   baseos     2.3 M

Via dnf update continuam aparecendo outros pacotes para atualizar. São pacotes listados no skipping acima e os pacotes de infra que o produto realiza exclude na atualização do SO.

O update através do dnf funcionou, sem problemas de dependências quebradas. Realizado este comando apenas para validar atualização dos RPMs, procedimento não recomendado para ambiente de produção.

Conclusão

Não é possível garantir que em 100% dos casos a atualização ocorrerá de forma transparente. Porém é possível diminuir as chances de apresentar problemas, realizando exclude dos pacotes da itflex, pacotes no repo 3rdparty e pacotes de infra que não atualizamos durante a atualização do SO.

É interessante utilizar o script do Alma Linux, pois ele renomeia diversos campos de CentOS para Alma.

Importante recomendar reboot após atualização, para iniciar com Kernel atualizado.

Necessário, a partir deste spike, definir alterações necessárias no produto e procedimentos recomendados.