sábado, 5 de septiembre de 2009

Gentoo, lo recomiendo

Hacía mucho que no escribía debido al trabajo 0:) Pero ya estoy de vuelta y os voy a comentar algunas cosillas a tener en cuenta de Gentoo.

Mi compi Picajoso ya ha escrito sobre la nueva versión de Gentoo. No os voy a comentar las novedades ni lo que ya ha comentado Picajoso. Os voy a recomendar probar Gentoo.


Para los que no conozcáis Gentoo, es una distribución que se compila casi desde el principio, algo similar a Linux From Scratch (LFS). La principal diferencia entre Gentoo y LFS es que Gentoo te ofrece un sistema básico desde el que puedes empezar. Este sistema básico te instala librerías, compilador y algunas herramientas básicas como por ejemplo editores. En el caso de LFS, no te trae nada precompilado y es un sistema operativo que te tienes que compilar desde un principio, aunque existe el proyecto ALFS (Automated Linux From Scratch, Linux From Scratch automatizado) que facilita la tarea de recompilar todo :)

Mucha gente preguntará:

  • ¿por qué complicar las cosas?
  • ¿por qué recompilar todo tu sistema si ya tienes distribuciones precompiladas?
  • ¿es que no tienes vida privada?

Bueno, la respuesta principal es: para aprender. Algunos pensarán: “Buah! Para eso ya he ido/voy al cole/Universiadad/…”. Correcto, en estos centros nos enseñan cosas, pero no todo se aprende allí. Este tipo de distribuciones nos permiten aprender:

  • de qué se compone un sistema operativo (cuáles son sus partes)
  • las dependencias entre unas partes y otras
  • las herramientas necesarias
  • qué hace cada herramienta
  • mucho sobre (nuestro) hardware
  • cómo optimizar un sistema
  • que el compilador NO lo es todo

Voy a centrarme principalmente en el punto “que el compilador NO lo es todo” aunque también voy a hablar sobre algunas herramientas.

Es importante tener en cuenta que el compilador NO lo es todo, aunque sí es una parte muy importante. Mucha gente cree que la gran ventaja del software libre es que, al tener el código fuente y el compilador, puedo hacer lo que me da la gana. Esto no es cierto. Hay que saber programar muy bien y conocer muy bien cómo funciona un compilador para “hacer lo que me da la gana”.

Muchas veces, se ve en los foros de Gentoo las miles de opciones que algunas personas le pasan al compilador para compilar su sistema. Esto es muy peligroso ya que puede provocar que el sistema sea inestable, pierda rendimiento, … Debido a que las opciones que le hemos pasado al compilador son incorrectas. Un buen enlace para leer en este caso es este.

Una recomendación que os hago es: no exageréis las opciones del compilador. Muchas veces lo que os viene por defecto funciona perfectamente y no hace falta nada más. Sí es cierto, que otras veces por ejemplo, en el mundo HPC/Supercomputación, sí hace falta recompilar determinada aplicación y/o librería con determinadas opciones ya que se conseguirán mejoras interesantes, pero no todos estamos dedicados al 100% al mundo del HPC ;)

Lo primero que tenemos que hacer es: conocer bien nuestro hardware. Esto es muy importante porque las opciones que le pasaremos al compilador dependerán mucho de nuestro hardware.

Luego tendremos que leernos el manual de GCC, ese gran compilador que usa Linux por defecto. Pero OJO, hay que leerse la documentación de la versión que vamos a usar !!! ;)

Una vez que sabemos qué hardware vamos a usar y haber leído la documentación correspondiente de GCC, hay que usar unas opciones “lógicas” respecto a lo que estáis haciendo. Por ejemplo, para el sistema base, las opciones que vienen por defecto (-O2 -march=i686 -pipe) son más que suficientes (la opción -march dependerá de la arquitectura que estemos usando). Podremos añadir nuevas opciones al compiladro en función del paquete que estemos compilando, siempre asegurándonos con la documentación de GCC y la del paquete (sin olvidarnos de las listas de correo) que todo es correcto.

“Vaya … si el GCC tiene “minolles” de opciones y tu me estás diciendo que use 3 de ellas … ¿para qué tiene tantas?” Bueno, las opciones que tiene GCC o cualquier otro compilador muchas veces son para situaciones específicas. Determinadas aplicaciones/situaciones requieren dichas opciones, pero no todas.

“¿Entonces eso de que Gentoo es más rápida y más mejor es una milonga?” No, lo que pasa es que para que sea “más mejor” no hay que abusar o centrarse en el compilador, un sistema operativo tiene mucho más.

¿Dónde está realmente la potencia de Gentoo? Muy sencillo, en la variable de entorno USE. USE es una variable de entrono que nos permite definir qué queremos y qué no queremos que se compile. Por ejemplo, a mi no me gusta GTK ni GNOME (soy lo que los norte americanos llamarían un KDE die-hard), así que deshabilito todo aquello relacionado con GTK y/o GNOME. Es decir, puedo decidir qué opciones se compilan en un determinado paquete o si se va a soportar tal o cual propiedad. Otro ejemplo es que puedo compilarme el kdegraphics sin soporte para scanner porque no tengo.

Muchos pensarán: “pues no me instalo en GNOME o los paquetes para scanner y ya está”. Pues no, ya que aunque no te instales el sane, tu KDE ha sido compilado con soporte para scanners, luego te va a incluir un montón de librerías que no quieres/necesitas.

La variable USE se define en el fichero /etc/make.conf y se define de la siguiente manera:

USE="palabras clave separadas por espacios"

Para una definición mucho más extensa, echad un vistazo a este enlace. Para una lista de una gran mayoría de palabras clave que se pueden usar en la variable USE, podéis acceder a este enlace. Cuando digo “gran mayoría”, quiero decir a muchas, pero no todas ;)

La variable USE puede definirse de una forma tan sencilla como:

USE="-gtk -gnome kde qt3"

O bien complicarla como:

USE="-3dfx -3dnow X Xaw3d a52 aac aalib -accessibility acl acpi -adabas -adns -afs -aim alsa -altivec ao -apache2 apm arts -atm audiofile avahi bash-completion -bcmath berkdb -bidi bindist -birdstep -blas bluetooth -boundschecking bzip2 -cairo calendar -canna caps -cdb cddb cdinstall cdparanoia cdr -cgi -chasen -cjk clamav cracklib crypt cscope css ctype cups curl curlwrappers -cvs cxx -db2 dbase dbm -dbmaker dbus dbx -debug -dedicated dga directfb djvu -doc dri dts dv -dvb dvd dvdr dvdread -eds -emacs -emboss -empress -empress-bcs encode enscript esd -esoob -evo -examples exif expat fam -fastcgi fbcon ffmpeg -fftw -filepro -firebird firefox flac flatfile fltk fontconfig foomaticdb fortran -freetds -freewnn -frontbase"

Si os fijáis, un guión (-) antes de la palabra clave significa que deshabilito el soporte para dicha función o dicho paquete.

“Pero … ¿y si mañana me compro un scanner?” Muy sencillo (y aquí viene otra de las grandes utilidades de Gentoo), añades scanner a la variable USE y recompilas. “¿Recompilo el qué? ¿Todo?” Depende … deberías recompilar todo aquello que se pueda ver afectado por esta novedad. “Pos vaya rollo”. Sí y no, sí porque tienes que recompilar y no porque así sabes de qué componentes está formado tu sistema y las dependencias que tienen unos de otros

Gentoo ha resuelto esto de recompilar “todo” de una manera muy sencilla. Tiene una herramienta en línea de comando que es:

revdep-rebuild

Nota: si alguna vez revdep-rebuild te lia y te pide reinstalar cosas que ya estan recompiladas ya anteriormente con revdep-rebuild (sobretodo los que usen ~x86 o una version de SandBox unstable

revdep-rebuid -i

la opcion i hace que se limpie e ignore la cache de revdep-rebuild, util si se te corto la recompilacion de los paquetes y no te pida reinstalar lo que ya se recompilo

Básicamente lo que hace es escanear tu sistema y si ve que has cambiado una librería y que un paquete determinado debería ser recompilado … lo recompila.


Existe otra opción también cuando cambias la variable USE que es:

emerge --update --deep --newuse world

Nota: Se puede acortar asi:

emerge -uDNav world

que es lo mismo que he puesto

emerge es la herramienta de gestión de paquetes y gestión de la compilación de dichos paquetes. Si quieres instalar un paquete, lo que tecleas es:

emerge nombre_del_paquete

Entonces emerge descarga el código fuente, lo compila y lo instala.

Nota: se puede ver que paquetes se instala x paquete y ver todo en modo verbose, y ademas preguntar si instalar o no:

emerge -av nombre_del_paquete

En el ejemplo que os he puesto arriba, lo que haría emerge es comprobar si las variaciones que hemos hecho a la variable USE afectan a algún paquete en cuestión y, si el paquete se ve afectado, lo recompila. Como podéis ver en la captura de pantalla que pongo abajo, en mi caso habría que recompilar 49 paquetes. Las palabras clave en verde son novedades, las que están en rojo son las que hemos utilizado en una compilación anterior y las que están en azul son las que hemos marcado con un guión (-).

Antes de acabar, unos consejos:

  • no esperéis tener un Gentoo funcionando en una tarde
  • tenéis que ser pacientes
  • id poco a poco, entendiendo lo que estáis haciendo y lo que habéis hecho
  • aprended todo lo que podáis
Es un proceso lento, pero muy gratificantes así que paciencia

En resumen, lo bueno de Gentoo es que te permite aprender mucho de tu sistema y sabrás que si algo falla es por tal o cual razón: sea culpa de una opción del compilador, por el hardware, por dependencias, por librerías, … Y, lo más importante, nos pemite aprender de nuestros errores ;)

Ohh!, casi se me olvidaba una captura de pantalla de Gentoo 2008.0

Fuente

Ps: Le he añadido cosas al post que faltaban del post original de la fuente :)