Instale programas de 64 bits em um sistema operacional de 32 bits com um processador de 64 bits

9

Estou curioso. É possível instalar um programa de 64 bits em um sistema operacional de 32 bits com um processador de 64 bits?

Estou executando o Linux em um raspberry pi 3 e tento instalar uma nova versão do MongoDB:

armv7l GNU/Linux
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
    
por crellee 11.12.2017 / 16:22

5 respostas

19

Is it possible to install a 64 bit program on a 32 bit OS with a 64 bit processor?

Em princípio sim, mas o processador e o sistema operacional precisam suportá-lo.

No ARMv8, um kernel de 32 bits (Aarch32) não pode executar processos de 64 bits (Aarch64). Esta é uma limitação do processador.

Existem outros processadores que não têm essa limitação, por exemplo, é possível executar processos x86_64 em cima de um kernel x86_32 em um processador x86_64, mas poucos kernels suportam, supostamente porque é de utilidade limitada (principalmente, você economiza um pouco de RAM no kernel, tornando-o de 32 bits). O Linux não suporta isso, mas o Solaris faz isso.

Você pode manter seu sistema operacional de 32 bits existente se executar um kernel de 64 bits. Um kernel Linux Aarch64 pode executar processos Aarch32. O Raspbian não suporta isso imediatamente, então você precisa manter um sistema operacional de 32 bits e um sistema operacional de 64 bits. Você pode usar um como o sistema operacional principal (ou seja, aquele que executa o init e os serviços do sistema) e o outro para executar um programa específico usando o chroot. Veja Como faço para executar programas de 32 bits em um Debian / Ubuntu de 64 bits? para uma abordagem prática.

Note que você precisará instalar todas as bibliotecas que o programa de 64 bits requer. Qualquer processo determinado deve ser totalmente de 32 bits ou totalmente de 64 bits, portanto você não pode usar uma biblioteca de 32 bits em um executável de 64 bits.

A menos que você tenha strongs motivos para manter um sistema de 32 bits, se precisar executar um executável de 64 bits, seria mais fácil instalar um sistema de 64 bits.

Observe que a única coisa que os programas de 64 bits podem fazer, mas que os programas de 32 bits não conseguem, é endereçar mais de 3 GB de memória virtual, que é de utilidade limitada em um sistema com 1 GB de RAM. Você pode obter benefícios de desempenho dos registradores maiores e maiores, mas também perderá o desempenho dos acessos extras à memória.

    
por 11.12.2017 / 18:59
5

Em algumas arquiteturas, sim. Mas não no ARM ou x86.

Você pode usar o QEMU para emular um sistema de 64 bits, mas não deseja.

    
por 11.12.2017 / 16:26
3

Eu diria que não é impossível, mas é muito difícil de administrar. Como um SO de 32 bits geralmente é empacotado com (e aceita) apenas binários e bibliotecas de 32bits, você precisaria ajustar o sistema para fazê-lo funcionar com 64bits.

O principal problema que você estaria enfrentando com um RPI3 é a falta de kernel de 64bits (pelo menos com raspbian).

Longa história: use binários de 32 bits e você ficará bem.

EDITAR:

Se você quiser usar um kernel de 64bits, você precisará instalar uma distro que suporte a arquitetura ARM64. Você deve dar uma olhada no ArchLinux ARM ( aqui ), mas ele não é totalmente suportado.

As informações que você procura estão na parte inferior da guia de instalação.

Você também pode dar uma olhada em uma porta debian oficial , mas ainda há grandes problemas com a porta RPI3, então é para você decidir se vale a pena o problema

    
por 11.12.2017 / 16:28
3

Atualize somente o seu kernel para um de 64 bits, assim você poderá executar binários de 64 bits. Essencialmente, ele executará toda a sua distribuição no modo compat de 32 bits, e seu único mongodb de 64 bits será seu modo normal.

Mas não merece seu preço. Melhor mudar o seu mongodb para 32 bits. No entanto, neste caso, há uma limitação, que seu banco de dados não pode ser maior como 2 GB, uma vez que mapeia diretamente o todo na memória virtual. Se o seu banco de dados for maior, apenas a atualização do kernel permanecerá. (Obrigado @duskwuff a extensão!)

Btw, se o seu banco de dados não quiser uma carga muito grande, ou você pode usar alguma solução de armazenamento em cache antes dele (por exemplo: outro, mas 32 bits mongo), então a emulação da CPU poderia funcionar. Para isso, inicie um googling para "qemu qemu-system-x86_64". Embora tal solução tenha uma necessidade de trabalho inviável e possa ser considerada estranha no ambiente produtivo.

No seu lugar, eu usaria o mongo de 32 bits se fosse para o meu banco de dados o suficiente, ou um kernel de 64 bits se não fosse.

    
por 11.12.2017 / 20:16
0

Eu usei um kernel de 64 bits com um sistema de 32 bits por um bom tempo (esse é o pré-requisito mínimo para executar executáveis de 64 bits nativamente, além de todas as bibliotecas de 64 bits requeridas). Eu não recomendaria. O que finalmente me fez atualizar para um sistema de 64 bits foi a constatação de que os cabeçalhos da ALSA, particularmente no que diz respeito a ligações MIDI, não eram independentes do tamanho, significando que as coisas compiladas no modo de 32 bits não interoperariam bem com o kernel de 64 bits.

É claro que isso pode ser considerado um bug que vale a pena consertar, mas o ritmo do desenvolvimento de ALSA está congelado e eu não podia esperar por alguns anos para que o suporte a plataformas mistas fosse corrigido (e de maneira não-binária compatível executáveis não mistos) quando o interesse em plataformas mistas está diminuindo rapidamente de qualquer maneira.

Para alguns aplicativos, o material funciona em modo misto (surpreendentemente, na verdade), mas se você estiver fazendo mais do que a parte básica da interface com o kernel, mesmo através de bibliotecas externas, é apenas um otimismo excessivo.

    
por 12.12.2017 / 15:55