¿Cómo mantengo una pila glibc / gcc / ... separada (más nueva) como no root en Linux

10

Nuestro clúster de cómputo ejecuta una versión muy antigua de CentOS, con un Kernel antiguo (2.6.18) y, por supuesto, libs y binarios antiguos. Debido a que actualizar todo requiere mucho trabajo en todos los nodos, esta no es una opción.

Estoy tratando de compilar y usar un programa que requiera C++11y, por lo tanto, versiones más nuevas de gcc(y / o clang). Como no quiero perder el tiempo con el sistema, quiero hacerlo como usuario no root en algún árbol de directorios local.

El problema es que gccrequiere una versión glibcmás nueva que la que está presente en la (s) máquina (s). Por lo tanto, necesito mantener una versión más nueva y separada de glibcmi lib/árbol local , probablemente como se describe aquí .

Donde estoy perdido es, ¿cómo "codifico" las rutas de mis bibliotecas locales en todos los archivos binarios requeridos, es decir gcc, g++etc.? Establecer LD_LIBRARY_PATH en mi lib/árbol local hace que todos los binarios del sistema ya no funcionen ( ELF file OS ABI invalid) porque quieren usar mi nuevo libm.so/ libc.socontra el cual no han sido compilados.

Entonces, para concluir: ¿Cuál es la forma correcta de mantener una pila de desarrollo local más nueva (que contiene glibc, gccetc.) en paralelo a un sistema antiguo sin perder el tiempo como root?

Como pregunta adicional: la configuración LD_LIBRARY_PATH se publica como una solución en todo SE cuando se trata de separar glibc. Para mí, causa los errores anteriores cuando intento ejecutar cualquier sistema binario (como ls). ¿Cómo? ¿Hice algo mal o este es el comportamiento previsto?

janoliver
fuente

Respuestas:

10

Básicamente tienes tres opciones:

  1. Use un contenedor alrededor de sus bibliotecas, que se configurará LD_LIBRARY_PATHadecuadamente y luego ejecutará la biblioteca deseada, algo como:

    #!/bin/sh
    export LD_LIBRARY_PATH="path/goes/here"
    exec "$@"
    
  2. enlace con -rpath( -Wl,rpath) que agrega la ruta de búsqueda para el enlazador dinámico en el binario (vea también la respuesta SO , también menciona el contenedor).

  3. No le gustará leer este: actualice su clúster (tenga en cuenta el énfasis en "su"). Tendrá que hacerse un día u otro, entonces, ¿por qué no hoy? "No es una opción" es un poco fuerte en la mayoría de los casos. Otros usuarios probablemente tengan los mismos problemas.

En cuanto a los viejos binarios que tienen problemas, los binarios tienen su enlazador dinámico preferido incrustado en ellos. Y el viejo enlazador dinámico no entiende el nuevo ABI. Trate de llamar a los binarios como este: path/to/your/ld-linux-<arch>.so binary.

Creación de GCC: siempre puede intentar exportar CFLAGSen el entorno de creación de GCC, pero estoy seguro de que se propagan. Los scripts de compilación de varias distribuciones pueden darle algunas pistas (por ejemplo: para openSUSE, mire alrededor de la línea 1880 en el archivo .spec ).

Peterph
fuente
Hola Peter, gracias por la respuesta. Prefiero la opción 2. Sin embargo, ¿cómo codificaría el rpath en, por ejemplo, gcc, sin tener que cambiar el Makefile, etc.? En cuanto a la actualización del clúster: por supuesto, esto está en nuestra agenda, pero en este momento demasiadas personas lo están utilizando para justificar tiempos de inactividad más largos. Además, para actualizarlo, vamos a contratar nuevamente a la empresa que lo configuró originalmente. No hay nadie en nuestro grupo que tenga suficiente conocimiento y experiencia para esto.
enero
Para GCC ver actualización de mi respuesta. Para la actualización del clúster, mi recomendación personal es obtener un gurú interno (o al menos externo a largo plazo). Por lo general, es más barato y más flexible a largo plazo que simplemente externalizarlo por completo. La ventaja más importante es llevar el conocimiento a casa a través de interacciones entre el administrador del sistema y los usuarios.
Peter
Como un pequeño grupo de investigación en el sistema científico alemán, que no tiene fondos suficientes, lamentablemente no podemos contratar a alguien para esta tarea o invertir el tiempo nosotros mismos. Es posible que tenga razón, que a la larga esto podría ser rentable, pero en este momento los presupuestos son demasiado limitados para algo como esto. Esta es la desventaja de no estar en una empresa. ;)
enero
Obtenga estudiantes de TI / CS de su universidad; uno bueno incluso podría usarlo para su tesis de BSc / Msc. Y con respecto a las finanzas: alégrate de estar en Alemania y no en uno de tus vecinos orientales (tal vez con la excepción de Austria). :)
Peter
Como alternativa a pasar -rpath( -Wl,rpath) al enlazador, el enlazador también agregará las rutas de la LD_RUN_PATHvariable de entorno a la ruta de búsqueda
rakslice