Simon! Se como te sientes; También luché con esta parte del aprendizaje de Linux. Basado en mis propias experiencias, escribí un tutorial sobre algunos de los elementos que aborda (¡principalmente como una referencia para mí!): Http://easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html . Creo que apreciarás mi nota sobre lo simples que son construir / instalar aplicaciones Python. :)
Espero que esto ayude! Y feliz compilando.
Tim Jones
Construyendo / Instalando una aplicación desde la fuente en Ubuntu Linux
Si bien los repositorios de Ubuntu están repletos de excelentes aplicaciones, en un momento u otro seguramente encontrará esa herramienta "imprescindible" que no está en los repositorios (o que no tiene un paquete Debian) o necesita un versión más nueva que en los repositorios. ¿Qué haces? Bueno, ¡tienes que construir la aplicación desde la fuente! No se preocupe, realmente no es tan complicado como parece. ¡Aquí hay algunos consejos, basados en mis experiencias de pasar de ser un aficionado de rango! (Mientras uso Ubuntu para este ejemplo, los conceptos generales deberían ser aplicables a la mayoría de las distribuciones de Unix / Linux, como Fedora e incluso a la plataforma Cygwin en Windows).
El proceso básico de construcción (compilación) de la mayoría de las aplicaciones desde el origen sigue esta secuencia: configure -> compile -> install. Los comandos típicos de Unix / Linux para hacer estas cosas son: config
-> make
-> make install
. En algunos casos, incluso encontrará páginas web que muestran que todo esto se puede combinar en un solo comando:
$ config && make && make install
Por supuesto, este comando supone que no hay problemas en ninguno de estos pasos. ¡Aquí es donde entra la diversión!
Empezando
Si no ha compilado una aplicación desde la fuente en su sistema antes, probablemente necesitará configurarla con algunas herramientas de desarrollo generales, como el gcc
conjunto de compiladores, algunos archivos de encabezado comunes (piense en esto como un código que ya se ha escrito por otra persona que utiliza el programa que está instalando) y la herramienta de creación. Afortunadamente, en Ubuntu, hay un metapaquete llamado build-essential
que instalará esto. Para instalarlo (¡o simplemente asegúrese de que ya lo tiene!), Ejecute este comando en la terminal:
$ sudo apt-get install build-essential
Ahora que tiene la configuración básica, descargue los archivos de origen de la aplicación y guárdelos en un directorio para el que tenga permisos de lectura / escritura, como su directorio de "inicio". Por lo general, estos estarán en un archivo con una extensión de archivo de .tar.gz
o .tar.bz2
. El .tar
simplemente significa que se trata de un "archivo de cinta", que es un conjunto de archivos que conserva su estructura de directorio relativo. El .gz
representa gzip (GNU zip), que es un formato de compresión populares de Unix / Linux. Del mismo modo, .bz2
significa bzip2, que es un formato de compresión más nuevo que proporciona una mayor compresión (tamaño de archivo comprimido más pequeño) que gzip.
Después de descargar el archivo fuente, abra una ventana de terminal (Terminal del sistema desde el menú de Ubuntu) y cambie al directorio donde guardó su archivo. (Lo usaré ~/download
en este ejemplo. Aquí, '~' es un acceso directo a su directorio "principal"). Use el comando tar para extraer los archivos del archivo comprimido descargado:
Si su archivo es un archivo gzip (por ejemplo, termina con .tar.gz
), use el comando:
$ tar -zxvf filename.tar.gz
Si su archivo es un archivo bzip2 (por ejemplo, termina con .tar.bz2
), use el comando:
$ tar -jxvf filename.tar.gz
Sugerencia: Si no desea tener que recordar todos los modificadores de línea de comandos para extraer archivos, le recomiendo obtener una (o ambas) de estas utilidades: dtrx (¡mi favorita!) O deco (más popular). Con cualquiera de estas utilidades, simplemente ingrese el nombre de la utilidad (dtrx o deco) y el nombre del archivo, y hace todo el resto. Ambos "saben" cómo manejar la mayoría de los formatos de archivo con los que es probable que se encuentren y tienen un excelente manejo de errores.
Al construir desde la fuente, hay dos tipos comunes de errores que es probable que encuentre:
- Los errores de configuración se producen cuando ejecuta el script de configuración (generalmente denominado config o configure) para crear un archivo MAKE que sea específico para su configuración.
- Los errores del compilador ocurren cuando ejecuta el comando make (después de que se haya generado el archivo make) y el compilador no puede encontrar el código que necesita.
Veremos cada uno de estos y discutiremos cómo resolverlos.
Configuración y errores de configuración
Después de extraer el archivo de archivo de código fuente, en el terminal, debe cambiar al directorio que contiene los archivos extraídos. Normalmente, este nombre de directorio será el mismo que el nombre del archivo (sin la extensión .tar.gz
o .tar.bz2
). Sin embargo, a veces el nombre del directorio es solo el nombre de la aplicación, sin ninguna información de versión.
En el directorio de origen, busque un README
archivo y / o un INSTALL
archivo (o algo con nombres similares). Estos archivos generalmente contienen información útil sobre cómo compilar / compilar la aplicación e instalarla, incluida información sobre dependencias. Las "dependencias" son solo un nombre elegante para otros componentes o bibliotecas que se requieren para compilar con éxito.
Una vez que haya leído el archivo README
y / o INSTALL
(y, con suerte, haya examinado cualquier documentación en línea relevante para la aplicación), busque un archivo ejecutable (tiene el permiso "x" establecido en el archivo) llamado config
o configure
. A veces, el archivo puede tener una extensión, como .sh
(por ejemplo, config.sh
). Este suele ser un script de shell que ejecuta algunas otras utilidades para confirmar que tiene un entorno "sensato" para la compilación. En otras palabras, verificará para asegurarse de que tiene todo lo que necesita instalado.
Consejo: Si se trata de una aplicación basada en Python, en lugar de un archivo de configuración, debe encontrar un archivo con el nombre setup.py
. Las aplicaciones de Python suelen ser muy simples de instalar. Para instalar esta aplicación, como root (por ejemplo, ponga sudo delante del siguiente comando en Ubuntu), ejecute este comando:
$ python setup.py install
Eso debería ser todo lo que necesitas hacer. Puede omitir el resto de este tutorial y proceder directamente a usar y disfrutar su aplicación.
Ejecute el script de configuración en la terminal. Por lo general, puede (¡y debería!) Ejecutar su script de configuración con su cuenta de usuario habitual.
$ ./config
El script mostrará algunos mensajes para darle una idea de lo que está haciendo. A menudo, el script le dará una indicación de si tuvo éxito o falló y, si falló, alguna información sobre la causa de la falla. Si no recibe ningún mensaje de error, puede suponer que todo salió bien.
Si no encuentra ninguna secuencia de comandos que parezca una secuencia de comandos de configuración, normalmente significa que la aplicación es muy simple y es independiente de la plataforma. Esto significa que puede simplemente pasar al siguiente paso de compilación / compilación, ya que lo proporcionado Makefile
debería funcionar en cualquier sistema.
Un ejemplo
En este tutorial, voy a usar el lector RSS basado en texto llamado Newsbeuter como ejemplo para los tipos de errores que puede encontrar al crear su aplicación. Para Newsbeuter, el nombre del script de configuración es config.sh
. En mi sistema, cuando ejecuto config.sh
, se producen los siguientes errores:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found
You need package sqlite3 in order to compile this program.
Please make sure it is installed.
Al investigar un poco, descubrí que, de hecho, la sqlite3
aplicación estaba instalada. Sin embargo, ya que estoy tratando de construir desde la fuente, este es un consejo que lo que config.sh
realmente está buscando son las bibliotecas de desarrollo (encabezados) sqlite3
. En Ubuntu, la mayoría de los paquetes tienen un paquete de desarrollo asociado que termina en -dev
. (Otras plataformas, como Fedora, a menudo usan un sufijo de paquete -devel
para los paquetes de desarrollo).
Para encontrar el paquete apropiado para el sqlite3
paquete de desarrollo, podemos usar la apt-cache
utilidad en Ubuntu (y, de manera similar, la yum
utilidad en Fedora):
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite
Este comando devuelve una lista bastante grande de resultados, por lo que tenemos que hacer un poco de trabajo de detective para determinar cuál es el paquete apropiado. En este caso, el paquete apropiado resulta ser libsqlite3-dev
. Tenga en cuenta que a veces el paquete que estamos buscando tendrá el lib
prefijo, en lugar del mismo nombre del paquete más -dev
. Esto se debe a que a veces solo estamos buscando una biblioteca compartida que pueda ser utilizada por muchas aplicaciones diferentes. Para instalar libsqlite3-dev
, ejecute el comando típico apt-get install en la terminal:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev
Ahora, tenemos que config.sh
volver a ejecutar para asegurarnos de que hemos resuelto este problema de dependencia y que no tenemos más problemas de dependencia. (Si bien no lo mostraré aquí, en el caso de Newsbeuter, también tuve que instalar el libcurl4-openssl-dev
paquete). Además, si instala un paquete de desarrollo (como libsqlite3-dev
) y el paquete de la aplicación asociada (por ejemplo, sqlite3
) ya instalado, la mayoría de los sistemas instalarán automáticamente el paquete de aplicación asociado al mismo tiempo.
Cuando la configuración se ejecute correctamente, el resultado será que creará uno o más archivos de creación. Estos archivos suelen tener un nombre Makefile
(recuerde que el caso del nombre del archivo es importante en Unix / Linux!). Si el paquete de compilación incluye subdirectorios, como src
, etc., cada uno de estos subdirectorios también contendrá un Makefile
.
Errores de compilación y compilación
Ahora, estamos listos para compilar la aplicación. Esto a menudo se llama construcción y el nombre se toma prestado del proceso del mundo real de construir algo. Las diversas "piezas" de la aplicación, que generalmente son múltiples archivos de código fuente, se combinan para formar la aplicación general. La utilidad make administra el proceso de compilación y llama a otras aplicaciones, como el compilador y el enlazador, para que realmente hagan el trabajo. En la mayoría de los casos, simplemente ejecuta make (con su cuenta de usuario habitual) desde el directorio donde ejecutó la configuración. (En algunos casos, como compilar aplicaciones escritas con la biblioteca Qt, necesitará ejecutar otra aplicación de "envoltura" como qmake en su lugar. Nuevamente, revise siempre los documentos README
y / o INSTALL
documentos para obtener más detalles).
Al igual que con el script de configuración anterior, cuando ejecuta make (o la utilidad similar) en el terminal, mostrará algunos mensajes sobre lo que se está ejecutando y cualquier advertencia y error. Por lo general, puede ignorar las advertencias, ya que son principalmente para los desarrolladores de la aplicación y les están diciendo que hay algunas prácticas estándar que se están violando. Por lo general, estas advertencias no afectan la función de la aplicación. Por otro lado, los errores del compilador deben ser tratados. Con Newsbeuter, cuando ejecuté make, las cosas salieron bien por un tiempo, pero luego recibí un error:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1
El proceso de creación se detendrá tan pronto como se encuentre el primer error. El manejo de errores del compilador a veces puede ser un negocio complicado. Tienes que mirar los errores para obtener algunas pistas sobre el problema. Por lo general, el problema es que faltan algunos archivos de encabezado, que generalmente tienen una extensión de .h
o .hpp
. En el caso del error anterior, está claro (¡o debería estarlo!) Que el problema es que stfl.h
no se puede encontrar el archivo de encabezado. Como muestra este ejemplo, desea ver las primeras líneas del mensaje de error y avanzar para encontrar la causa subyacente del problema.
Después de mirar la documentación de Newsbeuter (¡lo que debería haber hecho antes de comenzar, pero esta parte del tutorial no sería muy significativa!), Descubrí que requiere una biblioteca de terceros llamada STFL. Entonces, ¿qué hacemos en este caso? Bueno, esencialmente repetimos exactamente el mismo proceso para esa biblioteca requerida: obtenga la biblioteca y ejecute el proceso de configuración-construcción-instalación para ella y, luego, reanude la construcción de la aplicación deseada. Por ejemplo, en el caso de STFL, tuve que instalar el libncursesw5-dev
paquete para que se compilara correctamente. (Por lo general, no es necesario rehacer el paso de configuración en nuestra aplicación original después de instalar otra aplicación requerida, pero tampoco está de más).
Después de instalar con éxito el kit de herramientas STFL, el proceso de creación de Newsbeuter se ejecutó correctamente. El proceso de creación generalmente continúa donde lo deja (en el punto del error). Por lo tanto, los archivos que ya se hayan compilado correctamente no se volverán a compilar. Si desea volver a compilar todo, puede ejecutar make clean all para eliminar los objetos compilados y luego ejecutar make nuevamente.
Instalando
Una vez que el proceso de compilación se complete con éxito, estará listo para instalar la aplicación. En la mayoría de los casos, para instalar la aplicación en las áreas comunes del sistema de archivos (por ejemplo, /usr/bin
o /usr/share/bin
, etc.), deberá ejecutar la instalación como root. La instalación es realmente el paso más simple en todo el proceso. Para instalar, en la terminal ejecute:
$ make install
Verifique la salida de este proceso en busca de errores. Si todo fue exitoso, debería poder ejecutar el nombre del comando en la terminal y se iniciará. (Agregue & al final de la línea de comando, si es una aplicación GUI, o no podrá usar la sesión de terminal hasta que la aplicación termine de ejecutarse).
Cuando crea una aplicación desde el origen, generalmente no agregará un ícono o acceso directo a los menús de la GUI en Ubuntu. Deberá agregar esto manualmente.
Y ese es básicamente el proceso, aunque potencialmente iterativo, para construir e instalar una aplicación desde la fuente en Ubuntu. ¡Después de haber hecho esto solo algunas veces, se convertirá en una segunda naturaleza para ti!