Cómo ejecutar software que no se ofrece a través de administradores de paquetes y que requiere ia32-libs

Cómo ejecutar software que no se ofrece a través de administradores de paquetes y que requiere ia32-libs

Estoy intentando instalar el servidor dedicado Arma 2 OA en una máquina virtual Virtualbox para poder probar mis propias misiones en un entorno sandbox de una manera que me permita descargarlas a otra computadora en mi red. (La otra computadora está ejecutando la VM, pero es una máquina con Windows y no quería molestarme con su instalación). Necesita al menos 2, y preferiblemente 4 GB de RAM, así que pensé en instalar la versión AMD64 de Ubuntu. 13.10 para que esto funcione.

'¿Cómo se ejecuta un programa de 32 bits en una versión de 64 bits de Ubuntu?' ya explicó cómo instalar software de 32 bits a través de apt-get y/o dpkg, pero eso no se aplica en este caso.

El servidor se ofrece como descarga comprimida en el sitio de BI Studio, el desarrollador de los juegos Arma. Obviamente, sus instrucciones de instalación están ligeramente desactualizadas con respecto al estado actual de la técnica. (probablemente porque el estado del arte se actualizó recientemente :) ) Indica que tengo que instalar ia32-libs, que aparentemente ahora ha quedado obsoleto. Ahora tengo que descubrir cómo instalar los paquetes correctos para asegurarme de que se ejecute.

Mi nivel de experiencia es como principiante-intermedio cuando se trata de estos temas. He instalado muchos paquetes mediante apt-get; Resolví problemas de dependencia en el pasado; No he instalado mucho software sin usar administradores de paquetes. Puedo manejarme solo con el trabajo administrativo básico como editar archivos conf y demás.

Seguí adelante e intenté instalarlo sin instalar ia32-libs a través de apt-get, sino que instalé gcc para obtener las bibliotecas después de todo. Mi razonamiento es que gcc incluirá los archivos para la codificación de compatibilidad con versiones anteriores y en Linux todas las bibliotecas están (hasta donde yo sé) instaladas a nivel del sistema en /libs. Hasta ahora parece ponerse en marcha. (Puedo conectarme con el servidor del juego a través de mi navegador de red dentro del juego, por lo que se está comunicando) No estoy seguro de si se realiza alguna verificación de dependencia al ejecutar el programa del servidor del juego, así que me quedan un par de preguntas:

  • ¿13.10 detecta alguna llamada a las bibliotecas ia32libs y traduce las llamadas al código correcto en amd64?
  • Si se ejecuta, ¿significa eso que todas las bibliotecas necesarias se han cargado correctamente o existe la posibilidad de que falle más adelante cuando, después de todo, falte una biblioteca que era necesaria?
  • ¿Es necesario realizar una solución alternativa como instalar gcc? (junto con sus bibliotecas i386)
  • ¿Cómo puedo saber qué bibliotecas puedo necesitar para ejecutar este software? (o cualquier otro software de 32 bits que no se ofrezca a través de un administrador de paquetes)

  • Respuesta1

    Depende principalmente del software y de cómo se escribió. En tales casos, optaría por el binario Debian de 32 bits (si está disponible) o el binario compilado de 32 bits. Esto ya fue explicado en mi respuesta.¿Cómo se ejecuta un programa de 32 bits en una versión de 64 bits de Ubuntu?y demostró incluso ejecutar una versión de 64 bits de un sistema de 32 bits (lo cual era imposible hace algunos años).En realidad, es más fácil ejecutar aplicaciones de 32 bits en sistemas de 64 bits.

    Normalmente, cuando ejecuta el binario, le informará de las bibliotecas que faltan, que puede buscar en los repositorios.

    ¿13.10 detecta alguna llamada a las bibliotecas ia32libs y traduce las llamadas al código correcto en amd64?

    No. Los desarrolladores deberían hacer esto. El sistema sólo muestra las bibliotecas que utilizan GNU Linker ld. Si el software intenta utilizar bibliotecas "código duro", entonces hay que engañarlo y señalarle las bibliotecas correctas. Un software moderno y bien escrito no lo necesita.

    Si se ejecuta, ¿eso significa que todas las bibliotecas requeridas se han cargado correctamente, o hay un cambio en la falla más adelante cuando, después de todo, falta una biblioteca que era necesaria?

    Si funciona, es perfecto. Las bibliotecas se cargan al inicio del ejecutable, y sin ellas (es decir, algunas de ellas faltan) no se iniciará, pero incluso si están presentes, no todas las llamadas se llaman al inicio, por lo que tal vez una determinada llamada para una determinada función Cambió la forma en que se comporta y la aplicación no lo admite, lo que provoca un bloqueo. Estos son escenarios de casos extremos, pero son posibles. Por lo tanto, probablemente notará si tiene incompatibilidades con bibliotecas más nuevas. Sin embargo, esa es otra cuestión completamente diferente. Para solucionarlo, tendrá que adaptarse a las nuevas bibliotecas o degradar las ya instaladas.

    ¿Es necesario realizar una solución alternativa como instalar gcc?

    gcces un compilador. Sólo si vas a compilar código usando C o C++ necesitas instalarlo. Es posible que otros casos necesiten una solución alternativa, pero no he visto un "binario" (ejecutable ya compilado) que necesite que el gcccompilador se ejecute.

    ¿Cómo puedo saber qué bibliotecas puedo necesitar para ejecutar este software? (o cualquier otro software de 32 bits que no se ofrezca a través de un administrador de paquetes)

    Es un poco brutal, pero si las instrucciones no dicen exactamente qué bibliotecas necesita, utilice el ld-linux.so --listcomando. Ejemplo:

    $ /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
    

    (el lddbinario proporciona el mismo resultado, gracias a @ubfan)

    Como puede ver, bashutiliza linux-vdso, libtinfo.so, libdl.so y libc.so. Si esas bibliotecas son correctas, entonces bashestoy contento con ellas. Esto es parabinarios enlazados dinámicamente. En su lugar , puede utilizarlo --verifypara comprobar si el binario está realmente vinculado dinámicamente.

    Luego tomas el nombre de las bibliotecas, digamoslibtinfo.so.5, que incluía en los paquetes:

    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
    

    Entonces, solo tenemos que instalar el paquete correcto para la arquitectura del binario (si es de 32 bits, agregarlo :i386al nombre del paquete, 64 bits :amd64) y estaremos listos para comenzar.

    No hace falta decir que para ejecutar binarios de 64 bits en una plataforma de 32 bits, su CPU debe tener capacidad de 64 bits (la mayoría de los sistemas de 2008 y posteriores lo son) y lo más probable es que requiera un kernel de 64 bits instalado.

    información relacionada