Instalación desde la fuente. Cómo resolver dependencias sin destruir el administrador de paquetes

19

Compilar e instalar software es un problema y un problema que no puedo superar. Solo quiero pasar por mi comprensión de este proceso con alguien más conocedor para aclarar mi mente y llegar al siguiente nivel.

Muchos software científicos que necesito no se distribuyen como paquetes. Entiendo que "./configure" configura las variables de compilación y al verificar las dependencias "make", la compilación "sudo make install" coloca todas las bibliotecas y contenedores en su lugar. Sin embargo, nunca funciona. Raramente salgo de la etapa a) "./configure" sin entrar al infierno de dependencias, y si lo hago, b) "sudo make install" probablemente destruirá mi caja.

a) El infierno de dependencia es muy frustrante. A veces tengo la biblioteca, pero no me gusta. O la biblioteca no quiere instalar. O "configurar" no puede encontrarlo. O mi distribución la colocó en algún lugar donde no debería estar. O hay dos versiones en mi sistema. El problema es que no puedo entender cómo diagnosticar y, por lo tanto, solucionar estos problemas. ¿Cuáles son algunas buenas referencias para aprender para alguien que no necesita convertirse en programador?

b) Tengo entendido que "make install" reemplazará algunas bibliotecas y cambiará la configuración sin que mi administrador de paquetes lo sepa. Por lo tanto, algunos programas no se ejecutarán, otros no se pueden actualizar. Entonces, si no uso "make install", y solo mantengo el binario compilado en mi directorio de usuario con un enlace simbólico agregado a la RUTA, ¿estaré en claro?

Mi caja es para un solo usuario, tiene toneladas de HD gratis, así que realmente no me importa tener múltiples (docenas) de copias de bibliotecas si eso resuelve mis problemas. El espacio es barato.

Lenz
fuente
3
No diga qué distribución está utilizando, sería una información interesante. Si ejecuta un derivado de Debian, puede usarlo apt-get build-dep <package>para instalar automáticamente las dependencias necesarias.
Marco
Uso CentOS 6 (para tener lo que usa el súper gurú en nuestro laboratorio), pero solía usar Ubuntu.
Lenz
Bienvenido a la vida de un empaquetador de distribución. Hacer todo este seguimiento de dependencias no es particularmente difícil, pero es un trabajo pesado.
Gilles 'SO- deja de ser malvado'
Consulte Administradores de paquetes no root y quizás otras preguntas etiquetadas como usuario no root que tratan sobre la instalación de software y la administración de paquetes.
Gilles 'SO- deja de ser malvado'

Respuestas:

16

La mayoría de los paquetes tendrán un <package>-dev(para Debian) o <package>-devel(para Red Hat) que serán las bibliotecas necesarias para crear un enlace.

Entonces, por ejemplo, si la fuente dice que lo requiere libxml, en los sistemas basados ​​en Debian encontrará libxml2y libxml2-dev(use apt-cache search <dependancy>para encontrarlos).

Necesitarás el libxml2-devpara construirlo y libxml2ejecutarlo.

El ./configurepaso generalmente admite indicadores como --with-libxml=/usr/lib/apuntarlo a las bibliotecas correctas ( ./configure --helpdebe enumerar todas las opciones). Por lo general, también admite cambiar la ubicación de instalación con --prefix=$HOME/sw. Usar un prefijo fuera de lo que controla su administrador de paquetes es la mejor manera de evitar conflictos con el software instalado del administrador de paquetes.

En Debian y derivados, el uso --prefixde /usr/local/o /opt/local/debería ser seguro.

Si una biblioteca (o versión) que necesita no está disponible desde el administrador de paquetes, simplemente descargue la fuente y compílela usando opciones similares. Lo más importante es usar un --prefixadministrador de paquetes externo y al compilar el software que realmente desea usar --with-<library>=/<path/to/installed/library>.

bahamat
fuente
5

Existe la herramienta auto-aptque se puede utilizar para esto.

Desde man auto-apt :

auto-apt es un programa que verifica el acceso a los archivos de los programas que se ejecutan en entornos de auto-apt. Si un programa accede a un archivo de paquete no instalado, auto-apt instalará el paquete que contiene el archivo, utilizando apt-get.

Se usa de la siguiente manera:

auto-apt run ./configure

Otra forma es usar apt-get build-dep <package>distribuciones basadas en Debian.

Marco
fuente
apt-get build-dep <package>trabajó para mi. ¡Fue frustrante correr ./configureuna y otra vez para aprender un paquete más requerido!
HeatfanJohn
2

Para distribuciones basadas en RPM, usted podría intentar su mano en la creación de los paquetes apropiados (no es que difícil ...).

Los beneficios de un paquete adecuado son que su administrador de paquetes realiza un seguimiento del software y puede replicar fácilmente su configuración en otro lugar / en la próxima máquina. Con un paquete fuente adecuado que se transfiera hacia adelante (la nueva versión ascendente, el parche de corrección de errores, las bibliotecas subyacentes se actualizan) es más fácil que tener que resolverlo todo desde cero la próxima vez.

vonbrand
fuente