CCACHE

Investigando como mejorar el tiempo de compilacion de mi gentoo me encontre con ‘dev-util/ccache’ , jaja lo mas gracioso es que todo salio de un comentario  de un amigo de la facu.

Primero quisiera explicar como funciona el ccache, aunque existe muchos tutos de  como configurarlo, en pocos sitios explican como funciona realmente.

¿Que es CCACHE?  Es un compilador que llega a acelerar el proceso de compilacion 5 a 10 veces, pero eso ya lo saben… pero que ¿Como trabaja? detecta si el codigo que se esta compilando es mismo que se ha compilado anteriormente  para ello:

  • La información de salida del preprocesador cuando gcc se está ejecutando con la opción -E.
  • Las opciones de línea de comandos.
  • El tamaño real de los archivos compilados y el tiempo de modificación.
  • Toda la información de salida stderr que genera el compilador.

En resumen el objetivo es reducir el tiempo de acceso a memoria por medio de:

  • Reducir los fallos de la cache (miss rate).
  • Reducir las penalizaciones por fallo (miss penalty)
  • Reducir el tiempo de acceso en caso de acierto(hit time)

Con el siguiente comando vemos las estadisticas de uso

#ccache -s
cache directory                     /root/.ccache

cache hit                           0      -------- (hit time)

cache miss                         0    --------(miss rate)

called for link                     0

multiple source files                  0

compile failed                       0

preprocessor error                   0  -----(miss penalty)

not a C/C++ file                    0

autoconf compile/link               0

unsupported compiler option         0

no input file                       0

files in cache                      0 kbytes

cache size                             0 Kbytes

max cache size                       2.0 Gbytes

Ahora los facil…

Primero es necesario emerger el paquete

emerge ccache

Los segundo es agregarle lo siguiente al make.conf:

  • FEATURES = "ccache"
  • CCACHE_SIZE=”2G”

Recomiendo lo siguiente para que al ejecutar el comando ccache -s desde root muestre las estadisticas de uso.

  • CCACHE_DIR=”/root/.ccache”

Como recomendacion siempre que termines de compilar algo pesado limpia el el archivo ccache con el siguiente comando:

ccache -C 

emerge + axel

En esta ocacion tan solo configuraremos el make.conf para que un acelerador de descargas nos mejore el procceso de obtencion del paquete.

#emerge axel

Ahora editamos el  make.conf

#vim /etc/make.conf 

Y le agregamos las 2 siguientes lineas:

FETCHCOMMAND=”/usr/bin/axel -a -o /\${DISTDIR}/\${FILE} \${URI}”
RESUMECOMMAND=”${FETCHCOMMAND}”

Ya vas a poder descargar los paquetes mas rapido.

Terminando la instalacion del Gentoo.

Modos de compilación del kernel.

Basicamente hay dos formas de compilar del kernel, una es usando Genkernel… una instruccion que construira un kernel generico para nuestro sistema.

Otra opcion mucho mas interesante e infinitamente mejor es selecionando los modulos necesarios para la compilacion de nuestro propio kernel. El unico inconveniente es que para poder realizar este tipo de compilacion es necesario que tengamos un conocimientos bastante profundo del hardware de nuestra computadora. Si no seleccionamos un modulo correcto, podriamos encontrarnos con un bello kernel panic y no es nada agradable =D.

Con un par de compiladas manuales, se va aprendiendo a seleccioar modulos correctos, asi que suponiendo que ya tenemos la fuente con el comando anterior procedemos a ver el menu  de configuracion del mismo con la siguiente instruccion:

#cd /usr/src/linux
#make menuconfig

Lamentablemente la seleccion de los modulos correctos depende de la persona que este instalando y obviamente del hardware instalado, asi que aunque pusiera una lista aca, serviria de poco… porque cada maquina es una historia diferente e increible…

Estas son las seeciones vitales:

  1. Processor type
  2. Bus Options
  3. Device Drivers
  4. File systems
  5. Networking

Una vez los modulos seleccionados, procedemos a compilar el kernel con la siguiente instruccion:

#make  &&  make modules_install 

Mientras el Kernel se compila,  puedes ir a tomar una té o algo así… Cuando termine lo unico restante sera copiar la imagen compilada  a tu carpeta de /boot pero recomiendo que tengas todas tus imagenes organizadas en una carpeta especial.

#mkdir /boot/kernel 
#cp arch/i386/boot/bzImage /boot/kernel/

El archivo fstab.

Este archivo contiene el punto de montaje de todas las particiones de nuestro sistema linux, debe ser configurado para poder reconocer los diferentes sistemas de archivo que hemos dado a nuestras particiones, en nuestro caso en particular deberia de quedar de la siguiente forma:

___________________________________________________________________________

/dev/sda1         /                 ext3               noatime                0          1

/dev/sda3         none        swap               sw                           0         0

/dev/cdrom      /mnt/cdrom    auto    noauto,user       0        0

___________________________________________________________________________

Informacion de Red.

Debemos configurar el archivo /etc/conf.d/net para que pueda darse una direccion de red a nuestra interfaz, en mi caso dicha direccion es asignada por mi router mediante el protocolo DHCP:

Esto vasta en el archivo:

config_eth0=(”dhcp”)

Despues debemos ejecutar:

#rc-update add net.eth0 default

para que se cargue al inicio del sistema.

Locales glibc

Se puede especificar las locales que se necesitaran en /etc/locale.gen.

Las siguientes “locales” son un ejemplo para tener, al mismo tiempo, los idiomas: inglés (Estados Unidos) y Castellano con sus respectivos formatos (por ejemplo, UTF-8).

en_US ISO-8859-1

en_US.UTF-8 UTF-8

es_MX ISO-8859-1

Lo siguiente es ejecutar:

#locale-gen

Esto  generara todas las locales que tenemos en /etc/locale-gen.

Passord de root.

Para cuando inicies el sistema ya necesitas tener establecido el password de root escribiendo esto:

#passwd

Configura nombre de la maquina.

Es el nombre local de tu maquina.

HOSTNAME=”localhost”

vim /etc/conf.d/hostname

HOSTNAME=”gercka”

/etc/init.d/hostname restart
gercka user#....

Zona horaria.

Primero necesita seleccionar su zona horaria para que su sistema sepa dónde está localizado. Busque su zona horaria en /usr/share/zoneinfo, copiela a /etc/localtime.

Aqui pueden ver todas las Zonas Horarias.

#cd /usr/share/zoneinfo/

Este es mi caso por que vivo en Mexico.

#cp /usr/share/zoneinfo/Mexico/General  /etc/localtime

Bitacora del sistema.

Una Bitacora instalada sera una valiosa herramienta, nos proporciona informacion de todo lo ocurrido en caso de fala o algo similar, podemos instalar dicha bitacora con la ejecucion de lo sig:


#emerge syslog-ng

#rc-update add syslog-ng default

DHCP

Importante,  si no se instala un cliente de DHCP ahora, puede que no podamos conectarnos a internet luego, basta con ejecutar la siguiente instruccion:

#emerge dhcpcd

Gestro de Arranque.

¿Que es un gestro de arranque?, pues en pocas palabras es la pantalla bonita que aparece cuando enciendes tu pc y te muestra los sistemas opertivos instalados… en este caso vamos a instalar GRUB, para ello basta con ejecutar la siguiente instruccion:

#emerge grub

Cuando termine es necesario configurar si archivo de configuracion mediante lo siguiente:

#nano /boot/grub/grub.conf

Cuando el archivo anterior este configurado, debemos instalar dicho cargador de arranque en nuestro disco duro, para ello yo en lo personal recomiendo lo siguiente:

#grub
#find /boot/grub/stage1 

En mi caso me muestra lo siguiente

(hd0,0)
(hd0,3)
(hd0,5)

Elegimos que particion queremos instalar el sector de arranque.

#root (hd0, 0)

Filesystem type is ext2fs, partition type 0×83

#setup (hd0)

Checking if “/boot/grub/stage1″ exists… yes
Checking if “/boot/grub/stage2″ exists… yes
Checking if “/boot/grub/e2fs_stage1_5″ exists… yes
Running “embed /boot/grub/e2fs_stage1_5 (hd0)”…  17 sectors are embedded.
succeeded
Running “install /boot/grub/stage1 (hd0) (hd0)1+17 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst”… succeeded
Done.

Para salir

#quit

Creo que a estas alturas quieres ver algo funcionando, basta con desmontar las unidades y reiniciar el sistema.

#exit
root-iso#cd 
root-iso#umount /mnt/gentoo/dev
umount /mntgentoo/proc 
umount /mnt/gentoo 
root-iso#reboot

Entra en tu Gentoo y si tienes algo como esto:

nanally ~ #

ya esta bien instalado, felicidades ya quedo!!=D!!!

Comenzando con la instalacion primera parte…

Recuerden que Gentoo es una distro pensada especificamente para personas que desean construir sus sistema operativo optimizado completamente para su arquitectura, dicho proceso lleva a copilar todo el codigo fuente desde el nucleo del sistema hasta cualquier aplicacion que se desee instalar.

La compilacion de todo los componentes puede resultar en horas y horas de tiempo de maquina, asi que si no cuentas con dicho tiempo… instala otra distro.

Para la gente valiente que no a abandonado su deseo de instalar gentoo tiene dos caminos posibles:

  1. Una instalacion mediante un liveCD de gentoo.
  2. Una instalacion utilizando el CD minimal de la distribucion.

Una instalacion por un liveCD puede ser hecha por cualquier persona pero nuestra meta es la maxima optimizacion asi que utilizaremos la instalacion  utilizando el CD Minimal.

Este iso pude ser descargado desde el sitio oficial pero en este momento exite un mesaje que dice:

Warning: The 2008.0 releases are deprecated, and their links will be removed soon.

que significaria algo asi como:

(peligro: La version 2008.0 esta obsoleta, y la liga sera borrada pronto).

Asi que les dejo esta otra liga.

http://www.gtlib.gatech.edu/pub/gentoo/releases/x86/autobuilds/20090422/install-x86-minimal-20090422.iso

Ahora quemenla en un CD, reinicien e inicien desde el disco.

COMENZAMOS.

Mientras carga el sistema base veremos en la parte superior un amigable tux, mas un buen numero de lineas donde se muestra la carga de todo lo relacionado con el sistema.

Cuando todas la herramientas necesarias sean cargadas, el siguiente paso sera la creacion de un esquema de particionado aunque el hadbook recomienda el uso de 3 particiones, una para /boot, una para la raiz del sistema / y una para el manejo del area de intercambio “swap”.

Para entenderlo mejor se los pongo de la siguiente manera:

/boot (/dev/sda1)   /swap  (/dev/sda3)   / (/dev/sda2) y otras particiones.

Pero recomiendo la siguiente:

/swap (/dev/sda1) / (/dev/sda2) y otras particiones.

Si no estamos seguros de que dispositivo asignar, podemo utilizar el comando #fdisk -l, el cual mostrara todos los dispositivos de almacenamiento conectados a la computadora, ya sean discos duros o unidades extraibles.

En dado caso de que tengan  un sistema windows en alguna particion sus sistema de ficheros sera ntfsk, tengan precaucion de no elegir esta particion.

La “swap” es utilizada para el intercambio con la memoria mientras que ” /” sera la particion  principal en donde sera construida toda la estructura de directorios de nuestro sistema linux.

Comenzando con las particiones de la siguiente manera:

#mkefs -j /dev/sda1 

Unicamente se debe especificarse un parametro mas para poder utilizar el sistemas ext3
El utlimo paso para terminar con la fase de creacion de particiones es la activacion de la particion de intercambio swap.

#mkswap /dev/sda3 y #swapon /dev/sda3

Montando las particiones hechas.

Una vez que la particion han sido formateada es necesario montarla para hacer uso de ella aca esta dicho proceso:

#mount /dev/sda1 /mnt/gentoo/

Ajustar la hora.

Con el comando date y su sintaxis es la siguiente:

  • date MMDDHHmmAAAA

MM:mes

DD:dia

HH:hora

mm:minuto

AAAA:año

#date 042912102009

Stage.

Los diferente stages que existen en Gentoo son diferentes niveles de configuracion y optimizacion que podemos dar a nuestro sistema linux que te ofrecen los tres tipos de stages:

  • stage1:Debes de compilar todo, lleva muchisimo tiempo mas y solo vale la pena  si vas a escoger una optimizacion especial en la CFLAGS( Es comunmente usada para especificar la arquitectura de tu maquina, esta informacio es importante  para el compilador gcc por que le dice con exactitud que tan personalizable a la hora de ensamblar el codigo fuente de una aplicacion).
  • stage2:Incluye todo lo necesario para que puedas ejecutar emerge system(lo equivalente a haber terminado de configurar el stage1).
  • stage3:Incluye un sistema preconstruido(lo equivalente a haber terminado de configurar el stage2)

COMO OBTENER EL STAGE.

El stage debe seleccionarse en funcion a la arquitectura de la computadora.

http://www.gtlib.gatech.edu/pub/gentoo/releases/x86/current/

En mi caso elegi este:

 stage3-i686-20090422.tar.bz2

EL ARBOL PORTAGE.

Portage tendra toda la estructura necesaria para poder instalar tanto aplicaciones como las diferentes dependencias que pudiera tener.

http://www.gtlib.gatech.edu/pub/gentoo/snapshot

AHORA QUE!!

Teniendo  ambos  archivos , stage y portage procedemos a copiarlos a nuestro directorio de instalacion /mnt/gentoo

#cp stage... portage... /mnt/gentoo

Nos posicionamos en la carpeta.

#cd /mnt/gentoo

Descomprimimos stage.

#tar xvjpf stage...tar.bz2

En donde x=descomprimir, v= ver lo que esta pasando durante la extraccion del paquete, j=descomprimir con bz2, p=preservar los permisos de todos los archivoss y f=para poder indicar que estamos descomprimiendo un archivo.

Stage ya fue descomprimido, tenemos que realizar un proceso similar para poder extraer el arbol portage.

#tar xvjf portage...tar.gz  -C  /mnt/gentoo/usr

Listo, descomprimiendo esos dos archivos, estamos listos para poder continuar con la siguiente etapa es la configuracion de nuestro archivo make, base fundamental para la optimizacion de nuestro sistema gentoo.

CFLAGS Y MAKE.CONF

La piedra angula de gentoo es su habilidad de poder ser optimizada para una arquitectura en particular, dicha accion se lleva acabo mediante un simple archivo de configuracion… llamado “make.conf” que se encuentra en el directorio /etc.

Algunas de las cosas primordiales que podemos encontrar en el son las siguientes:

  • CFLAGS, CXXFLAGS: Son todos los parametros que podemos indicar para la optimizacion de la instalacion de aplicaciones en nuestro entorno Gentoo, a un nivel mas profundo podemos decir que son parametros formales para el compilador gcc.
  • CHOST: Esta variable define el sistema objetivo, es decir la arquitectura de la maquina en donde el sistema operativo sera construido, en mi caso es: i686-pc-linux-gnu, no hay que modificarla, ya que romperia la integridad del sistema.
  1. Para poder saber que parametros colocar Gentoo, ofrece mediante su wiki una pagina de “safe flags”, la cual podemos ver aca:

http://en.gentoo-wiki.com/wiki/Safe_Cflags

INFORMACION DE DNS.

Es necesario copiar la informacion del DNS, para poder asegurarnos de que la red sea funcional dentro del entorno del sistema que estamos instalando:

#cp -L /etc/resolv.conf /mnt/gentoo/etc/

La opcion “-L” es necesaria para asegurarnos que no copiamos un enlace simbolico.

MONTAR LAS PARTICIONES “PROC” Y “DEV”.

Esto es necesario para que toda la informacion correspondiente al kernel sea accesible desde el nuevo entorno de nuestro sistema operativo.

#mount -t proc none /mnt/gentoo/proc

#mount o bind /dev /mnt/gentoo/dev

ENTRANDO EN NUESTRO NUEVO ENTORNO.

Antes de esta etapa nos encontrabamos en el entorno proporcionado por el CD Minimal, ahora es necesario a nuestro sistema gentoo inicializado.

#chroot /mnt/gentoo /bin/bash
#env-update
#source /etc/profile

LAS VARIABLES USE.

Dichas variables son necesarias para poder brindar nuestra personalizacion sobre el soporte que queremos dar sobre las aplicaciones a instalar, esto nos provee la capsidad de dar soporte unicamente a las aplicaciones que necesitamos sin tener servicios innecesario como en un sistema generico, Dicha variable es configurada tambien en el archivo make.conf.

EL KERNEL LINUX.

Mucho se habla del kernel de linux, pero… basicamente es un componente que realiza la integracion entre el hardware de nuestra maquina y el sistema operativo.

Basicamente necesitamos una version del kernel estable para poder continuar con la construccion de nuestro sistema gentoo, para poder descargar las fuentes de dicho kernel es necesario escribir la siguiente instruccion:

#emerge gentoo-sources

……continuara…….

Entendiendo Gentoo.

Hola a todos me llamo Adrian y  en mi camino para convertirme en un desarrollador de gentoo iniciare explicando que es gentoo.

Es una distribucion GNU/linux, creado por Daniel Robbins (Nuevo México).

¿Que hace a gentoo tan poderoso?

Su gestor de paquetes llamado portage que se basa en los ports de FreeBSD, esta escrito en python y en bash.

El codigo fuente se compila segun:

-arquitectura de la maquina

-necesidades del usuario (no posible en otras distribuciones).

Un poco de historia.

Como ya les habia dicho fue creada por Daniel Robbins.

-Su primera distro es una debian en un pentium.

-Comienza a usar Stampede linux.

-Toma conciencia de que linux no es simplemente codigo, sino una comunidad de gente.

-Se convierte en desarrollador de Stampede creando un formato de paquetes.

-Intrigas entre los demas desarroladores hace que deje Stampede.

-Comienza su propia distribucion linux con la siguientes ideas:

  • Control
  • Rendimiento (CPU)
  • Aprendizaje mas profundo de linux.

-PROBLEMAS

1 Persona => tiempo limitado => scripts

-Creacion de los ebuilds

(Scripts en bash para automatizar la creacion e instalacion de binarios a partir de codigo fuente y parches).

los primeros fueron gcc, glibc y binutils…

-Unos meses mas tarde alcanza la decena de desarrolladores y se bautiza como enoch

-Colabora en la solucion de un bug en glibc ya solucionado internamente por RetHat.

-Enoch se mejora, se interesan mas desarrolladores y el proyecto se renombra a Gentoo linux.

-Daniel compra un Dual Celeron 366, que provoca un fallo sin solucion en el nucleo, haciendo que la maquina se

cuelgue. Esto le impide seguir con el desarrollo durante un tiempo.

-Se pasa a FreeBSD y se da cuenta que se ajusta bastante a la idea que tiene para “su distribucion”.

-Unos meses mas tarde retoma el proyecto con una maquina nueva aplicando lo aprendido de FreeBSD,

principalmente el sistema de pors, al que llama portage y lo escribe en python.

-Gentoo 1.0 liberada en Marzo de 2002

-ahora

Scripts + codigo fuente + parches

-Gentoo reconocida como una metadistribucion.

-Fue contratado en Abril de 2004 por Microsoft para ayudar a comprender los proyectos de codigo abierto y

colectivos (Community)

-En enero de 2006 deja el cargo.

-Hoy en dia esta en desarrollo de una nueva distribucion llamada funtoo.

¿Que es gentoo?

-Segun el diccionario gentoo(Pygoscelis papua) es el pingüino más rápido bajo el agua, alcanzando velocidades

de 36 km/h.

EL CONTRATO SOCIAL.

-Deja elegir entre varias opciones.

-Libera todo lo desarrollado.

-Es independiente de  organizaciones y empresas.

CONTRAS.

-Complicado y lento de instalar.

-Tiempo de instalacion de ebuilds.

-Consumo de CPU al instalar ebuilds.

-Aplicaciones “desfasadas rapidamente”

-Configuracion manuales

-Cuidado al cambiar de version de gcc.

-Demasiados ebuilds y cada uno con varias versiones.

-Por lo anterior y por que Portage esta hecho en python (lenguaje interpretado), cada vez mas lento.

PRO.

-Control absoluto del sistema “si algo esta ahi es por que lo has puesto tu “.

-Gran posibilidad de aprendizaje.

-Posibilidad de componer el sistema en base a los conocimientos adquiridos en la instalacion.

-Siempre actualizado.

-Bajo consumo de CPU y demas recursos.

-Compilas los programas  tus necesidades activando y desactivando flags.

-Uso del juego de instrucciones propio del procesador en el paquete que se instale.

-Existen paquete ya compilados para maquinas poco potentes o para ahorro de tiempo(OpenOffice, KDE,

Mozillafirefox, mplayer entre otros mas)

-Eleccion entre diferentes versiones de un mismo “paquete” a instalar.

-Permisividad configurable individualmente de paquetes en pruebas (masked) o inestables (hard masked).

ALGO MAS DE PORTAGE.

-Es nuestro sistema de paquetes.

-Escrito en python.

-Actualmente existen 26646 ebuilds y 13479 paquetes (30/04/2009).

-Versiones para MacOS, Solaris y FreeBSD.

-Se utiliza atravez de emerge(el que ejecuta todas las reglas de un ebuild).

-Existen otras herramientas auxiliares: eselect, eix, equery etc…

agradezco a un amigo que prefiere estar en el anonimato y que ayudo en este post.