Hay un ejecutable que quiero instalar en una computadora que no puedo recompilar y que no se creó como un paquete, y quiero descargar las bibliotecas que requiere para ejecutarlos.
A continuación se muestra parte de la salida que se ejecuta ldd
en él
libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xb6f64000)
libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xb6f43000)
libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb6e9e000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6cf4000)
/lib/ld-linux.so.2 (0xb786e000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6cd3000)
libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xb6b7c000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6b4f000)
¿Existe alguna herramienta que pueda usar esta información para seleccionar qué paquetes deben descargarse o, mejor aún, extraer solo las bibliotecas enumeradas y sus dependencias, para minimizar el uso del disco? El sistema se ejecuta en una máquina virtual sin cabeza y el programa se mostrará a través de VNC.
Aunque sospecho que un escritorio de gráficos completo proporcionará la mayoría de las bibliotecas necesarias, quiero descargar solo las bibliotecas necesarias, sus dependencias y la cantidad suficiente del paquete X Windows para admitirlo.
fuente
Respuestas:
No ha dicho qué sistema operativo está utilizando, por lo que asumiré Linux y usaré Debian como ejemplo. La respuesta rápida a su pregunta es no, que yo sepa. Sin embargo, esta podría ser una solución útil:
Esto analizará la
ldd
salida y luego se ejecutaráapt-cache
(reemplace eso con el equivalente para su sistema operativo) para buscar en los repositorios paquetes cuyo nombre y descripción contengan la primera parte del nombre de la biblioteca devuelta porldd
.Esto no los encontrará a todos y dará demasiados resultados para algunos (como
libc
), pero podría ser útil.@FaheemMitha señaló que
apt-file
podría ser una mejor manera. Por ejemplo:Eso devolverá una lista de nombres de paquetes que proporcionan las bibliotecas vinculadas.
fuente
apt-file search
en el archivo real en el lado derecho de la flecha podría ser más efectivo.apt-get install
se ignorarán todos los que ya estén instalados.La respuesta de @terdon es excelente, pero es aún más fácil hacer esto usando, a
dpkg-query
diferencia de lo queapt-file
está instalado por defecto en los sistemas Debian.Esto produce una lista de paquetes.
fuente
Su mejor opción es encontrar un paquete que realmente respalde su distribución. Pero si eso no va a funcionar para ti, entonces sé otra manera.
Ejecute ldd como lo hizo, luego instale manualmente esas dependencias.
Por ejemplo
libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
Para mí significaría instalar
apt-get install libpango:i386
y rezar para que la versión en Debian inestable fuera lo suficientemente buena.Tendría que pasar por cada línea de ldd, Google, buscar en sus repositorios disponibles y, básicamente, tener suerte. Luego instálelos uno por uno. Hasta que el programa realmente se ejecute. Sin embargo, ldd solo funcionará para programas "simples". Los programas que llaman complementos o que ejecutan código arbitrario son una cuestión completamente diferente. Para aquellos que necesitará ejecutar desde la consola, y corregir los bloqueos / errores a medida que ocurren.
Dicho esto, un ejecutable solo binario es terriblemente difícil de mantener. Es posible que desee considerar el uso de otra cosa. Si su distribución está un poco por delante o un poco por detrás del sistema que creó ese ejecutable, es posible que nunca lo haga funcionar.
fuente