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

2

Estou tentando instalar o servidor dedicado do Arma 2 OA em uma VM Virtualbox para que eu possa testar minhas próprias missões em um ambiente sandbox de uma maneira que me permita descarregá-las em outro computador da minha rede. (O outro computador está rodando a VM, mas é uma máquina windows, e eu não queria incomodar com sua instalação) Ele precisa de pelo menos 2, e preferencialmente 4GB de memória ram, então eu pensei em instalar a versão AMD64 do ubuntu 13.10 para fazer isso acontecer.

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

O servidor é oferecido como um download comprimido no site do BI Studio, o desenvolvedor dos jogos Arma. Suas instruções de instalação estão obviamente ligeiramente desatualizadas com o atual estado da arte. (provavelmente porque o estado da arte foi atualizado recentemente :)) Ele afirma que eu tenho que instalar o ia32-libs, que agora foi aparentemente obsoleto. Agora eu tenho que descobrir como obter os pacotes certos instalados para ter certeza de que eles serão executados.

Meu nível de experiência é como novato intermediário quando se trata dessas questões. Eu instalei muitos pacotes através do apt-get; Eu resolvi problemas de dependência no passado; Eu não instalei muito software sem usar gerenciadores de pacotes. Eu posso lidar com o trabalho administrativo básico, como editar arquivos conf e tal.

Eu apenas fui em frente e tentei instalá-lo sem instalar o ia32-libs através do apt-get, mas para instalar o gcc para obter as bibliotecas depois de tudo. Meu raciocínio é que o gcc incluirá os arquivos para codificação com compatibilidade reversa e no linux todas as libs são (até onde eu sei) instaladas no nível do sistema em /libs . Até agora parece começar. (Eu posso conectar com o servidor do jogo através do meu navegador de rede no jogo, então está se comunicando) Eu não tenho certeza se há alguma verificação de dependência acontecendo ao executar o programa do servidor do jogo, então eu fiquei com algumas perguntas:

  • O 13.10 captura todas as chamadas para bibliotecas ia32libs e traduz as chamadas para o código correto em amd64?
  • Se ele for executado, isso significa que todas as bibliotecas necessárias foram carregadas corretamente ou há uma chance de ocorrer uma falha mais tarde, quando uma biblioteca que é necessária está ausente, afinal?
  • É necessário fazer uma solução alternativa, como instalar o gcc? (junto com suas libs i386)
  • Como descubro de quais bibliotecas eu preciso para executar este software? (ou qualquer outro software de 32 bits que não seja oferecido através de um gerenciador de pacotes)     
  • por Onno 01.11.2013 / 16:21

    1 resposta

    3

    É principalmente depende do software e como foi escrito. Nesses casos, eu usaria o binário de 32 bits do Debian (se disponível) ou o binário compilado de 32 bits. Isso já foi explicado na minha resposta Como você executa um programa de 32 bits em uma versão de 64 bits do Ubuntu? e demonstrado mesmo rodando uma versão de 64 bits de um sistema de 32 bits (o que era impossível alguns anos atrás). É realmente mais fácil executar aplicativos de 32 bits em sistemas de 64 bits.

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

      

    13.10 captura qualquer chamada para bibliotecas ia32libs e traduz as chamadas para o código correto em amd64?

    Não. Os desenvolvedores devem fazer isso. O sistema mostra apenas as bibliotecas usando o GNU Linker ld . Se o software tentar usar bibliotecas "hard-code", você terá que enganá-lo e apontá-lo para as bibliotecas certas. Software moderno e bem escrito, não precisa disso.

      

    Se ele for executado, isso significa que todas as bibliotecas necessárias foram carregadas corretamente ou haverá uma alteração mais tarde, quando uma biblioteca necessária estiver ausente, afinal?

    Se for executado, é perfeito. Através de bibliotecas são carregadas no início do executável, e sem elas (ou seja, algumas delas estão faltando) ele não será iniciado, mas mesmo se elas estiverem presentes, nem todas as chamadas são chamadas no início, então talvez uma determinada chamada para uma determinada função mudou a maneira como se comporta e o aplicativo não suporta isso, levando a uma falha. Estes são cenários de casos de canto, mas eles são possíveis Então você provavelmente notará se tiver incompatibilidades com bibliotecas mais novas. No entanto, essa é outra questão. Para corrigir isso, você terá que se adaptar às novas bibliotecas ou fazer o downgrade do já instalado.

      

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

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

      

    Como descubro de quais bibliotecas eu preciso para executar este software? (ou qualquer outro software de 32 bits que não seja oferecido através de um gerenciador de pacotes)

    É um pouco brutal, mas se as instruções não dizem exatamente quais bibliotecas você precisa, ou usam o comando ld-linux.so --list . 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 binário ldd fornece a mesma saída, graças a @ubfan)

    Como você pode ver, bash usa o linux-vdso, libtinfo.so, libdl.so e libc.so. Se essas bibliotecas estiverem corretas, bash ficará feliz com elas. Isso é para dinamicamente vinculados a binários . Você pode usar --verify para verificar se o binário está realmente vinculado dinamicamente.

    Então você pega o nome das bibliotecas, digamos libtinfo.so.5 , que incluiu 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
    

    Portanto, basta instalar o pacote correto para a arquitetura do binário (se for de 32 bits, adicionar :i386 ao nome do pacote, 64 bits :amd64 ) e seremos bons vai.

    Agulhas para dizer, para executar binários de 64 bits em uma plataforma de 32 bits, sua CPU deve ter capacidade de 64 bits (a maioria dos sistemas de 2008 e posteriores) e provavelmente precisará de um kernel de 64 bits instalado.

        
    por Braiam 01.11.2013 / 17:23