Esta questão parece ter sido resolvida adequadamente em várias perguntas e em outros lugares facilmente encontrados no Google, mas não acho a solução satisfatória pelos motivos explicados abaixo. Mas apenas para conclusão, incluí alguns links relevantes:
/ubuntu/138284/how-to-downgrade-a-package-via-apt-get /ubuntu/428772/how-to-install-specific-version-of -alguns-package / 428.778 /ubuntu/26498/choose-gcc-and-g-version ...
E outros.
No entanto, esta pergunta é sobre a instalação de uma versão muito específica do GCC no Kali Linux, que não parece prontamente disponível como um pacote específico. Em particular, a questão é sobre como instalar a versão 6.3.0, pois preciso dessa versão para compilar um programa específico: https://www.reddit.com/r/Monero/comments/6d0ah8/xmrig_miner_new_release/
(como uma pergunta bônus, se houver uma maneira mais sensata de corrigir esse problema em particular sem usar uma versão diferente do GCC, fique à vontade para responder, mas acredito que essa pergunta é geral e eu gostaria de saber como fazer isso independentemente de como fazer o link do programa mencionado corretamente)
As versões disponíveis para instalação de qualquer pacote, por exemplo, gcc, podem ser determinadas com:
apt-cache showpkg gcc
Que listará as versões disponíveis em "versões:", por exemplo
4:7.2.0-1d1
4:4.9.2-2
A instalação é tão simples quanto emitir
apt-get install gcc:4:4.9.2-2
Isso instalará a versão anterior 4: 4.9.2-2, simplesmente (acredito) substituindo a instalação 7.2.0-1d1, se presente.
Para obter a versão 4: 4.9.2-2 disponível, tive que adicionar deb
http://old.kali.org/kali sana main non-free contrib
ao meu
/etc/apt/sources.list
arquivo e, em seguida, executar apt-get update
.
No entanto, e se a versão necessária não estiver listada?
Eu tenho experimentado várias fontes, por exemplo, as encontradas aqui: http://snapshot.debian.org/ e em várias outras perguntas e sites das pesquisas do Google.
A maioria deles me ignora ou com erros, por exemplo, a seguir
Ign:3 http://snapshot.debian.org/archive/debian/20091004T111800Z lenny InRelease
Mesmo que isso funcione, parece ser uma abordagem muito ruim instalar uma versão específica, pois adicionar uma fonte arbitrária pode não ter a versão específica que eu quero.
Se eu procuro gcc no snapshot.debian.org, recebo apenas versões muito antigas: http://snapshot.debian.org/package/gcc/
Por fim, fiquei frustrado com essa abordagem e compilei o GCC 6.3.0 a partir do tarball de origem. A compilação foi bem-sucedida, mas depois me deparo com a instalação. Eu sou cauteloso sobre a execução make install
como eu temo que irá mexer com apt
e dpkg
e possivelmente quebrar o sistema.
Em vez disso, tentei executá-lo diretamente do diretório de compilação. Tentei simplesmente adicionar o diretório de compilação como a primeira entrada no meu PATH, o que não funcionou. Em seguida, tentei renomear /usr/bin/gcc
e fazer um link simbólico de /usr/bin/gcc
onde meu executável gcc-6.3.0 vive. Isso apresenta o seguinte problema:
cc: error trying to exec 'cc1': execvp: No such file or directory, which
Isso foi corrigido com outra entrada no meu PATH.
Então, eu recebo este erro:
/usr/include/stdio.h:34:21: fatal error: stddef.h: No such file or directory
O que eu assumo é por causa de uma entrada ausente /usr/lib/gcc/x86_64-linux-gnu
. Tentei fazer um link simbólico de 6 a 6.3.0, mas isso não foi suficiente. Eu também tentei copiar tudo com o cp -R
mesmo resultado.
Este deve ser um programa de 64 bits, mas também considerei o mesmo
/usr/lib/gcc/i686-linux-gnu
.
Tenho certeza de que poderia começar a fazer strace
para ver de onde ele tenta abrir os arquivos, ler os arquivos de log, ler a fonte e, eventualmente, imagino que seria capaz de descobrir como hackear uma solução mal concebida. Mas seria bom se alguém pudesse me dizer como fazer isso de maneira sã.