jueves, 5 de noviembre de 2009

Compilar Debian / Ubuntu al estilo Gentoo sin apt-build


Para usuarios de Debian / Ubuntu que quieran tener sus programas compilados para la arquitectura concreta de su procesador, asi ganando optimización, al estilo Gentoo.

Gentoonizar Debian | Optimizar programas Debian | Compilación Debian

Prescindiremos del apt-build y haremos la misma tarea manualmente.

Para más información sobre el proceso con apt-build. ¡Ojo! Destacar que el proceso es diferente y/o el número de bugs és mas alto con apt-build; de la misma manera que hacer un world con apt-build conlleva sus riesgos.

Procederemos,

El primer paso es saber si tenemos los repositorios del codigo fuente en el sources.list:

cat /etc/apt/sources.list

Nos mostrará una salida similar a:

deb http://ftp2.de.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp2.de.debian.org/debian/ lenny main

deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main 
.
.
.

Que nos indicará que los tenemos activados (deb-src), de lo contrario nos mostrará una salida parecida a:

deb http://ftp2.de.debian.org/debian/ lenny main contrib non-free
#deb-src http://ftp2.de.debian.org/debian/ lenny main

deb http://security.debian.org/ lenny/updates main contrib non-free
#deb-src http://security.debian.org/ lenny/updates main 
.
.

Nos indica que no los tenemos activados, ya que se trata de una línea comentada (almohadilla delante #), para activarlos deberemos eliminar el comentario (#) de nuestro fichero sources.list; para ello ejecutaremos como root:

# nano /etc/apt/sources.list


Y eliminaremos el par de almohadillas (#) del principio de las líneas, guardaremos el fichero y saldremos; ejecutaremos:

# aptitude update

Bien, llegados aquí, eligiremos el programa que queramos compilar, por ejemplo, probaremos de compilar el aMSN.

Descargaremos las fuentes:

apt-get source amsn

Ahora instalaremos las dependencias de compilación, las necesitaremos para poder compilar nuestro paquete sin tener ningún problema:

# apt-get  build-dep amsn

Ingresaremos en el directorio que se ha creado cuando descargamos las fuentes:

cd amsn-versión

Donde sustituiremos versión por la versión que se haya descargado del apt-get source.

Ahora miraremos que procesador tenemos:

cat /proc/cpuinfo | grep model\ name

En mi caso, mi procesador és un Intel Core 2 Duo, la salida del comando anterior me devuelve:

model name    : Intel(R) Core(TM)2 Duo CPU     T7250  @ 2.00GHz

Ahora nos dirigimos aquí y selecionamos la família de nuestro procesador, en mi caso (para que sirva de ejemplo) Intel.

Nos llevará a una página con los modelos de Intel, escojeremos el nuestro...

Tengo el Core 2 Duo y con el sistema operativo x64 (64 bits), por lo tanto, según la página me corresponde:

CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=nocona -O2 -pipe"
CXXFLAGS="${CFLAGS}"

Aunque en mi caso y para aquellos que tengamos un Core 2 Duo, existe el flag core2 en vez de el nocona. Por lo tanto, en mi compilación utilizaré el -march=core2 con nivel -O2 de compilación; és el recomendado de los 3 existentes (O1, O2, O3), a más nivel mayor compilación, pero no significa mayor rendimiendo, se desaconseja el nivel 3 (O3) ya que produce muchos errores y peor rendimiento.

Resumiendo, mis flags quedarían:


CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=core2 -O2 -pipe"
CXXFLAGS="${CFLAGS}"

Incluimos los flags a nuestro sistema (seguire con los del ejemplo, usad los de vuestro caso concreto):

export CHOST="x86_64-pc-linux-gnu" && export CFLAGS="-march=core2 -O2 -pipe" && export CXXFLAGS="${CFLAGS}"

Comprobamos que se han incluido correctamente:

echo $CHOST && echo $CFLAGS && echo $CXXFLAGS

Nos devolverá:

x86_64-pc-linux-gnu
-march=core2 -O2 -pipe
-march=core2 -O2 -pipe

Bien, ahora ya podemos proceder a la compilación, para poder compilar sin ser usuario root necesitaremos fakeroot, será de nuestra elección utilizarlo o no. Para saber si tenemos instalado fakeroot:

aptitude show fakeroot

Si nos responde que no está instalado lo podremos instalar con:

# aptitude install fakeroot


¡Vamos a compilar!

dpkg-buildpackage -us -uc

Esperamos a que nos compile el paquete...

Instalaremos el paquete compilado:

cd ..
# dpkg -i amsn_version.deb

Donde version és la versión de nuestro paquete.

Ahora ya tendremos instalado nuestro paquete compilado y optimizado para nuestro procesador; faltará retener el paquete, ya que si hacemos un upgrade nos lo reinstalará, quedará a nuestro criterio revisar los repositorios y recompilar/reinstalar en posteriores versiones.

Para retener el paquete:

# aptitude hold paquete  && (echo "paquete hold" | dpkg --set-selections)

Sustituiremos paquete por el nombre del paquete que queramos retener, siguiendo el ejemplo: amsn.

Si en alguna ocasión queremos restaurar:

# aptitude unhold paquete  && (echo "paquete install" | dpkg --set-selections)

Saludos.

1 comentario:

  1. Siempre he tenido de menos a Debian, pero las inmensas ventajas que conlleva el poder hacer esto.
    Aunque de todas formas, ni asi cambio a mi Gentoo. =)

    ResponderEliminar