viernes, 12 de marzo de 2010

Cómo instalar software (programas) en (ubuntu) GNU/Linux. III. Compilar

###################################
Notas de revisiones:
Revisión 0: 20 marzo 2010. Publicado.
###################################


Compilar es traducir desde el lenguaje de programación que saben escribir y leer (algunos) humanos al lenguaje binario que entienden los ordenadores.

El usuario no programador tiene que entender que cada programa es "de su padre y de su madre" y a la hora de compilarlo no hay una regla básica universal. Bueno, en realidad hay una: Lee el README (y el INSTALL).

En ubuntu hay un paquete llamado "build-essential" que incluye el compilador de C, y otros paquetes "esenciales para compilar". Es lo primero que debemos instalar.

Como regla general, si B es una dependencia de A instalar el programa A precompilado obligará a instalar la librería B, que como vimos, también esta "empaquetada". De esto no tenemos que preocuparnos pues apt (apt-get, aptitude, synaptic, centro de software...) lo hace automágicamente. Ahora bien, compilar el programa A nos obliga a instalar el "paquete de desarrollo" de la librería B, que podremos identificar porque acaba en "-dev". Puede que se llame libB-dev.

Un truco para resolver las dependencias de desarrollo necesarias para compilar es usar "apt-get build-dep". Por ejemplo, tenemos ardour 2.8.2 en los repos de karmic y queremos compilar una versión posterior de ardour2. Es muy probable que esta nueva versión tenga las mismas dependencias que la existente en los repos de ubuntu. Entonces:


$ sudo apt-get build-dep ardour

Nos instalará todas las dependencias de desarrollo. Si la nueva versión hace uso de una librería nueva, habrá que instalarla aparte pues "apt-get build-dep" no es adivino.

La forma más clásica de compilar e instalar es el típico:

./configure
make
sudo make install

Sin embargo, es un error pensar que esta es la única manera de hacerlo. Ni mucho menos. Por ejemplo, hydrogen usa scons.

scons
sudo scons install

y siempre vendrá bien un:

scons --help

para ver las opciones de compilación.

Últimamente parece que waf está de moda entre los desarrolladores de linux audio.

./waf configure
./waf build (o simplemente, ./waf)
sudo ./waf install

Y por supuesto, podemos dar opciones en los scripts de configure, para que los programas se instalen en directorios alternativos, se habilite o deshabilite alguna función, o alguna particularidad...

Como ya he dicho antes, compilar no suele ser estrictamente necesario. Cuando lo es, lo mejor para el usuario principiante que no está especialmente interesado en las tripas del sistema operativo es seguir una guía particular para ese programa.

5 comentarios:

  1. Al final aprenderemos. Gracias por tus aportaciones

    ResponderEliminar
  2. Hola, una consulta... y si quiero desinstalar programas? sé que podemos ir al centro de software en el caso de ubuntu o a el gestor de paquetes...
    pero por ejemplo en ubuntu studio es seguro desinstalar una aplicación si dice que afectara al paquete ubuntustudio-audio?
    da miedo....
    saludos!

    ResponderEliminar
  3. ¡Hola Oliver! Ubuntustudio-audio es un "metapaquete". (En la parte II hablé de esto por encima). Es un truco que usan los desarrolladores de ubuntu, en este caso, para instalar de una vez varios paquetes relacionados entre sí. Un metapaquete no instala software, sólo marca dependencias. Como con cualquier otro paquete, si desinstalas una dependencia el paquete no puede vivir sin ella y se desinstala automáticamente, pero el resto de dependecias ya instaladas se quedan intactas (al menos con apt-get y con synaptic).

    Ahora bien, en karmic al menos, ubutustudio-audio, además, lanza un script que escribe en /etc/security/limits.conf el valor de rtprio 99. Y si lo desinstalas borrará esta línea. No pasa nada porque la puedes escribir a mano. De hecho, este script no está nada logrado porque no sólo es importante la linea "rtprio", también lo es la "memlock" y además no me parece correcto que un metapaquete escriba ningún script de este tipo. Como es jackd quien necesita que el usuario tenga estos privilegios, lo lógico es que sea el script (post-installation script) del paquete jackd el que lo haga. Esto será así a partir de ubuntu lucid.

    En el capítulo IV de "ubuntustudio para principiantes" explico esto de los límites de seguridad necesarios para jackd.

    En conclusión, puedes deinstalarlo tranquilamente, pero después edita el limits.conf para dejarlo como es debido.

    Saludos, Pablo

    ResponderEliminar
  4. Otro apunte, no te preocupes mucho por tener instalados programas que no usas. El sistema no se va a ralentizar por eso, siempre que tengas espacio suficiente en el disco duro. No es correcto pensar que el tener instalados sólo los programas estrictamente necesarios va a mejorar las cosas. Puede que en Windows sea así, pero no en GNU/linux. Lo que sí mejorará el sistema será el kernel. Lo ideal es un kernel que compiles tú mismo para tu ordenador, pero no es tarea fácil y aquí yo no podría ayudar.

    ResponderEliminar
  5. Y para terminar, algo que creo que se me olvidó comentar sobre la compilación e instalación "manual". Si instalamos de esta forma, lo hacemos fuera del sistema de paquetes de ubuntu. Instalamos el programa pero no aparecerá en synaptic, pues no hay tal paquete. Hay una forma de integrar la compilación / instalación manual con el sistema de paquetes, a través de checkinstall. Creo que voy a revisar el post para proponer esa posibilidad.

    ResponderEliminar