¿Existe un método fácil para instalar compilaciones binarias de glibc?

13

Una y otra vez veo preguntas como estas:

Y estos son los tipos de soluciones que normalmente promovemos:

¿Es esto realmente lo mejor que podemos hacer? ¿No hay compilaciones binarias de GLIBC que simplemente podemos descomprimir en un directorio como /opt/myglibc, y configurar $LD_LIBRARY_PATHo lo que sea y ejecutar la aplicación que queramos, sin problemas?

¿Una aplicación, como las versiones más recientes de Chrome (28+) que parecen requerir GLIBC 2.14?

NOTA: Este hilo titulado: Google Chrome 29 lanzado - Instalar en RHEL / CentOS 6 y Fedora 19/15 en tecmint.com es lo que finalmente me hizo pensar en esto.

Referencias

slm
fuente

Respuestas:

1

Si fuera por cualquier otra biblioteca, pero glibc ... Supongo que no puede haber formas rápidas, porque glibc es el lugar donde las cosas están "codificadas". El glibc se ajusta a la versión de su kernel y su cargador es la instancia con la que realmente hace lo correcto (TM) LD_LIBRARY_PATH.

Quizás la forma correcta es:

LD_LIBRARY_PATH="/opt/myglibc/;..." /opt/myglibc/ld-linux.so.2 the_program`

Sin embargo, no estoy seguro de si esto funciona.

En cualquier caso, creo que usar un glibc alternativo requiere un marco aún para implementar, porque las rutas de búsqueda a veces están conectadas y el glibc siempre tiene que adaptarse a su sistema operativo / kernel, por lo que no puede haber binarios genéricos, IMO. El multiarch de Debian muestra que no es trivial, pero aún se puede hacer. Si uno tuviera algún otro medio de discernir bibliotecas además de la arquitectura de destino.

El sitio web me dio este otro hilo relacionado:

Allí, la respuesta aceptada incluye un enlace a un programa llamado rtldi , que parece resolver el problema de glibc. Es de 2004, por lo que es posible que ya no funcione directamente desde el enlazador, pero tal vez valga la pena analizarlo. Su fuente es GPLv2.

Jehová, Jehová

Una vez, a un amigo mío se le ocurrió la idea de que el uso real de las bibliotecas compartidas está sobrevalorado. Y tiene un punto: las bibliotecas compartidas son buenas para no llenar la memoria de su computadora con duplicados, pero teniendo en cuenta la instancia de la aplicación individual, esto es solo unos pocos MB.

Solo hay unas pocas aplicaciones en las que recurriríamos a acciones como proporcionarles su propio glibc. Ahorrándonos un análisis extenso, llamémoslas "aplicaciones inmediatas", que son de utilidad por sí mismas, en el sentido de hacer el trabajo. Por ejemplo, los navegadores web, los agentes de usuario de correo, los trajes de oficina y los reproductores de música permiten al usuario obtener lo que desea y solo hay unas pocas instancias por usuario. Para retratar el otro lado, los servicios del sistema, los administradores de ventanas, incluso entornos de escritorio completos son muy importantes, pero meramente compatibles y, a menudo, no lo suficientemente poco comunes o críticos, para que las personas estén dispuestas a darles su propio glibc.

El número de "aplicaciones inmediatas" es bastante pequeño, absolutamente por usuario y relativamente comparado con lo que generan los SO y DE "básicos" en estos días. Si las aplicaciones inmediatas, como Chrome, Firefox se compilaran estáticamente, el requisito de memoria adicional para el sistema promedio sería de unos 100 MB. Un argumento que no llega muy lejos en los muchos sistemas GB actuales, por lo que la vinculación estática para aplicaciones inmediatas puede ser una opción.

También existen los conceptos de espacio de intercambio y SSD que permiten un intercambio / salida ridículamente rápido, lo que también ayuda a manejar el requisito de memoria aumentada.

El problema de glibc discutido aquí no se resuelve realmente a través del enlace estático, pero para aplicaciones como el navegador web es concebible una especie de formato de distribución autónomo, donde el protocolo X, algunos demonios de sonido y algunos métodos de kernel son la única interfaz. La ventaja sería menos incompatibilidades de versión de biblioteca.

Bananguin
fuente
2
"Estamos hablando de unos 100 MB aquí" Uh, no. Aunque la mayor parte de las bibliotecas en sí pueden no ser tanto (pero probablemente un orden de magnitud o dos más de 100 MB, intente du -h /lib), tenga en cuenta que si se compilaran estáticamente, esa cantidad de RAM sería necesaria para cada y cada aplicación compilada con ellos. Entonces si, por ejemplo. tienes dos aplicaciones que usan la misma pila de biblioteca, ahora necesitarás el doble de memoria. Tres aplicaciones? Tres veces más. Sin mencionar que negaría en gran medida los beneficios del almacenamiento en caché ...
Ricitos de Oro
2
... ya que, por supuesto, no podría simplemente almacenar en caché glibc, tendría que almacenar en caché copias de todas las aplicaciones que se ejecutan (== ridículo). En resumen, los sistemas operativos modernos serían totalmente imposibles en el hardware moderno si no fuera por las técnicas modernas, como los objetos compartidos. No necesitaría solo un poco más de memoria, necesitaría 10 o 100 veces más memoria.
Ricitos de oro
Mi Debian tiene 235 MB /lib, de los cuales 202 MB son módulos del núcleo. Sí, /usr/libes de 4 GB, pero eso no permite ninguna conclusión sobre cuánto requiere el programa individual. Los cachés de los procesadores son solo unos pocos MB. Con el consumo de memoria de algo así como un navegador web reciente, el impacto de los archivos binarios enlazados estáticamente en el almacenamiento en caché tampoco es tan grande y disminuye con la cantidad de programas que se ejecutan simultáneamente; También por el motivo de cachés relativamente pequeños. Mis estimaciones parecen más precisas que las tuyas. Uh si.
Bananguin
Sin mencionar el otro gran problema con el enlace estático: las actualizaciones son un PITA. Si hay un problema de seguridad en glibc, no es gran cosa: actualice glibc, reinicie sus programas. OTOH, si sus programas estuvieran vinculados estáticamente, tendría que descargar una nueva versión de cada programa. Y su distribución habría tenido que volver a compilar (o al menos volver a vincular, si conservaron todos los archivos .o, poco probable debido al gran tamaño) de toda la distribución.
derobert
1
@derobert: Parece justo. Claramente, mis afirmaciones eran hiperbólicas: aquí con 1,8 GB comprometidos que arrojaron 521 MB. Entonces eso sería un aumento del 30%. Por supuesto, eso todavía no es un punto de venta para una estrategia que no tiene ventajas (pero "solo requiere un 30% más de RAM").
Ricitos de oro