Como executar software, que não é oferecido por gerenciadores de pacotes, que requer ia32-libs

Como executar software, que não é oferecido por gerenciadores de pacotes, que requer ia32-libs

Estou tentando instalar o servidor dedicado Arma 2 OA em uma VM Virtualbox para poder testar minhas próprias missões em um ambiente sandbox de uma forma que me permita descarregá-las para outro computador na minha rede. (O outro computador está rodando a VM, mas é uma máquina Windows, e eu não queria me preocupar com sua instalação) Ele precisa de pelo menos 2, e de preferência 4 GB de RAM, então pensei em instalar a versão AMD64 do Ubuntu 13h10 para começar.

'Como você executa um programa de 32 bits em uma versão de 64 bits do Ubuntu?' já explicou como instalar software de 32 bits através do apt-get e/ou dpkg, mas isso não se aplica neste caso.

O servidor é oferecido para download compactado no site da BI Studio, desenvolvedora dos jogos Arma. Suas instruções de instalação estão obviamente um pouco desatualizadas em relação ao estado da arte atual. (provavelmente porque o estado da arte foi atualizado recentemente :)) Ele afirma que preciso instalar o ia32-libs, que aparentemente está obsoleto. Agora tenho que descobrir como instalar os pacotes corretos para ter certeza de que ele será executado.

Meu nível de experiência é intermediário-iniciante quando se trata dessas questões. Eu instalei muitos pacotes através do apt-get; Já resolvi problemas de dependência no passado; Não instalei muitos softwares sem usar gerenciadores de pacotes. Posso cuidar do trabalho administrativo básico, como editar arquivos conf e outros.

Acabei de tentar instalá-lo sem instalar o ia32-libs através do apt-get, mas instalei o gcc para obter as bibliotecas, afinal. Meu raciocínio é que o gcc incluirá os arquivos para codificação de compatibilidade com versões anteriores e no Linux todas as bibliotecas são (até onde eu sei) instaladas no nível do sistema em /libs. Até agora parece começar. (Posso me conectar ao servidor do jogo através do navegador de rede do jogo, para que ele esteja se comunicando). Não tenho certeza se há alguma verificação de dependência ao executar o programa do servidor do jogo, então fico com algumas perguntas:

  • O 13.10 captura alguma chamada para bibliotecas ia32libs e traduz as chamadas para o código correto no amd64?
  • Se for executado, isso significa que todas as bibliotecas necessárias foram carregadas corretamente ou há uma chance de travar mais tarde, quando uma biblioteca necessária estiver faltando, afinal?
  • É necessário fazer uma solução alternativa, como instalar o gcc? (junto com suas bibliotecas i386)
  • Como posso descobrir quais bibliotecas posso precisar para executar este software? (ou qualquer outro software de 32 bits que não seja oferecido por meio de um gerenciador de pacotes)

  • Responder1

    Depende principalmente do software e de como ele foi escrito. Nesses casos, eu optaria pelo binário Debian de 32 bits (se disponível) ou pelo binário compilado de 32 bits. Isso já foi explicado na minha respostaComo você executa um programa de 32 bits em uma versão de 64 bits do Ubuntu?e demonstrou até mesmo rodar uma versão de 64 bits de um sistema de 32 bits (o que era impossível há alguns anos).Na verdade, é mais fácil executar aplicativos de 32 bits em sistemas de 64 bits.

    Normalmente, quando você executa o binário, ele irá informá-lo sobre bibliotecas ausentes, que você pode procurar nos repositórios.

    O 13.10 captura alguma chamada para bibliotecas ia32libs e traduz as chamadas para o código correto no amd64?

    Não. Os desenvolvedores deveriam fazer isso. O sistema mostra apenas as bibliotecas que utilizam o GNU Linker ld. Se o software tentar usar bibliotecas de "código rígido", você terá que enganá-lo e apontá-los para as bibliotecas corretas. Software moderno e bem escrito não precisa disso.

    Se for executado, isso significa que todas as bibliotecas necessárias foram carregadas corretamente ou há uma alteração na falha mais tarde, quando uma biblioteca necessária está faltando, afinal?

    Se funcionar, está perfeito. Através das bibliotecas são carregadas no início do executável, e sem elas (ou seja, algumas delas estão faltando) ele não iniciará, mas mesmo que estejam presentes, nem todas as chamadas são chamadas no início, então talvez uma determinada chamada para uma determinada função mudou a forma como ele se comporta e o aplicativo não suporta isso, causando um travamento. Esses são cenários extremos, mas são possíveis. Portanto, você provavelmente notará se há incompatibilidades com bibliotecas mais recentes. No entanto, esse é outro problema. Para corrigir isso você terá que se adaptar às novas bibliotecas ou fazer o downgrade das já instaladas.

    É necessário fazer uma solução alternativa, como instalar o gcc?

    gccé um compilador. Somente se você for compilar código usando C ou C++ você precisará instalá-lo. Outros casos podem precisar de uma solução alternativa, mas não vi um "binário" (executável já compilado) que precisasse que o gcccompilador fosse executado.

    Como posso descobrir quais bibliotecas posso precisar para executar este software? (ou qualquer outro software de 32 bits que não seja oferecido por meio de um gerenciador de pacotes)

    É um pouco brutal, mas se as instruções não disserem exatamente quais bibliotecas você precisa, use o ld-linux.so --listcomando. Exemplo:

    $ /lib64/ld-linux-x86-64.so.2 --list /bin/bash
        linux-vdso.so.1 =>  (0x00007fffd479f000)
        libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f0d39138000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0d38f34000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0d38b6a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f0d3937f000
    

    (o lddbinário fornece a mesma saída, graças a @ubfan)

    Como você pode ver, bashusa linux-vdso, libtinfo.so, libdl.so e libc.so. Se essas bibliotecas estiverem corretas, bashestamos satisfeitos com elas. Isso é parabinários vinculados dinamicamente. Você pode usar --verifyem vez disso para verificar se o binário está realmente vinculado dinamicamente.

    Então você pega o nome das bibliotecas, digamoslibtinfo.so.5, que está incluído nos pacotes:

    File                                Packages
    /lib/i386-linux-gnu/libtinfo.so.5   libtinfo5 [not amd64]
    /lib/x86_64-linux-gnu/libtinfo.so.5 libtinfo5 [not i386]
    /lib32/libtinfo.so.5                lib32tinfo5 [not i386]
    /lib64/libtinfo.so.5                lib64tinfo5 [not amd64]
    /usr/lib/debug/libtinfo.so.5        libtinfo5-dbg
    /usr/libx32/libtinfo.so.5           libx32tinfo5
    

    Então, só temos que instalar o pacote correto para a arquitetura do binário (se for de 32 bits, adicione :i386ao nome do pacote, 64 bits :amd64) e estaremos prontos para prosseguir.

    Escusado será dizer que para executar binários de 64 bits em uma plataforma de 32 bits, sua CPU deve ser capaz de 64 bits (a maioria dos sistemas de 2008 e posteriores são) e provavelmente exigirá um kernel de 64 bits instalado.

    informação relacionada