Problemas de compatibilidade na atualização

Este problema surge com maior frequência, quando surge uma mudança de versão. Como exemplo, a atualização do PHP 5.3 para 5.4, pois na mudança de versão, muitas funções são abandonadas e são criadas outras funções mais eficientes e seguras do que a versão anterior, porém, muitas vezes o código não acompanha estas mudanças.

Recentemente tive um problema, estava usando o Joomla na versão 1.5.26, que possui compatibilidade com o PHP 5.3 porém, quando atualizar para o PHP 5.4, várias coisas pararam de funcionar por perda de compatibilidade.

Nestes casos, a decisão do administrador é não atualizar a máquina, porém, existem outros pacotes que necessitam de atualização para que o servidor mantenha a segurança e estes, são renegados em detrimento de um ou outro pacote.

Um caso recente divulgado, foi a falha de segurança do openSSL, muitos administradores ainda não atualizaram seus servidores com medo de prejudicar as outras aplicações que rodam no servidor.

Vou ensinar neste artigo, uma forma simples de manter seu servidor atualizado e prevenir que alguns pacotes sejam atualizados, não prejudicando a compatibilidade de alguma aplicação.

Levantamento de pacotes

Primeiramente, levante quais os pacotes que você precisa que não sejam atualizados.

Faça o seguinte:

# dpkg -l | grep pacote

Vou utilizar como exemplo, os pacotes do PHP5, mas poderá ser qualquer pacote que você deseja que não seja atualizado.

# dpkg -l | grep php

libapache2-mod-php5

php5-common

php5-curl

php5-gd

php5-mysql

etc….

Nesta fase, tente não esquecer de nenhum pacote que não quer que seja atualizado.

Ocultando pacotes da atualização, usando dpkg

Agora, vamos ocultar os pacotes da atualização. Existem várias formas de fazer isso, vou apresentar todas aqui:

Primeira forma- Ocultando o pacote da atualização:

# echo “nome_do_pacote hold” | sudo dpkg –set-selections

Exibir o pacote para atualização:

# echo “nome_do_pacote install” | sudo dpkg –set-selections

Exibindo o status dos pacotes:

# dpkg –get-selections

Exibindo o status de um pacote:

# dpkg –get-selections | grep “nome_do_pacote”

Ocultando pacotes da atualização, usando apt

Segunda forma- Ocultando pacotes da atualização:

# apt-mark hold nome_do_pacote

Exemplo:

# apt-mark hold libapache2-mod-php5 php5-common php5-curl php5-gd php5-mysql

Exibindo pacote para atualização:

# sudo apt-mark unhold nome_do_pacote

Exemplo:

# apt-mark unhold libapache2-mod-php5 php5-common php5-curl php5-gd php5-mysql

Ocultando pacotes da atualização, usando aptitude

Terceira forma- Ocultando pacotes da atualização:

# aptitude hold nome_do_pacote

Exemplo:

# aptitude hold libapache2-mod-php5 php5-common php5-curl php5-gd php5-mysql

Exibindo pacote para atualização:

# aptitude unhold nome_do_pacote

Exemplo:

# aptitude unhold libapache2-mod-php5 php5-common php5-curl php5-gd php5-mysql

Espero que este artigo possa ajudar a manter seu servidor sempre atualizado e sem problemas de incompatibilidade.