Downgrade o GCC para versões mais antigas com o apt-get

1

Por motivos específicos, eu tenho que fazer o downgrade do meu GCC para a versão 2.x usando apt-get (não baixando e compilando a fonte).

Isso é possível? Se sim, como posso encontrar o endereço do repositório e instalá-lo via apt-get ?

Obrigado antecipadamente.

    
por Afshin Mehrabani 27.05.2014 / 21:51

1 resposta

1

Para todas as intenções e propósitos práticos, o que você está pedindo é impossível, e nos próximos parágrafos há uma explicação do porquê e algumas possíveis soluções alternativas.

Enquanto o gcc, o glibc, o kernel do Linux e outras várias bibliotecas de sistemas não estão tão intimamente acopladas quanto no FreeBSD no OpenBSD, elas têm uma evolução paralela. Como os últimos defensores do suporte para o gcc 2.95 perderam o suporte no kernel em 2005, ele também tem suporte nas principais bibliotecas do sistema.

Apenas instalar uma versão 2.x do gcc em um sistema moderno seria um obstáculo significativo por causa de todas as dependências envolvidas - isso depende de versões mais antigas de bibliotecas de sistema das quais a comunidade Linux há muito tempo mudou, criando uma situação de "dependency hell" até mesmo para instalar a partir do código-fonte, muito menos tentar instalar a partir de pacotes - as dependências provavelmente forçariam você a fazer downgrade de uma dúzia de gerações ou mais de sua distribuição Linux para uma versão que não é mais apoiado, mas também terrivelmente inseguro.

Depois de instalar o gcc, você ainda tem o problema de compilar seu aplicativo - e as bibliotecas do sistema mudaram tanto quanto ou mais do que o gcc, então você teria que passar por todo esse processo novamente para dezenas, talvez centenas de outras dependências. Todas essas dependências, é claro, já estão sendo usadas em outros lugares do sistema, não deixando nenhuma maneira sadia de obter as versões certas instaladas.

Você provavelmente está olhando para milhares, possivelmente centenas de milhares de horas de trabalho antes de ter qualquer chance de fazer todas as peças funcionarem novamente e, ao longo do caminho, você teria transformado seu sistema em algo tão inatingível e instável que, mesmo reiniciando o sistema, seria um exercício de fé cega, e você teria reintroduzido mais de uma década de sérias vulnerabilidades de segurança em seu sistema.

Soluções alternativas

Toda a esperança, no entanto, não está perdida. As soluções de curto prazo são um chroot ou virtualização. uma das respostas do link menciona que O Debian Etch foi uma das últimas distribuições a ter suporte ao gcc 2.95. Construir um chroot do Debian Etch ou uma máquina virtual deve ser possível. Esta distribuição recebeu o último suporte de segurança em 2010, portanto, você ainda analisa quatro anos de vulnerabilidades de segurança acumuladas.

As versões antigas do Debian que você precisaria para isso são encontradas apenas no link , pois elas são completamente não-mantidas neste ponto.

O debootstrap ( link ) parece ainda ser capaz de instalar o etch, tornando possível construir um chroot funcional, dentro do qual você poderá compilar e executar softwares antigos.

Dadas as implicações de segurança, a solução de longo prazo tem que ser atualizar o código para compilar em uma distribuição moderna e atualmente suportada o mais rápido possível. A menos que o software em questão esteja sendo usado para um propósito único, como a recuperação de dados de uma versão mais antiga de um programa, isso é absolutamente crítico.

Uma solução viável para tornar este processo de portabilidade gerenciável pode ser progressivamente avançar, avançar e corrigir os problemas de compilação para cada versão do Debian interveniente, antes de finalmente atualizar o código para a versão mais recente do Ubuntu. Como o Debian tem um ciclo de lançamento muito mais longo do que o Ubuntu e uma compatibilidade decente, isso não deve ser uma tarefa muito intransponível, e quase certamente será mais viável do que portar o gcc 2.x para o Ubuntu mais recente.

Editar: Etch é realmente perfeito para grande parte do esforço de portabilidade - ele suporta versões do gcc de 2,95 para 4,1, tornando assim possível atualizar seu código antigo em pequenos passos.

    
por 28.05.2014 / 02:23