Faça o downgrade do GCC para versões mais antigas com o apt-get

1

Por motivos específicos, preciso fazer o downgrade do meu GCC para a versão 2.x usando apt-get (não baixar e compilar a fonte).

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

Desde já, obrigado.

Afshin Mehrabani
fonte
Isso será específico para a versão da distribuição em que você está devido às dependências da biblioteca. Como um aparte, também é melhor que você instale versões antigas do gcc em paralelo ao invés de realmente desclassificar, e use configurações de ambiente para forçar o que você precisa que o gcc compile para usar o gcc mais antigo. Dado o tempo que o gcc 2.x está sem suporte, isso será um desafio, e mesmo que você consiga instalá-lo, substituindo o sistema, o gcc quebrará outras coisas.
Stephanie
Pesquisando isso um pouco mais, e a série 2.x pode não ser utilizável em todas as distribuições modernas. Não tem sido suportado há muito tempo no kernel ( lwn.net/Artigos/163881 ) e o que quer que você esteja tentando compilar, provavelmente tem dependências que também não serão satisfeitas. Se o software que você precisa para compilar não pode ser atualizado para compilar em um gcc mais novo e com bibliotecas mais novas, então sua melhor opção pode ser compilá-lo estaticamente em um chroot de qualquer distribuição suportada pelo último gcc 2.x
Stephanie
@Stephanie Então, como eu posso instalar o v2.x dentro de outras versões?
Afshin Mehrabani
Eu acho que haverá problemas de compatibilidade ABI e "inferno de independência" que tornarão tudo impossível, ou seja, será muito mais fácil atualizar o software para construir uma versão moderna do gcc do que será obtenha uma versão do gcc 2.x para instalar e produzir binários utilizáveis ​​em uma distribuição moderna. A questão é que você não precisa apenas do gcc 2.x aqui, você precisa de todas as dependências que requer, e todas as dependências que o aplicativo que você quer construir requer, e essas coisas não foram mantidas em nada em mais de 9 anos.
Stephanie

Respostas:

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 do sistema não estão tão intimamente acopladas como seriam no FreeBSD no OpenBSD, elas têm uma evolução paralela. Como os últimos holdouts de suporte para o gcc 2.95 ficaram sem suporte no kernel em 2005, também tem suporte para isso nas bibliotecas do sistema central.

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 que a comunidade Linux há muito tempo mudou, criando uma situação de "dependency hell" até 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 o downgrade através de uma dúzia de gerações ou mais de sua distribuição Linux, para uma versão que não é mais suportada, 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 por 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 sensata de obter as versões certas instaladas.

Você provavelmente está olhando para milhares, possivelmente centenas de milhares de horas de trabalho antes que você tenha alguma 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 reiniciar 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 de https://stackoverflow.com/questions/8176798/installing-gcc-2-95-3-in-ubuntu-10-04-3 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 suporte de segurança pela última vez em 2010, portanto, você ainda considera quatro anos de vulnerabilidades de segurança acumuladas.

As versões antigas do Debian que você precisaria para isso são encontradas somente em https://archive.debian.org/debian como eles são totalmente não mantidos neste momento.

debootstrap ( https://wiki.debian.org/Debootstrap ) parece ainda ser capaz de instalar o etch, possibilitando a criação de um chroot funcional, dentro do qual você poderá compilar e rodar programas 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 avançar progressivamente, 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.

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

Stephanie
fonte