Como compilar paquetes con dpkg-buildpackage

Bueno aquí estoy estrenando la sección páginas del blog les pondré un pequeño how-to que espero sirva de algo a la comunidad.

Hemos visto que en otras distribuciones compilan todos los programas para tener un máximo rendimiento de su sistema, pues debian usa paquetes que ya han sido compilados por otras personas, pero al ser debian una distribución orientada a instalarse en la mayor cantidad posible de computadoras evita poner opciones en los paquetes que puedan ser incompatibles con los procesadores mas viejos de las arquitecturas soportadas.

Debian en 32 bits esta optimizado para trabajar desde el i486 hasta los modernos core2duo y core2quad pero para que corran sin problemas los programas se deshabilitan varias opciones, haciendo posible que el 486 los corra.
Esto hace que percibamos menos velocidad de la que esperamos de nuestro procesador.

Es posible para nosotros hacerla estilo gentoo y compilar nuestros paquetes usando las fuentes de debian:

Paso 1

Primero bajaremos la fuente de un programa, en este caso iceweasel:

$ apt-get source iceweasel

Esta orden descarga el paquete fuente y lo descomprime en la carpeta en la que estemos actualmente (nótese el $, significa que no es necesario ser root para hacer esto).

Paso 2

Ahora pasamos a optimizar, para hacer esto debemos saber que procesador tenemos, para eso damos la orden:

$cat /proc/cpuinfo

Y ya que sabemos que procesador es pasamos a buscar sus optimizaciones para el compilador gcc también llamadas “CFLAGS”.
Para mi el mejor lugar donde buscar es aqui. Para ponerle las CFLAGS al sistema abrimos una consola, en la que haremos todo el trabajo, en ella ponemos por ejemplo:

$export  CHOST="x86_64-pc-linux-gnu"
$export  CFLAGS="-march=nocona -O2 -pipe"
"#(adicionalmente pueden agregar aqui "-dpkg-buildpackage")"
$export CXXFLAGS="${CFLAGS}"

Donde: CHOST es la arquitectura para la que haremos el paquete, CFLAGS las optimizaciones para gcc y CXXFLAGS optimizaciones para g++, las que puse aqui son optimizaciones para core2duo EM64T, pueden sustituirlas con las que les salgan en el enlace wiki (export +copypaste).

Paso 3

Ahora nos disponemos a compilar, primero satisfacemos las dependencias de compilación del paquete iceweasel asi que damos:

#apt-get build-dep iceweasel

ahora compilamos el paquete propiamente dicho (Nota: para compilar el paquete como usuario normal el paquete “fakeroot” debe estar instalado).
entramos a la carpeta des-compresa del paquete iceweasel:

$cd iceweasel-version

y adentro damos la orden:

$dpkg-buildpackage -us -uc 

Esperamos unos minutos mientras compila el paquete, al final obtendremos los paquetes .deb binarios de iceweasel, soporte de este para gnome y debug-simbols del mismo, los cuales estan afuera del directorio en el que nos encontramos.
Luego solo instalamos con dpkg -i ya tenemos nuestro paquete compilado.
Recomendación: para que apt-get no nos actualice el paquete poniendo el mismo que estaba antes (no se por que tiene este comportamiento), bloqueemos iceweasel de apt asi:

echo iceweasel hold | dpkg --set-selections 

Cualquier duda ponerla en los comentarios :).

Anuncios

7 thoughts on “Como compilar paquetes con dpkg-buildpackage

  1. Manuel dice:

    Espectacular

    Ahora mismo estoy compilando aMule, pero me enrede en como seleccionar solo ciertos paquetes y no todos… con “debial/rules amule paquete2” lo consigo… pero me salta que necesito fakeroot… se lo doy… y en fin

    sabes como puedo darle estos parametros propios del debian/rules (amule paquete2) al dpkg-buildpackage ?? me parece que con “dpkg-buildpackacge -R algo logro… pero me falta saber algo mas …

    Saludos, buen articulo

  2. marcelo dice:

    Una pregunta: cuando se le ponen las CFLAGS al sistema, ya queda este dato guardado para futuras compilaciones?, o debo hacerlo cada vez que compile?
    Muchas gracias por este trabajo. Pude -por fin- pasarle las optimizaciones a gcc sabiendo (aunque sea mínimament) lo que hacía.

  3. tuxwarrior dice:

    Es una variable de entorno, osea que siempre que reinicies la pc se borraran, puedes guardarlas en ~/.profile para tu usuario y en /etc/profile para todo el sistema.

  4. marcelo dice:

    O sea que al final del archivo ‘~/.profile’ (o en ‘/etc/profile’ para todo el sistema) copio las tres líneas correspondientes a mi sistema sin mas? Gracias por tu respuesta, muy amable.

    export CHOST=”x86_64-pc-linux-gnu”
    export CFLAGS=”-march=btver1 -mtune=btver1″
    export CXXFLAGS=”${CFLAGS}”

  5. tuxwarrior dice:

    si, solo quitales el “export” deben ir las variables solas
    CHOST=”x86_64-pc-linux-gnu”

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s