Linux From Scratch: ahora sí

LFSYa he terminado mi Linux From Scratch en el portátil. Sinceramente pensaba que sería mas díficil, simplemente hay que copiar, entender y pegar una serie de comandos que ya vienen hechos. Esto no significa que no me haya gustado, he aprendido muchísimo en pocos dias (no lo he contado en horas para no asustarme). La gracia está en el hecho de poder construir el sistema como a tí te dé la gana, pero por ser la primera vez me he ceñido al guión, aunque tengo ganas de probar algunos de los hints que proponen en la web oficial.
Ahora mismo tengo un sistema base que no sirve para mucho, y tengo que arreglar un problema que me dan las locales a la hora de leer según qué página man, y lo más importante, conseguir que me detecte la eth0, no sé que habré hecho mal pero espero resolverlo. Al menos no me he llevado ningún kernel panic, que ya es mucho.
Si te gusta conocer como funciona y se construye un sistema operativo GNU/Linux, no te puedes perder esta maravilla. Muy recomendale.

Think of free speech, not free beer

Estaba buscando una definición de Software Libre y descubro que en Google aún no lo tienen muy claro. Resulta que si buscas Software Libre en Google, sale un enlace patrocinado que anuncia Descarga software gratis. Es un enlace hacia Google Pack, lo que segun ellos és Una colección gratuita de software indispensable y que incluye 11 programas, de los cuales sólo Firefox es libre.

Gratuidad no implica Libertad.

Linux From Scratch

Para los que no conozcan el proyecto, LFS (Linux From Scratch) es una “distribución” GNU/Linux que no encaja muy bien en la definición de distribución, pues no hace nada por tí, sino que espera a que tu hagas TODOS los pasos.

Me explico, Linux From Scratch consta básicamente de un manual que nos explica cómo crear una distribución Linux desde cero; los paquetes que hay que bajar, de dónde bajarlos, cómo compilarlos y en qué orden, cómo crear el árbol de directorios y los archivos de configuración, etc. ¿Y para qué sirve esta tonteria? Pues, a mi modo de ver sirve para aprender cómo funciona realmente un sistema GNU/Linux internamente. Aunque no sólo sirve para esto, de hecho con la ayuda de LFS podemos hacer una distribución 100% a nuestro gusto, o usarla de base para un proyecto mayor (como es el caso de Arch).

Para ello sólo necesitamos una partición en nuestro disco, que es donde se llevará a cabo el largo proceso de instalación, y un sistema host que usaremos para realizar el proceso (puede ser un Live CD o una instalación de Linux en una partición aparte). En mi caso estoy realizando el proceso en mi portátil, usando Arch como sistema host e instalando LFS en una partición de 2GB. Si todo el proceso funciona bien y consigo reiniciar con un sistema mas o menos funcional, intentaré añadir los paquetes que hagan falta (ayudándome del proyecto BLFS) para conseguir un sistema usable de verdad.

De momento he compilado las herramientas básicas, he hecho un chroot para entrar en el supuesto sistema (que de momento sirve de bien poco), y sigo compilando y compilando software a mano (nótese la diferencia con Gentoo, aquí hay que desempaquetar, hacer el ./configure, make, make install para cada paquete, LFS nos ayuda proporcionando los comandos con sus parámetros adecuados). Soy consciente que en cualquier momento puedo quedarme estancado (por problemas en los tests de compilación, o por cometer algún error, o por falta de tiempo/ganas, etc), pero de momento parece muy interesante, y aunque no llegase al final, por lo menos habré aprendido muchas cosas sobre cómo se construye una distribución GNU/Linux, qué paquetes dependen de qué otros en un sistema básico, cuales necesitan tal o cual libreria, etc.

[sigue mi aventura con LFS]

Fish: el shell interactivo amigable

fish shellCuando empezé a usar sistemas operativos tipo-UNIX aluciné con Bash, realmente no tenía nada que ver con usar la linea de comandos en Windows (aunque yo en Windows nunca la usé demasiado, supongo que precisamente por ser poco amigable). Al poco de usar Bash descubrí podia usar otras opciones como zsh, ksh, tcsh pero ninguna me convenció demasiado.

Hasta hace un par de meses, que fué cuando descubrí al grandioso Fish (Friendly Interactive SHell). A diferencia de las otras que probé, esta sí se parecía mucho a Bash, o sea que no tuve que aprender NADA. Solo tuve que usarla durante un tiempo para ir descubriendo poco a poco sus ventajas, entre las cuales están:

  1. No solo autocompleta directorios, ficheros y comandos como Bash, ¡lo autocompleta todo! Por ejemplo: ssh te autocompleta con tus hosts conocidos o lugares donde conectaste en el pasado; el autocompletado de comandos incluye brebe descripción del ejecutable en cuestión; autocompletado de variables de entorno; autocompletado de las páginas man y help… y mucho más, y todo esto con paginación de los resultados de autocompletado.
  2. Uso y abuso de colores. El prompt consta de: usuario@host (en blanco) + directorio actual (en verde). Parece cansino pero te acostumbras a los pocos minutos. Cada tipo de fichero tiene su color, por ejemplo los directorios se en azul, los de texto (txt, pdf, rtf…) en violeta, los multimedia (imágenes, musica, video) en un violeta mas rosado, los binarios en verde, los enlaces blandos en azul, los enlazados en rojo, etc.
  3. Uso de negrita y subrayado para remarcar rutas correctas, ficheros importantes (imágenes, multimedia, directorios, ejecutables), etc
  4. Atención al error en tiempo real, si lo que estás escribiendo no es un comando (aún), lo marca en rojo, cuando pasa a ser algo coherente lo pinta de verde. Lo mismo se aplica a directorios o ficheros (aunque estos pasan a blanco).
  5. Ayuda en modo gráfico, por lo que si escribes help te sale un mensaje de “Help is being displayed in firefox” y efectivamente se abre Firefox (o el navegador que uses por defecto) y te muestra esta completísima ayuda.

Casi se me escapa decirlo, toda esta información que Fish añade (descripciones de los ejecutables, hosts conocidos, páginas man y help, etc) no es estática sinó que se busca en tiempo real. Por este motivo puede suponer un problema si se abusa de sus posibilidades en un ordenador antiguo.Por todo esto y mucho más que voy aprendiendo con el tiempo, prefiero Fish a Bash y cuando uso Bash noto que me falta algo.

Podéis ver algunas capturas de pantalla (y más información sobre Fish) en esta página. Para terminar solo decir que Fish no es perfecto, pero merece mucho la pena probarlo.

¿Fácil = mejor?

Ultimamente me veo rodeado de muchas personas que empiezan a sentir interés por el software libre y en especial por las distribuciones Linux. Cuando me piden que les recomiende alguna distribución acostumbro a recomendar Kubuntu, no por que me parezca la mejor (de hecho veo a Ubuntu algo mas pulida, pero prefiero recomendar KDE a gente que sé que va a trastear con las posibilidades que ofrece este escritorio).

Por lo que estoy viendo, lo que más cuesta entender es el por qué coño hay tantas distribuciones, ¿podré hacer tal cosa con esta?¡Claro!¿Pues donde está la diferencia entre la distribución X y la distribución Y? Les cuento que básicamente la diferencia la marcan tres aspectos: el instalador, el software por defecto y la forma en que el sistema va a actualizarse o van a instalarse/desinstalarse más programas en él. Cuando me preguntan por qué estoy recomendándoles una distribución que no uso, o porqué no les recomiendo la distribución que uso en casa, tengo que explicar que les estoy recomendando algo fácil¿y entonces porqué no usas tú Ubuntu si es mas facil? La respuesta es muy simple:

La mejor distribución es la que más se adapta a tí y a tus necesidades, y menos te pide que tú y tus necesidades os adaptéis a ella. Si vas a empezar con esto usa algo fácil (primero tienes que familiarizarte, ya habrá tiempo para usar Gentoo, Arch Linux o Slackware mas tarde si hay interés en aprender), si vas a montar un servidor no vas a necesitar para nada el entorno gráfico (mejor usa una distribución que pueda instalarse sin él), si vas a usarla en un Pentium 133 no le instales escritorios como KDE o Gnome (usa Fluxbox por ejemplo), si la vas a usar para jugar… oh wait!

Yo quiero algo que se adapte a mis necesidades, pero a mis amigos no les recomendaria nunca algo que se adaptase a mis necesidades sinó a las suyas, que generalmente son: facilidad de uso y un entorno bonito. En mi opinión no es mejor una distribución por que la pueda instalar mi madre.

[Actualización]
15 dias después de escribir este post, estaba curioseando en OSnews y he encontrado una comparativa Arch Linux VS Slackware. Atención al primer párrrafo:

This is an article outlining the differences between –what I believe– are the two best Linux distros around today. Mind you though, “best” doesn’t always mean “easy”.

…curioso.

Perl/Linux

Siento mucho poner el tag curiosidades a una distribución Linux, pero es que esta se lo merece mucho. Se trata de una distribución donde TODOS los programas están escritos en Perl. Como ellos dicen, “from /sbin/init to /bin/vi. Perl/Linux usa algunos programas del proyecto Perl Power Tools (PPT), otros de Jay Kominek’s Perl/Linux page. El resto de las herramientas necesarias han sido escritas en Perl de la nada, como por ejemplo: plHttpd, edit, vi, mount, xargs, login, passwd, getty, halt, init, ifconfig, route. Según sus autores, el único código compilado es el kernel linux, perl y uClibc.

Como dato curioso, en la web del proyecto hay un texto llamado Linux and the Perl, que es una parodia del mítico Linux and the GNU Project de Richard Stallman. Pongo algunas comparaciones:

Empieza con…

Many computer users run a modified version of a Perl system every day, without realizing it. Through a peculiar turn of events, the version of Perl systems which is widely used today is more often known as “Linux”, and many users are not aware of the extent of its connection with the Perl Project. Linux and the Perl

Many computer users run a modified version of the GNU system (18k characters) every day, without realizing it. Through a peculiar turn of events, the version of GNU which is widely used today is more often known as “Linux”, and many users are not aware of the extent of its connection with the GNU Project. Linux and the GNU Project

Y sigue…

Perl and perl based software was the largest single contingent, around 30% of the total source code, and this included some of the essential major components without which there could be no system. Linux itself was about 3%. So if you were going to pick a name for the system based on who wrote the programs in the system, the most appropriate single choice would be “Perl”. Linux and the Perl

GNU software was the largest single contingent, around 28% of the total source code, and this included some of the essential major components without which there could be no system. Linux itself was about 3%. So if you were going to pick a name for the system based on who wrote the programs in the system, the most appropriate single choice would be “GNU”. Linux and the GNU Project

Ya más hacia el final…

When Linus Torvalds wrote Linux, he filled the last major gap. People can now put Linux together with the Perl system to make a complete free system: a Linux-based Perl system (or Perl/Linux system, for short). Linux and the Perl

When Linus Torvalds wrote Linux, he filled the last major gap. People could then put Linux together with the GNU system to make a complete free system: a Linux-based version of the GNU system; the GNU/Linux system, for short. Linux and the GNU Project

Y podria seguir comparando el texto entero, jajaja.

Mis inicios en este mundillo: Slackware y las dependencias

Aviso: Este post no tiene moraleja, ni objetivo pedagógico ni nada por el estilo

En mis inicios en gnu/Linux, opté por Slackware porque tiene fama de ser una buena distribución para aprender. ¡Y es verdad! Si eres novato en esto y quieres aprender, lo que no debes hacer es usar durante un largo tiempo una distribución con instalador-asistente y GUIs para configurarlo todo. Yo empecé con SuSe, y me encantó Yast porque yo venia de Windows. Pero sólo la usé 2 meses porque tenia claro que si me acostumbraba, el paso hacia otra distribución seria mas difícil. Opté por Slackware, simplemente para aprender a hacer las cosas con la linea de comandos.

En cierto modo me enamoré de Slack. Al principio me dió muchísimos problemas, porque SuSe no me habia dado ninguno de los conocimientos que yo necesitaba. Descubrí que 2 meses de SuSe sólo me habian servido para aprender a usar aplicaciones que sustituirían a las que hacía años que usaba, y en esto cumplió a la perfección. Creo que la primera instalación de Slackware usable que hice fué la quinceava (mas o menos), no os engaño. Tardé mucho en poder configurar bien el sonido, la tarjeta gráfica, la impresora, la grabadora de DVDs, el pendrive USB, etc, pero el trabajo valió mucho la pena. Afortunadamente sabía que eso no pasaba en todas las distribuciones Linux, decidí quedarme con mi Slack.Informándome sobre esta magnífica distribución descubrí lo que era la resolución de dependencias, ya que Slackware no dispone de esta característica. La verdad es que NUNCA me supuso un problema, y eso que era un principiante. Nunca instalé swaret ni slapt-get (programas al estilo del APT de Debian, para Slackware y con resolución de dependencias), ya que a lo largo del año y pico que usé Slackware, estuve convencido que al tener que resolver las dependencias “a mano” aprendería mucho más sobre qué programa depende de qué librería o de qué otro programa. Sinceramente, ahora veo que estaba equivocado.Cuando decidí dejar Slackware para no encerrarme y poder aprendre un poco más, probé distribuciones como Gentoo, Arch e incluso FreeBSD. Al final me quedé con Arch que es la que llevo usando algunos meses. Arch dispone de pacman, otro programa estilo apt, que me ha convencido de mi error. Sí, deberia haber instalado swaret en Slackware. Usando pacman soy mucho más consciente de cómo és el árbol de dependencias, al contrario de lo que pensaba antes.

Indent

Hoy en el menéame han enviado una noticia sobre el International Obfuscated C Code Contest, que como su nombre indica es un concurso de ofuscación de código en C. A los programas ganadores les ponen títulos como: Best of show, Most Obfuscated Algorithm, Best abuse of the rules, Astronomically Obfuscated, Best abuse of system calls, Most Humorous, Best one liner, etc

Para que veáis algunos ejemplos de los programas ganadores, os linkeo algunos:

[1] [2] [3]

He pensado rápidamente en el programa indent, que sirve para autoindentar correctamente el código en C. Lo he instalado en mi querido Arch

# pacman -S indent

…he des-ofuscado algunos de los programas ganadores y me he reido un montón viendo lo que hace la gente para conseguir esos resultados. Pero aunque indent es tan fácil de usar como escribir en el prompt…

# indent file.c

…la mayoría de programas me han dado errores en lineas concretas, y algunos seguian ilegibles incluso después de indentar. Tengo que decir que no me he atrevido a compilar ninguno de ellos ;) así que si alguien se atreve, que lo cuente!