Si usais Ubuntu (o alguna distribucion basada en Debian) y habeis discutido alguna vez con alguien que use Gentoo sobre las ventajas/inconvenientes de una y otra distribucion, seguro que os ha salido el tema de “uso gentoo porque todo mi sistema está compilado y optimizado para mi máquina”. Esto es totalmente cierto, y da a gentoo una ENORME ventaja sobre otras distribuciones, ya que le hace ser mucho más rapida y más estable que debian, por ejemplo.
Personalmente uso Debian por el sistema de paquetes (que no tiene gentoo), y por herramientas tan fantasticas como apt (synaptic o aptitude son sus gui mas conocidas).
Cuando gentoo instala algo, lo compila antes y lo adapta al hardware del ordenador en el que está instalado. Pues vamos a aprender como recompilar nuestro ubuntu y hacer que a partir de ahora, todo lo que se instale se compile antes, todo gracias a apt-build.
La herramienta en cuestión se llama apt-build y es un script escrito en perl con algo más de 1000 lineas de código.
1 - ¿Como funciona?
Es un script que utiliza apt-get source para coger las fuentes, apt-get build-dep para instalar las dependencias de compilacion (tambien compiladas por nosotros, valga la redundancia) y dpkg-build para construir los paquetes, pero de una forma automatizada, similar a la de apt, de manera que si necesitamos instalar Ubuntu-Desktop, que depende de firefox, gnome, gaim, etc.. compilará e instalará primero las dependencias y luego el programa en cuestión.
Resumiendo, hace “casi lo mismo” que apt, pero compilandolo todo.
VENTAJAS:
- Más estabilidad.
- Mayor velocidad en ejecución.
- El sistema arranca mucho mas rápido.
INCONVENIENTES:
- A partir de ahora las actualizaciones deberán hacerse con apt-build upgrade (este comando mira si hay actualizaciones y actualiza los paquetes que lo necesiten) en vez de con el asistente que Ubuntu incorpora en Gnome si queremos estar seguros de estar actualizados, ya que el uso de esta herramienta y la instalacion de paquetes compilados podría bloquear la actualizacion de paquetes dependientes, que solo se actualizarían mediante apt-build.
- No se podrá usar el comando apt-get –reinstall install PAQUETE con los paquetes que hayan sido instalados por apt-build, en su lugar deberemos desinstalar el paquete en cuestión y volverlo a instalar si queremos descargar e instalar la version ya compilada y NO optimizada a nuestro sistema o usar apt-get –reinstall –allow-unauthenticated install PAQUETE, ya que los paquetes que genera apt-build no están firmados por la herramienta apt, y apt instala solo paquetes firmados por la propia aplicacion a no ser que se le indique –allow-unauthenticated.
2 - Instalando y configurando apt-build
Primero instalamos apt-build desde apt, escribiendo en consola:
sudo apt-get install apt-build
Durante la instalación nos preguntará sobre algunos parámetros de configuración, como el nivel de optimización o la arquitectura. Si posteriormente queremos modificar estos parámetros basta con editar el fichero /etc/apt/apt-build.conf
Ahora haremos que los paquetes compilados por apt-build tengan preferencia sobre los paquetes precompilados, para lo que editamos el fichero /etc/apt/preferences con sudo gedit /etc/apt/preferences y añadimos las siguientes lineas:
Package: *
Pin: release o=apt-build
Pin-Priority: 990
Apt-build necesita el codigo fuente de los ficheros, por lo que nos aseguraremos de que no hay ningún repositorio comentado (recordamos que comentado significa que tiene # delante de la linea) en el arhivo source list, ya que los repositorios de fuentes suelen venir comentados. Para ello editamos el sources.list con el siguiente comando:
sudo gedit /etc/apt/sources.list
3 - Como usar apt-build
Mi consejo es que si quereis tener el sistema compilado y adaptado al máximo a vuestra máquina, descargueis la version server de Ubuntu y lo instaleis con lo mínimo (no se instalará entorno gráfico), una vez instalada instalamos apt-build, recompilamos el sistema (ver comandos), y a partir de ahí instalamos ubuntu-desktop (para convertirlo en la version de escritorio) y lo que queramos con apt-build.
Para instalar un paquete:
sudo apt-build install PAQUETE
Para sustituir los paquetes que tengamos precompilados por paquetes compilados por nosotros mismos debemos crear primero una lista, ya que no conviene recompilar paquetes como libc6 o gcc, por lo que los pasos a seguir son estos:
sudo su
dpkg –get-selections | awk ‘{if ($2 == “install”) print $1}’ > /etc/apt/apt-build.list
apt-build world
Si queremos desinstalar paquetes, recordemos que son paquetes .deb, por lo que podemos usar apt (o synaptic):
sudo apt-get autoremove PAQUETE
Si queremos crear un paquete y guardarlo en nuestro sistema (ya creado) para que al usar apt-get para instalar este paquete se instale este paquete en vez del precompilado:
sudo apt-build build-source
Si queremos realizar el proceso anterior pero para todo el repositorio disponible:
apt-build update-source
Si queremos limpiar los paquetes que hemos compilado y guardado para que apt los instalase en lugar de los precompilados (con los 2 comandos anteriores):
sudo apt-build clean-sources
Para limpiar los directorios de los fuentes de archivos objeto:
sudo apt-build clean-repository
Vía: makeandinstall
en la opciones del procesador no aparece el amd sempro como debería escribirlo en el fichero /etc/apt/apt-build.conf
No es cierto que compilar añada estabilidad al sistema. Muchas veces, si uno utiliza el flag -O3 en CFLAGS, para compilar algo, las cosas se rompen cuando si unos las compila con una optimizacion menor esto no pasa.
El mayor beneficio de esta forma de instalar paquetes es la velocidad que en ciertos casos mejora
¿Tienes idea cómo agrego módulos al build.conf?
Bueno en cierto modo eso es un engaño que los usuarios de debian/ubuntu les decimos a los de gentoo pero no es del todo cierto. Ahora no he usado gentoo ya que la ultima vez que trate de instalarlo había un error en el instalador. Sin embargo he compilado cosas en apt-build como iceweasel (firefox) y tambien lo he hecho bajando el codigo fuente desde la pagina oficila de mozilla y compilado con gcc con las optimizaciones ./configure make make install y deberian ser parecidos pero a la hora de usarlos el compilado con make le da mil vueltas al compilado por apt-build. Al ver resultados similares en varias aplicaciones pensé que es mejor realizar las optimizaciones uno que dejarse lo a un programa asi que espero que salga la version de gentoo 2009 para ver como queda ya que las optimizaciones son mas personalizadas.
he utilizado
apt-build update-source
pero no veo que actualice los paquetes supongo que se debe utilizar el apt-get o aptitude para actualizarlos
o me equivoco??
Lev