Porque es mejor compilar a que instales desde los repositorios.

6th Jan 2015Posted in: Programación 0

En esta pequeña guía voy a explicarles (y enseñarles) porque es mejor que compiles un programa (dígase Firefox, Vlc, etc) desde su código fuente, a que lo bajes (desde El Centro de Software, Yumex, Pacman, etc) y lo instales.

Primero vamos con la teoría:

¿Qué es “compilar”?

Compilar es transformar el código fuente (código escrito en un determinado lenguaje de programación, dígase C,C++,etc) en un programa ejecutable para su funcionamiento mediante el uso del procesador para la conversión del lenguaje usado para generar el código a el binario y ensamblador. También se le suele llamar empaquetamiento.

¿Porqué es mejor “compilar”?

Primero tienes que saber lo siguiente para entender el por que. Dicho de una manera “burda” (simple, no muy profesional, etc), cada raza (Pentium, Core, Atom,etc) y su especie (Intel, AMD, ARM,etc) de procesador tienen instrucciones (software escrito en ensamblador que procesa el código) propias de su modelo (Core i7, Core i5, Atom x2, Phantom x8,Arm,etc) y además tienen instrucciones generales que todos los de su especie tienen.

Cuando vos bajas desde los repositorios a través del Centro de Software/apt-get/Yumex/Yum/Pacman/etc, un programa que se instala de forma automática se dice que esta precompilado para su funcionamiento en todos los procesadores posibles (Intel y Amd). Al tratarse de un programa precompilado se pierden esas instrucciones propias de ése modelo de procesador específico (piensa que si un programa como Firefox o Chrome, que tienen más de 7 u 8 millones de líneas de código, tuvieran que poner todas las instrucciones específicas para cada procesador que hay en el mercado, la cantidad de código sería tan grande que ya no sería eficiente ése programa) dejándose nada más que las generales de su marca creadora (Intel, Amd,Arm).

Al bajar, descomprimir y compilar por tu cuenta el código fuente de un programa, éste se compila con las instrucciones específicas de TU procesador, (lo que no quiere decir que no sirva en una máquina con otro distinto, sólo que va a estar optimizado específicamente y puramente para tu procesador), desatando y liberando así todo el poder que tu procesador es capaz de dar gracias a sus instrucciones específicas.

En detalles más técnicos, estas instrucciones específicas están íntimamente ligadas a lo que se conoce como el chipset de tu placa madre, que es el gran quebradero de cabeza para los que tenemos Intel para cuando queremos hacer un upgrade del procesador y la placa madre.

Te sorprenderías del poder que puede llegar a dar tu Amd Atom x2 o tu Intel Core Inside, Core 2 Duo, i3, etc de tu vieja PC. ¿Ahora entiendes por que se habla mucho en el mundo Linux de compilar el famoso Kernel (corazón de todo sistema operativo)? Imagínate si compilar especialmente para tu pc todo un sistema (entorno gráfico (Gnome,Kde, etc), Kernel, programas de uso común (Firefox, Vlc, Chrome, Wine, etc) todo el nivel de velocidad y optimización que tendrías.

Éste principio de compilación para obtener un código optimizado especialmente para tu máquina es el que utilizan distros como Gentoo y derivados (del que no voy a hablar ahora, yo utilizo Fedora minimal con compilación de Gnome 3, el kernel y demás programas) donde el sistema, sus actualizaciones y sus programas siempre siempre son compilados.

Desventajas de la compilación:

Ya te expliqué todas las ventajas, pero como todo en el universo tiene una contra.

En el caso de la compilación son;

  • Tiempo necesario para esto (Firefox con un i7 4790K (sin overclock ya que soy muy malo con los voltajes) toma 3 minutos, Gnome Shell (la barra nada más) con Gnome-Control-Center me tomo unos 2 minutos, los dos siendo compilados a la vez en Fedora. Pero en una máquina con un procesador menos fuerte este tiempo puede aumentar desmesuradamente).
  • El procesador usa el 100% de su potencia con todos sus núcleos al máximo, por lo que el consumo y el calor se disparan (tenerlo en cuenta si tiene overclocking o si es especialmente una notebook), así que es conveniente que te prepares un mate o un café para la ocasión.
  • Quizás te falte alguna librería (herramienta) que utilice algún programa para que no de error en la compilación. Por lo general todas las distros tienen paquetes o conjuntos de los mismos para evitar esto (vienen repletos de diversas librerías y demás cosas que permiten al kernel comunicarse como se debe con el procesador durante el proceso).

¿Cómo puedo compilar?

Para Debian (Ubuntu, Mint,Elementary, etc son todos derivados de este por lo que sigan esto

Acá hablo de compilar un programa de uso normal, no un kernel.

aptitude install build-essential dh-make devscripts fakeroot debhelper debian-policy ccache dh-autoreconf autotools-dev build-dep ardour

Puse debian-policy, pero si su distro no es Debian y les da error de que no existe ese paquete, simplemente ignórenlo. Tengo que aclarar que hace mucho que no uso estos sistemas por lo que si algún paquete ya no se encuentra en los repositorios no se hagan problema.

Para Fedora:

sudo yum -y install kernel-headers
kernel-devel
sudo yum groupinstall "Development Tools"
sudo yum groupinstall "Development Libraries"

Acá tengo que pedir disculpas para los que usan Arch (no conozco bien la distro) y OpenSuse, ya que no conozco estas distros ni tampoco los paquetes respectivos para realizar una correcta compilación (y no he corroborrado lo que hay en la red, por lo que para esas dos no sé si funcionan).

Ahora que ya tienes todos los requerimientos necesarios solo necesitas bajarte el código fuente del programa que quieres compilar, según la extensión lo descomprimes usando la terminal (tranqui, te dejaré los comandos) y cuando vallas a la carpeta (siempre con la terminal) haces lo siguiente:

Si tiene posibilidad de configurarse para elegir los componentes y demás:

./configure

Luego tecleas:

make

Y por último para instalar el programa en tu linux:

make install

Todo esto siempre con root (su en Fedora, sudo su en Ubuntu y sus derivados (Mint, Elementary Os,etc)

Comandos para descomprimir mediante la terminal (el archivo se descomprime en una carpeta donde se encuentre el archivo):

Archivos .tar (tar)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Empaquetar        |      tar cvf archivo.tar /archivo/*
Desempaquetar     |      tar xvf archivo.tar
Ver el contenido  |      tar tvf archivo.tar
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.tar.gz - .tar.z - .tgz (tar con gzip)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Empaquetar y comprimir        |    tar czvf archivo.tar.gz /archivo/
Desempaquetar y descomprimir  |    tar xzvf archivo.tar.gz
Ver el contenido (sin extraer)|    tar tzvf archivo.tar.gz
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.gz (gzip)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Comprimir        | gzip -q archivo (El archivo lo comprime y lo renombra como "archivo.gz")
Descomprimir     | gzip -d archivo.gz (El archivo lo descomprime y lo deja como "archivo"
Nota: gzip solo comprime archivos, no directorios
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.bz2 (bzip2)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Comprimir         |   bzip2 archivo
|   bunzip2 archivo (El archivo lo comprime y lo renombra como "archivo.bz2")
Descomprimir      |   bzip2 -d archivo.bz2
|   bunzip2 archivo.bz2 (El archivo lo descomprime y lo deja como "archivo")
Nota: bzip2 solo comprime archivos, no directorios
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.tar.bz2 (tar con bzip2)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Comprimir       | tar -c archivos | bzip2 > archivo.tar.bz2
Descomprimir    | bzip2 -dc archivo.tar.bz2 | tar -xv
| tar jvxf archivo.tar.bz2 (versiones recientes de tar)
Ver contenido   | bzip2 -dc archivo.tar.bz2 | tar -tv
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.zip (zip)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Comprimir        | zip archivo.zip /mayo/archivos
Descomprimir     | unzip archivo.zip
Ver contenido    | unzip -v archivo.zip
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.rar (rar)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Comprimir     | rar -a archivo.rar /mayo/archivos
Descomprimir  | rar -x archivo.rar
Ver contenido | rar -v archivo.rar
| rar -l archivo.rar

Y esto es todo.



Leave a Reply