Cómo compilar e instalar programas desde la fuente


39

Este es un problema que realmente limita mi disfrute de Linux. Si la aplicación no está en un repositorio o si no tiene un script de instalación, entonces realmente me cuesta dónde y cómo instalar una aplicación desde el origen.

En comparación con Windows, es fácil. Se requiere (más o menos) usar una aplicación de instalación que haga todo el trabajo en un asistente. Con Linux ... no tanto.

Entonces, ¿tiene algún consejo o instrucciones sobre esto o hay algún sitio web que explique explícitamente cómo, por qué y dónde instalar programas Linux desde la fuente?


77
"En comparación con Windows, es fácil. Se requiere (más o menos) usar una aplicación de instalación que haga todo el trabajo en un asistente. Con Linux ... no tanto". Ahí está el punto débil de la pregunta. Con Windows, rara vez obtienes el código fuente, por lo que estás a merced de quien hizo el paquete. Si piensa en esto, no es muy diferente de decir "no había un paquete de Linux, así que tengo que construir desde la fuente", es decir. no había forma de conseguirlo para empezar. La construcción desde la fuente suele ser el último recurso en * nix-land, pero rara vez es una opción en Windows-ville.
Avery Payne

2
Dicho esto ... +1 golpe por hacer una pregunta común que debería responderse para todos los recién llegados a los sistemas * nix. :) Construir desde la fuente a veces significa la diferencia entre arreglar un error desagradable y sufrir hasta la próxima versión del software. Realmente no es tan malo, y como muchos aquí han señalado, una vez que sabes qué buscar y cómo hacerlo, es bastante indoloro.
Avery Payne

Respuestas:


22

Normalmente, el proyecto tendrá un sitio web con instrucciones sobre cómo construirlo e instalarlo. Google para eso primero.

En su mayor parte, usted hará:

  1. Descargue un tarball (archivo tar.gz o tar.bz2), que es una versión específica del código fuente
  2. Extraiga el tarball con un comando como tar zxvf myapp.tar.gzpara un tarball comprimido o tar jxvf myapp.tar.bz2para un tarball comprimido
  3. cd en el directorio creado anteriormente
  4. correr ./configure && make && sudo make install

O:

  1. Use git o svn o lo que sea para extraer el último código fuente de su repositorio fuente oficial
  2. cd en el directorio creado anteriormente
  3. correr ./autogen.sh && make && sudo make install

Tanto configure como autogen.sh aceptarán un argumento --prefix para especificar dónde está instalado el software. Recomiendo revisar ¿Dónde debo poner el software que compilo yo mismo? para obtener asesoramiento sobre el mejor lugar para instalar software personalizado.


¿Por qué se usa autogen.sh cuando se obtiene la última versión, pero configure / make se usa para un lanzamiento oficial?
Louis Salin

1
Por lo general, las personas que desean el software "de vanguardia" sacarán la versión del software de control de versiones (como git, subversion o CVS). Este es un "borde sangrante" porque probablemente no ha sido probado, a diferencia de un tarball lanzado, que (probablemente) ha sido comprobado como funcionando (al menos en su mayoría). ¿Tener sentido?
Matt Simmons

2
@ Matt, seguro que tiene sentido, pero creo que el comentario se dirigió más al hecho de que Sandy ahora lo hizo parecer como si hubiera un autogen.sh en cada tronco git'd / svn'd.
reiche

1
Y un pollo en cada olla ... o algo así. Diablos, de vez en cuando, me encuentro con un software sin un script de configuración, también. Si hubiera una manera fácil y unificada de hacerlo, no necesitaríamos paquetes ;-)
Matt Simmons

Matt tiene toda la razón, es por eso que dije "en su mayor parte", y primero abogé por buscar el sitio web del proyecto. El consejo autogen.sh/configure se mantendrá para casi todos los módulos de GNOME, y también para una tonelada de otros proyectos. Algunos proyectos no usan automake, y solo tendrán Makefile, y solo se ejecutará make && sudo make install. Algunos proyectos de Python solo tendrán un setup.py, al que llamará para instalar (ya que no existe una configuración de compilación real). También hay muchos otros sistemas de compilación / instalación. Esperemos que los archivos README o INSTALL expliquen exactamente qué hacer.
Sandy

3

Solo quiero agregar que hay administradores de paquetes que compilan paquetes desde el origen y manejan todas las dependencias de paquetes, marcas, etc.

En sistemas BSD es ports: Usar la colección de puertos

En Debian, el apt-getadministrador de paquetes también puede instalar desde la fuente: APT HOWTO: trabajar con paquetes fuente (lo mismo ocurre con Ubuntu, Linux-mint y todo lo demás basado en Debian)

La distribución Gentoo utiliza el portageadministrador de paquetes, que compila todo el sistema solo desde el origen: Introducción a Portage .

Slackware puede compilar paquetes, pero no sé si hay algún administrador de paquetes para esto allí ... =)

De todos modos, siempre puede compilar paquetes manualmente como Sandy mencionó anteriormente =) También debe ser posible usar apt-geto portageadministrar los paquetes en cualquier otra distribución ...


1
Decir "el administrador de paquetes apt-get puede instalar desde la fuente" es incorrecto. La sección citada describe cómo se puede crear un paquete Debian a partir de fuentes Debian . No fuentes arbitrarias aguas arriba.
Faheem Mitha

2

Creo que es mejor leer la documentación que viene con ese programa o aplicación específica que desea instalar. Por lo general, hay archivos Léame / READMEs dentro de los tarballs (el archivo fuente de la aplicación que generalmente puede descargar) o incluso INSTALAR archivos para leer y aprender cuál es la forma preferida de instalar dicha aplicación. En resumen: RTFM;)


Vine aquí porque el archivo README dio todos los requisitos para construir bajo Linux, pero solo tiene las instrucciones de instalación de Windows. La respuesta aceptada funcionó para mí y probablemente funciona la mayor parte del tiempo. Creo que es un consejo casi mejor probar la ruta ./configure e ir al README si no funciona (es decir, falta una dependencia y no puede leer la salida del compilador).
Stephen C

1

Un resumen para usar la Colección de Puertos en FreeBSD:

Encontrar puerto

Los puertos están organizados por categoría, por lo que si no sabe en qué categoría se encuentra el puerto, primero debe encontrarlo:

cd /usr/ports
make search name=myport

A veces hay demasiadas entradas de esa manera. Yo personalmente prefiero:

find /usr/ports -name myport* -print -depth 2

Utilice el *al buscar ya que a menudo hay múltiples versiones de un puerto disponibles. El argumento de profundidad garantiza que sus resultados de retorno no estén innecesariamente saturados de coincidencias que probablemente no desee.

Configuración

A menudo, querrás hacer alguna configuración; software como Apache y Postgres prácticamente lo requieren. Hay tres opciones principales: línea de comando, entorno y hacer archivos de configuración. Para comenzar con la línea de comando:

make showconfig

esto enumerará las opciones de configuración predeterminadas. Si le gustan los valores predeterminados, está listo para compilar e instalar. Si no,

make config

Aparecerá un cuadro de diálogo donde puede seleccionar las opciones que desee. (¡No se confunda con esto y make configureque configura su puerto con las opciones elegidas!) Esto a menudo es suficiente, pero para algunos software, como Apache, a menudo hay una configuración compleja que un simple diálogo no manejará. Para esto, también debe mirar los Makefile (s) que a veces le darán algunos objetivos adicionales para hacer que le brindarán más información. Para continuar con el ejemplo de Apache

make show-modules
make show-options
make show-categories

le dará información sobre cómo configurar los módulos elegidos, las opciones de subprocesos y similares. Si los valores predeterminados de su puerto están en su mayoría bien y solo desea cambiar algunas cosas, también puede pasar pares clave = valor como variables de entorno:

make MYVBL1=MYVAL1 ... install clean

Además, puede configurar las opciones de cambio a través de la -Dopción:

make -D MYVAR -D MYOTHERVAR ... install clean

Sin embargo, para una configuración compleja, la línea de comando no funcionará bien y es mejor que ninguno de los dos primeros métodos sea efectivo. En este caso, puede hacer un archivo de configuración y pasarlo makecon la variable __MAKE_CONF. FreeBSD tiene un archivo de configuración predeterminado: /etc/make.confque generalmente contiene información sobre puertos instalados previamente y otras configuraciones del sistema. Para comenzar, cree un archivo con sus opciones de puertos, ~/myport.mkllámelo y luego combine ese archivo con /etc/make.conf:

cat /etc/make.conf ~/myport.mk >> ~/make.myport.conf

luego puede verificar su configuración:

make showconfig __MAKE_CONF=~/make.port.conf

y si todo se ve bien:

make install clean __MAKE_CONF=~/make.myport.conf

¡TENER CUIDADO! Si necesita ajustar su configuración de configuración después make configureo una instalación en su totalidad o en parte, primero debe borrar su configuración :

make rmconfig

De lo contrario, se producirán interacciones inesperadas entre el subsistema de puertos, los makevalores predeterminados de su puerto y la configuración deseada.

Eso es bastante para un resumen, pero la complejidad de la configuración se trata principalmente de la aplicación, no del puerto. Bash, por ejemplo, realmente no tiene ninguna opción.

Instalación

Esta es la parte facil:

make install clean

o tu puedes

make build
make install
make clean

lo cual es más mecanografía.

Eso es practicamente todo. Obviamente, hay más cosas que puede hacer, como enumerar recursivamente dependencias y opciones de configuración, actualizar con parches, etc. Aquí lo remitiré a la sección de Puertos del Manual , la página de manual del subsistema de puertos (buena información sobre objetivos de creación adicionales) y la makepágina de manual.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.