Upgrade do Debian 12 para 13

Saudações.

Esse tutorial é um guia de upgrade a quente do Debian 12 (bookworm) para o Debian 13 (trixie).

O conteúdo a seguir acumula minhas experiências no assunto.

1 – Cuidados com rollback

Antes de atualizar você precisa estar ciente de que há um risco do sistema quebrar.

É uma ótima ideia montar um novo sistema do zero na versão nova (13) e migrar os dados e aplicações e ao final, aposentar o sistema antigo (arquivar, jamais destruir).

Cuidados:

  • Backup: Analise os softwares em execução e faça backup das configurações e dos arquivos;
  • Relatório: Tenha um tutorial próprio de montagem de cada serviço e experimente em laboratório se tudo funciona bem com as novas versões;
  • Snapshot: Se seu sistema está rodando em VM, faça um snapshot quente (com a VM ligada), depois desligue-a e faça um snapshot frio, ligue-a e veja se tudo funciona;

Se você sentir o risco não continue e estude mais.

2 – Pre-Upgrade

Para que o Debian salte da versão 12 para a versão 13 ele deve estar completamente atualizado na versão 12 atual.

  • RUIM: Debian 12.2 => Upgrade para Debian 13.4;
  • BOM: Debian 12.2 => Upgrade até Debian 12.14 => Upgrade geral para 13.4;

2.1 – Cuidado com os programas

Embora pareça simples, o maior problema acontece nos pacotes individuais instalados no sistema.

Se você instalou o MariaDB na versão 12.2, precisará atualizá-lo para a versão mais nova do MariaDB da versão 12.14, o que pode significar mudanças profundas entre as versões do MariaDB e conflitos entre a configuração moderna e sua configuração legado.

Todos os softwares rodando no sistema precisam ser analisados e atualizados individualmente.

2.2 – Cuidado com o Kernel Linux

Outro ponto importante é o KERNEL, atualizar o kernel pode quebrar drivers, principalmente os drivers compilados no framework KMS (Kernel Mode Setting).

Eu enfrentei esse problema ao atualizar dois programas:

  • OpenVPN;
  • NVidia GPU.

Nos dois casos o problema foi da mesma natureza:

  • 1. Ao instalar no Debian 12 (12.8) o pacote compilou o driver DCO para a versão do kernel presente no sistema;
  • 2. Ao realizar o upgrade, um novo kernel foi instalado e ficou no bootloader aguardando o reboot para subir, o que não fiz imediatamente;
  • 3. Os softwares continuaram rodando no kernel atual;
  • 4. Quando a VM reiniciou, o novo kernel subiu e os softwares não tinham o pacote DKMS para ele;
  • 5. Sistema quebrou (parou de rodas minhas IAs na GPU, o OpenVPN ficou sem DCO).

Solução: Sempre reiniciar imediatamente após o upgrade e forçar a atualização dos programas que usam drivers e KSM.

2.4 – Parar serviços

Pare todos os programas. Isso impede que o softwares continuem rodando e gerem arquivos, transações, operações externas que poderão ser perdidas caso você volte ao snapshot anterior ao início do upgrade.

Bash
# Lista todos os serviços ativos
systemctl list-units --type=service --state=running;

# Obs.:
# - ignore "ssh" e "sshd" caso esteja fazendo o upgrade remotamente
# - ignore "bind", "named", "dns" ou "unbound" caso esteja rodando DNS local

# Parar servico, exemplo:
systemctl stop nome_do_servico_aqui;

# - Exemplo: Parando "apache2"
systemctl stop apache2;

Atenção: Anote todos os serviços que você parou com “systemctl stop nome_do_servico” para iniciá-los ao final do tutorial.

2.5 – Preparativos de sanidade

Alguns procedimentos devem ser realizados para garantir que o update e upgrade não passe para versões superiores com problemas não resolvidos na versão atual.

Bash
# Corrige pacotes com problemas
apt --fix-broken install;

# Finaliza configurações pendentes
dpkg --configure -a;

# Verifica o espaco em disco (recomendavel ter no minimo 5 GB livres)
df -h;
df -h /;

# Anotar a lista de pacotes instalados
NOWDT=$(date "+%Y-%m-%d-%T");
dpkg --get-selections '*' > /root/dpkg-packet-list-$NOWDT.txt;

2.6 – Atualizar todos os programas

Vamos atualizar os softwares e o kernel primeiro.

Bash
# Atualizar indice de pacotes
apt -y update;

# Atualizar pacotes instalados para suas respectivas versoes correntes
apt -y upgrade;
apt -y upgrade --without-new-pkgs;

# Atualizar base do debian (ainda dentro da versao corrente)
apt -y dist-upgrade;
apt -y full-upgrade;

# Limpar pacotes velhos:
apt -y autoremove;
apt -y clean;

Execute os comandos acima várias vezes (copie e cole tudo, aguarde, cole tudo novamente). Faça isso até que não haja mais procedimentos de update de pacotes.

CUIDADO: Se o sistema corrompeu ou apresentou falhas em qualquer comando acima, pare. Analise com cuidado e se não conseguir resolver faça rollback da VM (recupere o snapshot).

CONTINUANDO: Se os updates e upgrades de pacotes terminaram com sucesso, faça o reboot para subir o kernel atualizado:

Bash
# Reiniciar para subir kernel atualizado com serviços atualizados
reboot;
# ou:
shutdown -r now;

Você deve repetir os comandos de update e reboot até que o Debian não tenha mais nada para atualizar. Só então você estará livre para realmente fazer o upgrade final.

3 – Atualizando para Debian 13

Agora é a hora de fazer o salto da v12 para a v13.

Pare todos os serviços novamente (capítulo 2.4).

3.1 – Novo repositório

Será preciso configurar o repositório do Debian 13 (trixie) encima do repositório atual (bookworm).

Bash
# Incluir variaveis da distribuicao no shell corrente (o ponto e' o comando)
.  /etc/os-release;

# Backup do arquivo de repositorios principal
cp /etc/apt/sources.list /root/apt-sources-list-$VERSION_ID.backup;

# Substitui todas as menções a 'bookworm' por 'trixie' em 'sources.list'
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list;

# Faz o mesmo para arquivos de configuração adicionais
find /etc/apt/sources.list.d \
    -type f \
    -name '*.list' \
    -exec sed -i 's/bookworm/trixie/g' {} + ;

# - Configurar para usar repositorio do Debian 13 explicitamente
cat > /etc/apt/sources.list << EOF

deb http://deb.debian.org/debian/ trixie main non-free-firmware
deb-src http://deb.debian.org/debian/ trixie main non-free-firmware

deb http://security.debian.org/debian-security trixie-security main non-free-firmware
deb-src http://security.debian.org/debian-security trixie-security main non-free-firmware

deb http://deb.debian.org/debian/ trixie-updates main non-free-firmware
deb-src http://deb.debian.org/debian/ trixie-updates main non-free-firmware

EOF

# Garantir /tmp publico por seguranca
chmod 777 /tmp;

3.2 – Lançar o foguete

Essa é a hora da verdade, o momento em que o sistema será convertido para a nova versão:

Bash
# Iniciar atualizacao
apt -y clean;
apt -y update;
apt -y --fix-broken install;
apt -y autoremove;

# Repetir (1)
apt update;
apt -y upgrade --without-new-pkgs;
apt -y full-upgrade;
apt -y --fix-broken install;
apt -y autoremove;
apt -y clean;

# Repetir (2)
apt -y update;
apt -y upgrade;
apt -y dist-upgrade --autoremove;
apt -y --fix-broken install;
apt -y autoremove;
apt -y clean;

# Repetir (3)
apt -y update;
apt -y upgrade;
apt -y distro-upgrade;
apt -y full-upgrade;
apt -y upgrade --without-new-pkgs;
apt -y --fix-broken dist-upgrade;
apt -y --fix-broken install;
apt -y autoremove;
apt -y clean;

# Remove pacotes de kernel antigos
apt -y autoremove --purge;

# Verifica a versão do sistema operacional
lsb_release -a

Agora reinicie o servidor para subir com o kernel atualizado.

Bash
# Reiniciar para subir kernel atualizado com serviços atualizados
reboot;
# ou:
shutdown -r now;

Após o reboot, execute novamente todos os comandos de update e upgrade.

Atenção: Pegue as notas de todos os serviços que você parou com “systemctl stop” e inicie-os agora com “systemctl start nome_do_servico“.

Concluindo o upgrade, garanta que os serviços foram iniciados

Se tudo está funcionando, parabéns, você é corajoso.

4 – Procedimentos de reparo

Caso você tenha quebrado o sistema e não consiga fazer rollback, você pode tentar recuperar o sistema corrompido com esses truques.

CUIDADO: Execute apenas em caso de emergência, é uma tentativa de recuperar, não há garantias.

Bash
# Fix de emergencia:
dpkg --force-depends --purge apt dpkg;

# Limpar cache de pacotes
rm -rf /var/lib/dpkg/info/*;
rm -rf /var/lib/dpkg/updates/*;
rm /var/lib/dpkg/status;
rm /var/lib/dpkg/available;
touch /var/lib/dpkg/status;
touch /var/lib/dpkg/available;

# Tentar atualizar indice novamente:
dpkg --configure -a;
apt update;
apt install --reinstall dpkg apt;

Se o reparo acima funcionou, execute os comandos do capítulo 3.2 novamente.

Terminamos por hoje!

Patrick Brandão, patrickbrandao@gmail.com

Pele por pele, e tudo quanto o
homem tem dará pela sua vida.
“ha-satan”, o acusador, Jó 2:4
Bíblia Sagrada