Tutorial simple para hacer tu primer PR (Pull Request)

Bueno, este si creo que será un tutorial bastante corto y esperemos que didáctico ;). Voy a poner a disposición de ustedes un pequeño repositorio en mi github para que puedan mandar sus PR y al mismo tiempo para que practiquen cómo hacer todos los pasos que voy a dejar a continuación. Aquí el link para hacer sus PR de prueba:

https://github.com/CodeLabora/TuPrimerPR

Bueno, vamos a listar rápidamente los pasos necesarios para mandar un PR:

  1. Fork
  2. Clone
  3. Remote
  4. Branch
  5. Cambios
  6. Add
  7. Commit
  8. Push
  9. PR

Los estoy poniendo en inglés para que encuentren sus respectivas opciones en la línea de comando de git.

Fork

Un fork es tu propia versión de un repositorio de Github. Este te permite clonar el trabajo de otro proyecto y tenerlo en tu cuenta para que puedas cambiar cosas sin preocupación de perder tus cambios. Para realizar un fork solo es necesario ir a la página y dar click al botón Fork que se encuentra en la parte superior derecha.

Diseño propio. Christopher Díaz Riveros

Una vez realizado el fork podrán ver que en su cuenta aparece el repositorio.

Diseño propio. Christopher Díaz Riveros

Clone

Ahora que ya tenemos un repositorio lo vamos a clonar a nuestro equipo. (Asumo que me siguen personas que usan Linux, pero para los usuarios de otros sistemas también existen versiones de git que pueden descargar en su página oficial.

Diseño propio. Christopher Díaz Riveros

Y con nuestro terminal hacemos lo siguiente.

Diseño propio. Christopher Díaz Riveros

Con esto tendremos una nueva carpeta llamada TuPrimerPR en la que estará nuestro proyecto de Github. entramos a la carpeta con el comando “cd TuPrimerPR” y veremos que dentro están los archivos que se encuentran en nuestro fork.

Diseño propio. Christopher Díaz Riveros

(Tengan en cuenta que la cantidad de archivos puede variar dependiendo de lo que encuentren en mi repositorio cuando hagan el fork)

Remote

Este es un paso opcional, pero que evita muchos problemas al momento de trabajar de manera continua en un proyecto. Fork por defecto crea una copia exacta del repositorio, pero en el momento exacto de la creación. Esto quiere decir que si el proyecto sigue avanzando, su repositorio se va a quedar atrasado con el pasar de los días u horas. “git remote ”  nos permite especificar otro punto de descarga (el proyecto original) y así poder actualizar nuestro proyecto cada vez que vemos que el proyecto padre se está actualizando.

Para encontrar tu proyecto padre solo hace falta usar el link que se encuentra justo abajo del nombre de tu repositorio. (Revisen la segunda imagen del apartado Fork). Vamos a agregar este dato a continuación:

Diseño propio. Christopher Díaz Riveros

Este es el proyecto original (lo vamos a llamar upstream para seguir la corriente de muchos proyectos).

Diseño propio. Christopher Díaz Riveros

Como pueden ver, he agregado el remote con ” git remote add <nombre> <URL> ”

Con esto vamos a poder actualizar el proyecto cuando sea necesario, pero no lo vamos a usar ahora porque no es necesario. (Eso lo explico más adelante, o en otro post, dependiendo de la necesidad)

Branch

Los branch (o ramas) permiten crear secciones de código que puedes trabajar en un entorno aislado. Esto quiere decir que lo que hagas en un branch no necesariamente afecta al código original hasta que se utilice un ” git merge “. También es una funcionalidad extra que te permite Github, cada vez que tu creas un branch, Github genera automáticamente la fuente del Pull Request cuando es necesario.

Diseño propio. Christopher Díaz Riveros

Ahora que estamos en nuestra rama especial, podemos trabajar en nuestra contribución.

Cambios

Voy a agregar un par de archivos para que vean cómo se hace.

Diseño propio. Christopher Díaz Riveros

“touch ” nos permite crear un archivo (si es que no existe) en blanco. con esto podemos pasar a nuestro siguiente paso.

Add

” git add ” nos permite agregar archivos a nuestro commit (los explico más adelante). Para ver qué archivos puedes agregar se puede utilizar el comando ” git status ”

Diseño propio. Christopher Díaz Riveros

Con esto tenemos todo preparado para nuestro Commit

Commit

Los commits son marcas (o hitos) en el tiempo. definen un estado para todos los archivos del proyecto y acumulan los cambios necesarios para llegar desde el principio del proyecto hasta el estado actual. Suena un poco complejo, pero es bastante sencillo, solo recuerda que son las escaleras de tu proyecto. Escribimos ” git commit ” y nos saldrá una ventana para escribir nuestro mensaje de commit.

Diseño propio. Christopher Díaz Riveros

Y al finalizar y guardar el texto, veremos algo como:

Diseño propio. Christopher Díaz Riveros

Donde se muestra un resumen de lo que hace el commit.

Push

Con push estamos subiendo a nuestra cuenta de Github todos los commits que tenemos en el equipo que no se encuentran en nuestro repositorio en internet. Esto hará que Github pueda generar el nuevo PR de manera automática.

Diseño propio. Christopher Díaz Riveros

Noten que estamos usando el nombre de nuestro branch y que nos solicita nuestro usuario y contraseña. Al final nos muestra que se ha creado el branch miMejora dentro de nuestra cuenta de Github. Vamos a ver en el navegador lo que hemos conseguido. ;)

PR

Diseño propio. Christopher Díaz Riveros

Como pueden ver, se ha creado una nueva línea que dice “Compare & Pull request”. Esta funcionalidad de Github nos permite crear el PR de manera sencilla, vamos a dar click para ver qué sucede.

Diseño propio. Christopher Díaz Riveros

Github es bastante inteligente. Como pueden apreciar, partes el commit se agregan al formulario para envío. Solo es necesario dar click al botón y listo :) Sencillo.

Extra

Esto es el detrás de cámaras de los proyectos, aparece el PR y el encargado decide si aceptar o no, o escribir más mensajes. En mi caso lo voy a aceptar de manera instantánea.

Diseño propio. Christopher Díaz Riveros

Una vez realizado el merge, podrán ver el log de commits del proyecto y ver su nombre en él.

Diseño propio. Christopher Díaz Riveros

Pero ahora tenemos un problema. Ese commit no aparece en nuestro repositorio, solamente en el del proyecto. ¿Recuerdan nuestro paso de remote? Ahora es cuando rinde frutos :)

Volvemos a nuestro branch master y hacemos lo siguiente:

Diseño propio. Christopher Díaz Riveros

Con esto hemos descargado toda la información del proyecto original a nuestro equipo. Como pueden apreciar, ahí aparece nuestro commit. Ahora vamos a guardar todo este trabajo en nuestro repositorio de Github para poder eliminar el branch que tiene el aporte que ya agregaron al proyecto.

Diseño propio. Christopher Díaz Riveros

Ahora que ya tenemos nuestro repositorio de Github actualizado vamos a borrar nuestro branch, pero primero nos aseguramos que esté dentro de nuestra rama principal (master)

Diseño propio. Christopher Díaz Riveros

Como pueden ver tuve un ligero error, esto era porque me encontraba en mi branch miMejora al momento de quere borrar. Esto se arregla regresando al branch master.

Conclusión

Listo :) tan sencillo como eso. Ahora que dominan los oscuros secretos de Github para mandar PR, espero ver sus contribuciones en diversos proyectos. Y si desean pueden dejar su primer PR en mi repositorio ;) para el recuerdo.

No he tocado mil y un beneficios de Git (OJO, no Github) y como es de esperar de desarrolladores que están ligados a la comunidad del Kernel, Git es una herramienta sumamente poderosa, con cientos de funcionalidades.

Para poder tener una mejor idea de lo que hace y todo el poder de Git, les recomiendo mucho este libro. Estoy seguro que les ayudará bastante a mejorar en el manejo de git.

Saludos y espero que les ayude ;)

Mi primer PR (Pull Request) en Github

Bueno, me tomaré la libertad de salir un poco de mi zona de confort, para entrar en otra de mis zonas de confort :P FOSS. En este post pretendo, así como hice con Gentoo, primero compartir un poco de mi experiencia personal y así tratar de emocionarlos un poco a poder sumergirse de lleno en el mundo de los proyectos y las contribuciones. Sin más que agregar, empecemos:

FOSS

Free and Open Source Software (por sus siglas en inglés) es una corriente que envuelve tanto a proyectos open source como de software libre. No pretendo discutir las diferencias entre ambos ya que ya lo he hecho en repetidas oportunidades, incluso una vez tuve que explicar todo al mismo señor Stallman que me contactó por correo en una de las listas de proyectos que abundan por internet. Un artículo que me emociona mucho y el cual les voy a compartir se encuentra en la página oficial de GNU y como muchos de sus documentos, se encuentran traducidos a diversos idiomas. Les adjunto el link y me tomaré la libertad de citar uno de los párrafos que más me llaman la atención.

https://www.gnu.org/education/edu-schools.es.html

La razón más profunda para utilizar software libre en las escuelas es la educación moral. Esperamos que las escuelas enseñen hechos básicos y habilidades útiles, pero esa es solo una parte de su función. La tarea fundamental de las escuelas es enseñar a ser buenos ciudadanos, incluyendo el hábito de ayudar a los demás. En el ámbito informático, esto se traduce en enseñar a compartir el software. Las escuelas, a partir del jardín infantil, deberían decirle a sus alumnos: «Si traéis software a la escuela, debéis compartirlo con los demás niños. Y debéis mostrar el código fuente en clase, por si alguien quiere aprender. Por lo tanto, no está permitido traer a la escuela software que no sea libre, a menos que sirva para hacer algún trabajo de ingeniería inversa».

Como pueden ver, el software libre es una corriente más que técnica, yo diría moral. Es como acercarnos un paso más a este mundo en el que el egoísmo y la soberbia están de lado y podemos tener gente que realmente comparte y se preocupa por los demás.

Bueno, no pretendo hacerlos fervientes usuarios de software libre, pero los animo a que den un salto por los documentos, y vean lo bueno que puedan rescatar :)

Proyectos

Todo software, ya sea open source o free software, tiene un proyecto y probablemente una comunidad girando a su alrededor. Estos son quienes lo mantienen, mejoran, protegen, etc. Como es de esperarse, mientras más grande es el proyecto, las estructuras se vuelven cada vez más específicas en cuanto a procesos y formas, y evidentemente es lo correcto puesto que a mayor número de participantes, los errores pueden ser mayores si no se tienen bien definidas las formas de colaborar y los procesos para hacerlo.

La principal regla al momento de optar por contribuir a un programa FOSS, es USAR dicho programa :D Y puede que suene un poco tonto lo que digo, pero en realidad tiene mucho sentido. ¿Cómo nacen muchos de los features que incluye un programa? Pues por necesidad. Cada funcionalidad existente surge en base a que alguien (una o muchas personas) necesitan de dicha función. Es por esto que si tu deseas compartir y colaborar a una comunidad, un paso indispensable es que uses lo que desarrollan.

¿Es necesario ser un experto programador?

Yo quiero comenzar esta parte haciendo una simple pregunta. ¿Cómo se convierte uno en un experto programador? Aquí algunos me dirán, pues escribiendo código, y a todas esas personas yo les comento que ese no es el enfoque correcto. ¿Por qué?

Leer código te hace mejor programador

Piensen en esto un poco antes de continuar. ¿Qué escritor nació sabiendo escribir? ¿No es acaso primero aprender a leer, para nutrir el cerebro con muchos otros autores y así eventualmente poder empezar a escribir algo con contenido y valor? Sucede exactamente igual con el código, uno debe aprender a leer mucho antes de aprender a escribir.

Tu código probablemente no es tan bueno

Para los que lleven programando por muchos años, perdón si con esto destruyo sus concepciones de lo que han logrado en todo este tiempo, pero es verdad. Para los que hemos tenido la oportunidad de colaborar en proyectos realmente grandes, lo primero que puedes apreciar es que existe muchísima gente que es muchísimo más talentosa que uno. Evidentemente esto antes que ser una desventaja, es un punto por el cual apoyar en un proyecto te convierte en un mejor desarrollador.

Tener cientos, o tal vez miles, de ojos revisando tu código día a día, te hace descubrir en qué aspectos tu lógica no es la mejor de todas. La principal ventaja de esto es que con el pasar del tiempo, tu cerebro va descubriendo nuevas formas de proceder, y los errores “infantiles” que cometías al principio de tu participación, se convierten en un vago recuerdo.

Con esto solo quiero reforzar el hecho de que un proyecto te hace bien, tanto para aprender a leer como para aprender a escribir código, lo que a la larga te convertirá en un experto programador.

Y… ¿si yo no soy programador?

Este es un punto que quiero tocar también porque mucha gente piensa que si no escribe código, no hay nada que se pueda hacer para ayudar. Este es un mito urbano de los más perjudiciales que existen.

Muchos proyectos requiere de más mano de obra en temas que no son de código de la que requieren para producir código. Tal vez en marketing, o en publicidad, o derecho, incluso en planeamiento de eventos, la ayuda siempre es bienvenida. Además de que te permite conocer nueva gente, el participar en estos proyectos te permite conocer nuevas formas de pensar y al mismo tiempo compartir experiencias nuevas.

¿Cómo participo?

Pues si ya estás aquí, espero que al menos un poco de curiosidad te pique por participar en proyectos FOSS ;) . Para comenzar es necesario comprender que cada proyecto y comunidad tiene su proceso propio. Muchos de estos se juntan en distintos puntos, y divergen en otros, pero al fin de cuentas, el primer punto de referencia para participar será la comunidad del programa que usas.

Página web

Cada página web tiene su propia sección de Contribuye. Y si no la tiene, pues esa es la primer cosa en la que puedes ayudar :D aprende el proceso, conversa con la comunidad, y escribe un pequeño texto para que puedas guiar a otros por el proceso ;) Si ya tienen uno, pero no está en español, pues puedes tomarte un fin de semana para traducirlo y así estarás ayudando a tu proyecto y al mismo tiempo a todos los de habla hispana :) Dos pájaros de un tiro ;)

Listas de correo

Mucha de la comunicación de las comunidades se da por listas de correo, es necesario subscribirse y empezar a tomarse un par de minutos al día para leerlos. Tal vez al principio no entiendas, pero te aseguro que con el pasar de los días o semanas, irás comprendiendo lo que sucede. Antes de darte cuenta, ya estarás escribiendo en la lista, y no pasará mucho antes de que la gente te empiece a preguntar opinión o posibles soluciones (si te esfuerzas claro está ;) ).

Github

Este es un punto crucial para toda persona que desee colaborar en un proyecto FOSS, aprender a manjera Github, o Gitlab, o Bitbucket, o cualquier host que albergue el código del repositorio, te permitirá ayudar de manera tangible a la mejora de la comunidad.

IRC/Gitter/Telegram

IRC (Internet Relay Chat) ha estado desde los primeros días del internet. Así es como la gente se comunicaba antes de whatsapp y los smartphones. Y como es de esperarse, muchos proyectos tienen sus canales de IRC a disposición donde se pueden hacer preguntas y conversar sobre temas del proyecto o comunidad, o tener una charla espontánea :) siempre teniendo cuidado porque uno nuca sabe lo que puede encontrar en internet ;)

Mi primer PR

Bueno, aquí no vengo a explicar cómo es que se hace un Pull Request en detalle, eso lo dejaré para otro post si es que les interesa comenzar a participar.

Como programador

Diseño propio. Christopher Díaz Riveros

Como no programador

Diseño propio. Christopher Díaz Riveros

El primero fue un bug de seguridad en el cual incorporé un parche para resolverlo, el segundo es parte del capítulo 7 del libro de Git. Sigo trabajando en ambos proyectos, incluso hace poco terminé de traducir por completo el programa git al español. (Saldrá en la versión 2.15 ;) )

Son aportes pequeños como podrán ver, no más de 100 líneas de código ( de las cuales bastantes solo fueron copiar y pegar lo que ya existía en un nuevo archivo), pero son mi contribución al proyecto :) y son cosas que yo uso a diario.

Como puede apreciar, la sensación es bastante indescriptible :) ver tu nombre en algo que usas, saber que ayudas a mucha gente en el proceso, y  ¡aprender a hacerlo cada día mejor! ¿Puede acaso haber algo mejor que esto? :)

En conclusión:

Me prometí a mi mismo mantener corto este post pero creo que no ha sido tan corto como esperé que sería :P . En fin, espero que con esto les haya picado un poco la curiosidad por empezar a colaborar en proyectos FOSS. Y pronto poder ver sus commits en muchos programas que ustedes usen a diario ;) disculpen que haga tanto énfasis en esto, pero deben comprender que nadie puede mejorar algo que no conoce, y por eso es indispensable poder conocer antes de mejorar :)

Saludos

 

La guía de los 20 pasos para instalar Gentoo

¡Al fin! Lo que todos estabamos esperando. La tan ansiada guía de instalación de Gentoo Linux, hecha por mí, tomando referencias del Handbook de Gentoo. Antes de empezar a contar los pasos y ver si pude cumplir con mi promesa de mantenerlo simple, deseo hacer un par de aclaraciones.

Esta guía es lo más simple posible

No pretendo enseñarles cómo instalar el último driver NVIDIA, o el último filesystem experimental de alguna empresa. Intentaré dejar todo en lo mínimo de lo funcional, ¿por qué? sencillo, así les dejo algo a ustedes para investigar y aprender ;)

Los pasos de instalación

Voy a resumir de forma muy sencilla los bloques en los que voy a trabajar durante esta guía. Pienso instalar Gentoo en un usb para tomar las caputaras de pantalla, pero pueden replicarlo en su disco duro y seguir conmigo el proceso. Los pasos son los siguientes:

  1. Medio de instalación.
  2. Preparar discos.
  3. Stage3
  4. Make.conf
  5. Chroot
  6. Kernel
  7. Grub
  8. Disfrutar :)

Como pueden ver yo difiero un poco del handbook, pero es porque prefiero juntar todo dentro del mismo paquete para poder realizar un trabajo más limpio, pero en caso de necesitar detenerse a revisar otras opciones no duden en ir al Handbook, ahí estará toda la información que puedan necesitar.

Para esta instalación estaré usando SystemD y GNOME ( explicaré los cambios necesarios para KDE dentro del apartado de GNOME), pero para los aventureros de OpenRC, pues tendrán que hacer su tarea ;) escojo SystemD por lo que ha sido adoptado por muchos otros sistemas y tal vez les sea más familiar a la hora de configurar ciertas cosas mientras van cogiendo experiencia con Gentoo. Sin más que agregar, empecemos:

Medio de instalación:

Les dejo aquí el link de mi anterior post sobre este tema, les recomiendo utilizar una distro que ya tenga entorno gráfico, puesto que es más sencillo revisar el Handbook de esta manera, y siempre se puede repetir todo desde cualquier parte con mayor facilidad. Yo lo haré desde mi Gentoo de siempre con la que escribo estos posts.

Preparar los discos:

Este paso siempre es muy personal, y en realidad siempre es un momento para reflexionar y detenerse a ver cómo deseas que termine tu partición. Como hemos dicho que vamos a mentenerlo simple, no vamos a usar LVM ni RAID, sino simple y puro ext4 en nuestras particiones. yo voy a formatear el usb que es el dispositivo /dev/sdb, evidentemente tienes que acomodarlo a tus necesidades.

Como podrán ver estoy usando fdisk porque pretendo usar MBR para mi sistema, otra tarea por resolver para los que deseen usar UEFI ;)

Crearé un swap simbólico y una partición simbólica home solo para que puedan seguir el paso más sencillo. /boot lo voy a dejar en el directorio raíz porque como mencionamos, lo mantendremos simple. (Ya vamos 1 comando)

Terminaré con una estructura parecida a esta:

terminaremos con w para escribir el disco. Dependiendo de las particiones que hayas hecho y los tipos de filesystem que hayas colocado, tendremos que crearlos con mkfs. Algo como esto:

(Este lo contaré como un solo comando porque es repetitivo ;) (Ya vamos 2 pasos).

Ahora vamos a montar nuestro nuevo sistema dentro de el sistema que ya está encendido. Para esto usamos la herramienta mount. (yo creé el directorio /mnt/gentoo, pero eso puede omitirse) (Ya vamos 3 pasos.)

Con esto ya tenemos el sistema preparado para el siguiente paso.

Stage3:

El stage3 es un comprimido que se descarga desde la página oficial de Gentoo, puedes descargarlo en tu navegador o desde consola, por temas de practicidad yo usaré uno que ya tengo descargado y lo ubicaré en la posición donde monté el sistema (/mnt/gentoo). (Ya vamos 4 pasos)

Solo quiero recalcar aquí que estoy descargando un stage3 con systemd ya incluído. Eso me ahorra bastante tiempo de recompilación puesto que ya varios programas vienen prediseñados con systemd y un perfil con systemd. También quité la opción v de tar para que no aparezca la lista gitante de data extraída, pero si la desean ver, pueden agregarla.

Ahora estamos en esta sección del Handbook

Si desean ver cómo queda todo después de descomprimir solo hace falta usar <code>ls</code> en el directorio, y tendrán algo como esto:

Make.conf:

Ya vamos a más de la mitad del camino, ahora solo tenemos que configurar nuestro corazón. Para esto pueden leer la guía de Gentoo, yo solo haré unos cuantos ajustes, les mostraré el antes y el después para que puedan ver cuánto es lo que yo he cambiado.

Antes:

Después:

Como pueden apreciar, no es mucho lo que agregas, lo más complicado de averiguar son los CPU_FLAGS_x86 que se pueden poner después de la instalación completa y cuando portage ya esté funcionando. De todas maneras es bueno dar un ojeada al Handbook y revisar los links que aparecen para poder tener más información. La lista de mirrors la dejo aquí por si acaso. Solo elijan el que más les acomode. De nuevo, como lo estamos manteniendo simple, vamos a tratar de no variar mucho las cosas.

Otro pequeño retoque que tenemos que hacer ni bien comienza la instalación es copiar la dirección de nuestro repositorio, esto lo logramos con el siguiente comando (Ya vamos… 5 pasos, 6 contando el que sigue)

Esto lo que hace es copiar la configuración necesaria para que portage pueda descargar el árbol de programas, que es la colección de ebuilds que permiten instalar cualquier paquete en Gentoo.

Con esto ya tenemos lo mínimo necesario para poder empezar a usar Gentoo en consola :)

Chroot

Justo ahora nos encontramos en esta sección del Handbook, vamos a copiar nuestro DNS actual, y montar una conexión entre el kernel que está corriendo y nuestro ambiente Gentoo en la partición. Esto lo vamos a hacer con los siguientes comandos

Cabe resaltar que algunas distribuciones tienen que montar unos cuantos sistemas extra, pero por lo menos las veces que he probado con esto ha sido suficiente. Si tienen dificultades, el Handbook todo lo puede ;). ( Ya vamos como…12 líneas de comando, pero este sería el paso número 7)

Ahora vamos a entrar a nuestro nuevo Gentoo… A partir de aquí ya estamos corriendo el nuevo sistema operativo por consola :D

El último comando es opcional, nos indica simplemente en la terminal que estamos dentro del chroot  cambiando el nombre para mejor distinción :) (¡Ya vamos 8!)

Lo primero que vamos a hacer en nuestro nuevo Gentoo es actualizar el repositorio, esto lo logramos con el comando emerge-webrsync. Es normal que aparezcan algunas alertas, es simplemente que se están creando los archivos o direcotorios que antes no existían.

Ahora vamos a configurar unos cuantos detalles antes de actualizar el sistema ( les explico por qué lo hago así en un momento). Primero nuestro perfil, si ya han visto mi post sobre make.conf, habrán podido notar el pequeño extra que dejé sobre los perfiles, ahora es momento de empezar a construir nuestro escritorio preferido, primero revisaremos qué perfil tenemos activo con eselect:

Como podemos ver, contamos con un pefril con amd64 y systemd por defecto (esto se debe a la opción que escogimos de stage3 en la página oficial de descargas). Para seleccionar un perfil podemos usar el número o el nombre, yo pondré gnome con systemd pero si desean kde necesitan escoger plasma. (Si desean otro, pueden dejarlo con el perfil de systemd. (Este es el paso 10 ;) )

El asterisco (*) indica el perfil seleccionado.

Ahora vamos a descargar unos cuantos programas que nos van a servir para terminar nuestra instalación de manera exitosa. Los escribo todos en el mismo comando para ahorrar números ya que me acerco a los 20 :P pero no se preocupen, los explicaré todos:

Bueno, esta es la lista de programas que estoy instalando (la lista en pantalla es más grande por sus dependencias):

  • gentoo-sources: Nuestro conjunto de código fuente para instalar el kernel en el paso siguiente.
  • linux-firmware: Muchos drivers necesarios para diversas computadoras (mi driver de wifi se encuentra en esta lista por ejemplo)
  • genkernel-next: Herramienta especialmente diseñada para facilitar el proceso de compilación de kernel y creación de initramfs (complejidades que escapan a este post, pero que son necesarias para correr systemd)
  • gentoolkit: Conjunto de herramientas de Gentoo que permiten un mejor manejo del sistema.
  • grub: Gestor de arranque, muy importante para poder comenzar a usar nuestro sistema.
  • vim: Simplemente me gusta más que nano (que es el que viene por defento :P ).

Dependiendo de la conexión a internet y la capacidad del procesador, esto puede tardar un buen tiempo. Tomen este tiempo como referencia para los siguientes pasos. ( Ya vamos 11 :O , falta poco ;) )

Ahora vamos a realizar unas configuraciones menores dentro del sistema:

Rápidamente comentando estas líneas por orden:

  • Generamos nuestra zona horaria. Normalmente viene en la forma zoneinfo/<Región>/<Ciudad>. Si necesitan ver su ciudad y región pueden dar un ls al directorio.
  • Generar nuestras locales. Gentoo viene por defecto con muy pocas locales, siempre es recomendable usar UTF-8 y nosotros lo que hacemos es agregar la de nuestro país a la lista y generar todas las de la lista. En mi caso solo he puesto una para que vean cómo se hace.
  • Poner nuestro nombre de host, cualquier nombre basta en este punto ;)

Para los más exigentes… ya vamos por el paso 12 :) ya falta muy poco.

Ahora generaremos el archivo fstab, para los que desconocen su uso, pues a leer en internet ;) pero para darles una idea general, es un archivo que se lee al momento de iniciar el sistema que permite montar todas las particiones en puntos estratégicos del sistema. Por ahora lo vamos a dejar con los valores de nuestras particiones.

Como podemos apreciar estoy poniendo los discos en que he colocado Gentoo. Probablemente ustedes usarán otros nombres (sda) y la cantidad de opciones y tipos que deseen. (Paso 13)

Ahora pondremos la clave de nuestro usuario root.

Si deseamos, este es un bueno momento para crear nuestro usuario o lo podemos hacer depués, pero recuerden montar su directorio home con la partición correspondiente. (Estos pasos pueden contarse como el número 14)

Esta vez estoy poniendo una clave de prueba, pero no se olviden de asegurar bastante bien a su usuario root y a los demás también. ;)

Ahora que ya hemos terminado con todos los pasos previos, el momento de la verdad…

Kernel

Nuestro kernel será un momento de reflexión y lectura, recomiendo bastante dar un vistazo a la documentación de Gentoo referente al tema, en especial tomaré un par de capturas a unas cuantas partes importantes, vamos adelante:

Con esto podremos empezar el proceso de configuración, que para systemd requiere de unos cuantos detalles particulares que mostraré a continuación.

Recuerden que la ruta aparece en la parte de arriba (la segunda línea celeste). Es necesario tener ambos init system como obligatorios <Y> para que se vea como [*].

Algunos módulos necesarios para poder trabajar con Wifi. Porque hoy en día todos usamos wifi :) cfg80211, mac80211.

Como podrán observar, mi tarjeta de red wifi es intel :) todo lo demás simplemente no me sirve, al menos no en mi laptop actual. Cada quién tendrá que usar lo que más le convenga. Recuerda que <code>lspci</code> y <code>lsusb</code> son tus amigos ;)

Una vez terminada la configuración guardamos el archivo con el nombre por defecto y salimos del menú. Ahora empezará a compilar nuestro kernel, sus módulos y se generará un initramfs para lanzar con systemd después.

Una vez terminado, y si por algún motivo les aparece una advertencia al finalizar la compilación, recuerden que pueden volver a repetir el proceso. La configuración se almacena por lo que probablemente solo tengan que buscar las opciones que aparezcan con MAYÚSCULA mediante “/” y cambiar los valores por los recomendables. (Este es nuestro paso 15)

Una vez instalado nuestro nuevo kernel, es hora de decirle a grub que se prepare para correr el sistema. Como pueden ver en la imagen anterior hay un pequeño párrafo de WARNING, nos está informando que nuestro sistema tiene un filesystem distinto de ext2. Esto, y un detalle más, lo vamos a configurar en nuestro grub antes de instalarlo. En el archivo /etc/default/grub hacemos las siguientes modificaciones:

Con esto estamos diciendo a grub que al momento de iniciar el sistema se prepare para usar ext4 en nuestro root ( ) y que el sistema comience con systemd en lugar de OpenRC. Ahora podemos instalar grub en el disco :) ( pasos 16 y 17 hasta ahora ;) )

Ahora vamos a actualizar el sistema por completo. Esta opción puede tardar cierto tiempo dependiendo del perfil seleccionado y la cantidad de paquetes que necesiten ser recompilados. Como los stage3  son generados cada cierto tiempo, es posible que unos cuantos paquetes necesiten actualizarse en comparación con el resto del equipo ( que debería estar lo más actualizado posible) Para que puedan comprender los comandos que usé tendrán que leer man emerge ;) ¿Pensaron que les dejaría todo totalmente masticado para copiar y pegar? :)

Listo, ya casi estamos en la meta :) ahora solo nos falta nuestro entorno de escritorio, en este caso pueden usar gnome conmigo, o elegir plasma, o el que mejor se les acomode :) Este proceso si va a ser bastante largo, por lo que les recomiendo dejar corriendo la máquina por la noche, así cuando despierten ya podrán empezar a usar su sistema ;) (Paso…18 el anterior y ahora el 19)

Ahora viene el proceso que no voy a poder controlar al 100% y en el que es más que probable que les aparezcan errores. Debido a que el conjunto de paquetes es bastante grande, es posible que existan conflictos con los USE flags, así que les voy a enseñar a resolverlos ;)

Con este comando emerge -av <paquete> estamos pidiendo a portage que calcule todas las dependencias, y probablemente al final obtendremos algo parecido a esto.

Presionamos No. Para hacerse una idea de lo que acaba de suceder. Nosotros tenemos un stage3 que vino compilado con distintos USE flags, ¿recuerdan?. Ahora que hemos cambiado el perfil, hemos cambiado también los USE flags que venían por defecto. y ahora portage nos está diciendo que existen USE flags que necesita tener para poder compilar la lista de programas que le hemos pedido (en mi caso gnome).

Para resolver estos problemas vamos a crear un archivo con el nombre del programa (para poder encontrarlo después más fácil) dentro de la carpeta /etc/portage/package.use. (Si la carpeta no existe, pueden crearla con el nombre exacto)

Como en mi lista tengo dos, voy a hacerlo de la siguiente manera:

Con esto tenemos todo listo para volver a intentar :) pero antes de eso, solo quiero aclarar que yo pongo el nombre genérico del programa al principio, después los USE flags personalizados, pueden ser 1 o más, el (-) de adelante dice que lo desactive y cualquier línea que comience con # es ignoada por portage. Sencillo ¿no? :) Esta es la magia de la personalización de Gentoo. Pero el trabajo con portage lo voy a dejar para otro post porque este ya está bastante largo :) (Paso 20, troubleshooting :) )

Volvamos a probar el comando de instalación:

Como es evidente, no hemos acabo bien el paso 20 :P pero ahora estamos frente a 2 errores nuevos que me parecen una estupenda oportunidad para seguir explicando un poco de portage ;)

Los KEYWORD son las etiquetas que tiene un programa que indican qué arquitectura y bajo qué nivel es soportada. En este caso “~amd64″ es la rama “no estable” de amd64. OpenSSL es un programa que siempre viene con una que otra actualización (es muy importante tenerlo actualizado y libre de problemas) así que lo mejor será usar la versión “no estable”. Por defecto los perfiles de laptop soportan “amd64″ o “x86“. Para cambiar esto, es necesario agregar la variable ACCEPT_KEYWORDS=”~amd64″/”~x86″ dentro de make.conf (como dije que voy a mantener simple el post, no lo toco más que esto).

Ahora a lo nuestro, al igual que en el paso anterior, es necesario crear la carpeta package.accept_keywords en /etc/portage y agregar el mismo formato pero con la variable KEYWORD que vamos a usar.

Ya son todos unos expertos en portage ;) ahora vamos a resolver el último problema que hemos visto… cambios de mask. Si son un poco observadores podrán ver lo que les muestro en la imagen y notar que es bastante sencillo.

cabe resaltar que en este archivo, es necesario escribir explícitamente la versión que vamos a usar. En los anteriores es opcional o se puede comenzar con “>=tipo/paquete-versión <variable>” para decir a portage que a partir de esa versión se apliquen los cambios. Volvamos a probar nuestro comando de insalación :)

Nunca me salen tantos errores al momento de instalar pero es estupendo para poder cubrir todo tipo de acontecimiento que les pueda surgir , jajaja :) miremos lo que me apareció:

Aquí portage me está diciendo que tengo múltiples versiones del mismo programa y están en conflicto, ¿recuerdan gentoolkit? Lo instalamos junto con el resto de nuestros programas hace poco. Vamos a usar uno de sus comandos   eshowkw para ver un poco mejor lo que tenemos ahora.

Como podemos ver, ya tenemos una verisón de openssl instalada, el SLOT 0, y nosotros queremos instalar la que tiene la [M] que es es SLOT 0/1.1… el / indica que o es una, o la otra, pero no las dos juntas.

Como vamos a actualizar todos los programas, primero eliminemos el SLOT 0 para poder actualizar de manera sencilla.

como podemos ver, van a quedar un par de librerías en el sistema porque solo hemos borrado el ejecutable, para eliminar las librerías también debemos usar otro comando, pero por ahora lo vamos a dejar como está ;)

Volvamos a probar nuestro gnome :)

¡Todo listo! Y sin querer también cubrimos un grupo de posibles problemas que podrían enfrentar al momento de instalar :)

Ahora lo dejaremos instalando toda la noche, es bastante como podrán ver, casi 1 Gb de descargas :)

Grub

La instalación de grub es bastante directa grub-install /dev/<dispositivo>

Solo cabe mencionar que deben tener claro que es el dispositivo completo y no una partición. Ponerlo en una partición puede hacer que después no funcione nada. Como en otros lugares, se puede descargar os-prober para poder buscar sistemas operativos en otros discos. El comando que muestro tiene unos cuantos defectos por lo que lo estoy corriendo en un USB y debería ser en un disco duro, pero no deberían salir errores con ustedes.

Ahora, ¿recuerdan el paso configuración de grub de hace poco? pues ahora nos viene a ayudar. Tenemos que crear la configuración de nuestro grub para que arranque con systemd y use ext4 como partición para la raíz.

Listo :) ahora ya tenemos grub configurado y listo para arrancar a la siguiente vez que encendamos el equipo. (Terminamos le paso 21)

El último es simplemente puro detalle :) vamos a activar nuestro servicio para poder entrar en el modo visual a la siguiente. También el servicio de NetworkManager para tener nuestro internet ;)

Disfrutar :)

Bueno, hemos llegado al final y creo que solo me pasé por un paso :P , si no tienes hardware de drivers complicados, si has seguido esto de la mano al Handbook, si has podido resolver tus problemas en el camino… ¡FELICIDADES! Eres de los privilegiados que han experimentado la instalación de Gentoo en su máxima expresión :)

Ahora ya es demasiado lo que he escrito, y seguramente empezarán a surgir detalles que tendré que poner en futuras ediciones del tutorial, pero espero que les ayude a comenzar este proceso de instalación :) Conmigo será hasta la siguiente y con otro post que ayude a disfrutar más de Gentoo y su personalización. Evidentemente también empezaré a escribir otros temas que me apasionan :) Git y el Kernel son proyectos en los que colaboro (hay otros más también) o deseo hacerlo, y si gustan les puedo contar un poco del proceso :)

Saludos,

Gentoo: Porque nada es perfecto

Bueno, ya he conversado de mil y un beneficios de Gentoo Linux, y así como yo soy quien les ha contado lo bueno, pues también seré yo el primero en contarles lo no tan bueno, porque prefiero que lo escuchen de mí a que vengan las críticas de otro lugar y no sepan qué responder :) Sin más que agregar, empecemos:

¿Gentoo es mejor?

No, esta es una respuesta muy sencilla :) ninguna distribución es mejor ni peor que otra, cada una tiene su estilo, su filosofía, y su forma de proceder. Evidentemente habrán filosofías que acomoden mejor a distintos tipos de usuarios, pero no por eso podemos calificar de mejor o peor a una u otra distribución. Esto debe quedar claro desde el principio, yo he expuesto algunos de los beneficios que yo considero importantes, y que me han llevado a mantenerme en Gentoo sin necesidad ni deseo de saltar a otra distribución.

lista de distribuciones Linux
Distribuciones Linux

¿La comunidad es poco amigable?

Tampoco, y esta es una triste concepción que se ha esparcido por todo el mundo. Gentoo, y su comunidad, está formado por personas muy talentosas, y al mismo tiempo personas muy ocupadas, gente que colabora desarrollando para Nvidia, Google, Symantec, y mil lugares más, colaboran en Gentoo. Evidentemente todos tenemos cosas que hacer y si en algún momento buscas ayuda y sientes que no te escuchan, pues debes comprender que todos estamos ocupados trabajando, pero eso no debe desanimarte, al contrario. Si tu tienes un problema, es probable que alguien más lo haya tenido antes que tu (a menos , claro, que tu estés desarrollando una tecnología tan de punta que nadie más en el planeta la conozca ni domine a perfección todavía) y si alguien ya lo tuvo, es 80% seguro que alguien más ya lo resolvió. Sigue intentando en la documentación, en los foros, en Google, mil y un lugares donde encontrar información de calidad que pueden ayudarte. Al final del día, habrás aprendido mucho más por tu investigación que lo que podrías retener por la solución que alguien más te dio por el IRC.

Mentalidad de compilador:

Hace poco mandé mi primer correo a la lista de correos de Gentoo, como en proyectos grandes como el Kernel o Git, Gentoo también mantiene listas de correos para llevar un archivo público de lo que se desarrolla y lo que se decide en la comunidad. Yo propuse algo que consideraba bueno para la comunida, así que mandé un RFC (Request for Comments) con mi idea. Al poco tiempo empezaron a llegar los peros, y las alertas, como si fuera un compilador de C. Y mi idea resultó no ser tan buena como yo pensé. Seguramente los developers más experimentados tenían sus fundamentos para decirlo.

¿Eso me va a detener de volver a manda otro RFC? En absoluto, lo que todo el mundo debe entender es que cuando se trabajan en comunidades tecnológicas, lo más común es solo advertir sobre posibles errores (como los compiladores) porque cuando algo está bien, no hay necesidad de decir más (como los programas de Linux).

Así que si en algún momento mandan una idea para mejorar la comunidad y esta no es del todo bien recibida, ánimo, la idea puede tener que mejorar, pero las objeciones no son contra la persona, solo contra la idea. Eso al final del día te enseña a pensar mejor y saber argumentar tus ideas, porque si puedes hacer frente a un pero, entonces ya has ganado media batalla.

¿Gentoo es difícil?

Bueno, de verdad espero que con los otros post hayan podido ver que no es ciencia termonuclear (para los que sepan de eso cambien la anterior materia por algo más difícil incluso :P ). Al final de cuentas será tan difícil como tu lo hagas, si decides probar una configuración hiper experimental, probablemente tendrás muchos más problemas que el resto, pero al final del día podrás decir que dominas mucho más un tema :)

El mayor problema de todos

Este si es el problema que he visto en todo el tiempo que llevo en Gentoo… la falta de usuarios, parece ser que en estos días, nadie (o al menos muy poca gente) desea conocer realmente lo que Linux tiene para ofrecer, lo rápido es más fácil (esto es una mentira) y muchas veces optamos por dejar de pensar para simplemente usar (eso me recuerda mucho a otros sistemas operativos que no voy a mencionar aquí :P ). Es por eso que si ven que el model Rolling Release no está a su 100%, o que algún que otro paquete no se encuentra en el árbol de Portage, pues en lugar de perder la fé, ¡puedes ayudar a crecer!

Gentoo tiene muchas formas en las que puedes ayudar a la comunidad, aunque un requisito indispensable es poder hablar/escribir/leer inglés (dado que es una comunidad internacional, el inglés es un lenguaje que une a todos (o a la mayoría al menos)) dentro de nuestros canales de IRC (no estoy seguro si hay un post sobre IRC, pero sino después haré uno ;) )

Dejaré las formas de contribución para otro post, porque son muchas :) y no necesariamente necesitas ser un experto programador de python, o bash, para poder ayudar :) se los dice alguien que no domina ninguno de estos lenguajes a la perfección, pero siempre está dispuesto a aprender sobre algo nuevo :)

En resumen:

Bueno, me sentía obligado a comentar esto antes de lanzarlos al mundo de Gentoo por completo, siempre he creído que para tomar decisiones ( y Gentoo se trata de decidir muchas cosas) es necesario conocer las dos caras de la moneda. Espero que tras este breve post puedan tener un marco un poco más amplio de lo que es la comunidad hoy por hoy, y cómo integrarse a nuestra filosofía. Espero pronto tener el tutorial de instalación y conmigo será hasta otro post.

Saludos,

Gentoo: ¿Por qué no necesitas el ISO de Gentoo para instalarlo?

Bueno, ya nos estamos acercando, prefiero escribir rápido estos pequeños posts para que no se molesten conmigo por no estar escribiendo la guía en estos instantes :p , pero deben comprender que hay tanto por explicar en Gentoo que dejarles el script no me serviría de mucho si después no pueden controlar todo ese poder.

Imágenes ISO:

Todos conocemos las imágenes ISO (bueno todos los que nos hemos enfrentado a una instalación Linux al menos). Esos pequeños ( o ya no tan pequeños como el caso de Ubuntu) comprimidos que almacenan todo el sistema base y lo replican en otra máquina.

El ISO de Gentoo:

El ISO de Gentoo es bastante reducido (270 Mb en modo consola, 2 Gb en modo Live). Pero si se detienen a revisar la página oficial de descargas lo primero que notarán es que tanto el minimal como el live, son actualizados con poca regularidad. Al menos comparado con el stage3 (del cual hablaremos más adelante).

ISO de Gentoo

¿Es necesario?

Para ser 100% sincero con ustedes, no, no es necesario descargar el ISO de Gentoo para instalarlo. Es más, dirán los que ya lo han probado, muchas veces el ISO viene con bastantes limitaciones (por ejemplo el soporte para UEFI, el minimal ISO no cuenta con soporte UEFI). Además, solo es una consola ( se los dice alguien que hace 95% de sus actividades por consola) y hay mejores maneras (al menos más sencillas) de hacer una instalación completa de Gentoo.

Lo que yo hago:

Bueno, este es mi secreto, particiones… ¿Particiones? seguro se estarán preguntando justo ahora. Sí, particiones. Desde mis días en Arch siempre agarré cariño a MBR, con este label hice mi primer instalación de Arch y dado que nunca he necesitado una cantidad descomunal de particiones o he hecho un dual boot con Windows, no he tenido la necesidad de generar mi sistema sobre UEFI.

Lo que tengo justo ahora en mi computadora es un conjunto de 5 particiones, como me da flojera escribir todas, aquí les mando una foto de mi disco.

Diseño propio. Christopher Díaz Riveros

(por cierto, siempre me ha gustado mostrar lo que yo uso, prefiero no hablar solamente de la teoría, sino mostrar lo que para mí funciona, esto puede que no acomode a todos pero si en algo puedo ayudar con esos casos particulares, me avisan)

Como pueden ver, tengo 6 particiones dentro de mi disco duro, usando MBR puedo tener 3 primarias, y gracias a la extendida puedo agregar un poco de SWAP a mi máquina. Además de haber separado mi directorio /home para que en caso de emergencia, mi información no se pierda junto con el sistema. Esto es bastante útil cuando de la nada deja de funcionar tu computadora, puedes simplemente instalar desde cero y montar tu home al final, pan comido :)

Como podrán ver, como todo buen fanático de la seguridad, también tengo mi Kali Linux instalado, y un siempre útil Arch linux. Ahora les comento cómo es que uso estos.

Arch como medio de rescate:

Como pueden inferir por el título, mi Arch es el usb de rescate en caso de emergencia, siempre que sucede algo con Gentoo que no puedo reparar desde el mismo Gentoo, entro a Arch, monto el disco duro de Gentoo y empiezo a arreglar cosas. Además, me gusta mucho un juego llamado Bombsquad que está disponible en AUR ;) siempre que puedo lo juego con mi familia o mi enamorada y mis amigos. Por cierto, solo para dejarlo claro, el Arch también cuenta con GNOME si es que se preguntan si lo he dejado en consola :P

Como Gentoo no necesita de ningún medio de instalación propio, ustedes pueden elegir instalarlo desde cualquier lugar, Arch, Ubuntu, CentOs, etc etc… genial, ¿no es cierto? :)

La magia está en el stage3

El stage3 es un comprimido que contiene todo el árbol de Linux necesario para instalar un sistema. Es gracias a este comprimido que podemos instalar directamente desdse otro sistema operativo. La única condición para usarlo de manera adecuada es que el punto de montaje esté vacío al momento de instalar y recordar que ese será nuestra raíz para el siguiente sistema Gentoo que vamos a construir. Para que se hagan una pequeña idea de lo que consume mi máquina en su sistema aquí les dejo la cantidad de disco usado:

Diseño propio. Christopher Díaz Riveros

Como pueden ver, con 50 Gb es más que suficiente, en realidad es algo exagerado diría yo, y de estos 50 yo uso 8 Gb, incluyendo programas pesados como Virtualbox, Google-chrome (evidentemente tenía que estar disponible en la distribución que ayudó a nacer a las Chromebooks ;) ) y bueno, mi suite de GNOME y uno que otro programa más, pero no nos desviemos del tema…

Una vez descomprimido el stage3, todo lo que hace falta es empezar a hacer los retoques, pero esto lo vamos a dejar para la guía oficial :P

En resumen:

Bueno, ya les conté un poco más sobre cómo se instala Gentoo, su versatilidad le permite poder ser instalado desde distintas distros (algo que creo que muy pocas pueden decir) y al mismo tiempo permite generar un espacio reducido de trabajo. Justo ahora estoy pensando en escribir un último post antes de comenzar la guía. Al buen ritmo que llevo estos días, espero que la guía esté disponible muy pronto :) solo estoy asegurando que no queden cabos sueltos antes de comenzar. Saludos,

PS: Para ver otros posts, mejor pongan en buscar más del autor porque sino se me van a llenar de links :P

Gentoo-sources: Cómo armar tu kernel sin morir en el intento

Bueno, este es uno más de esos puntos que no puedo pasar por alto antes de comenzar la guía de instalación de Gentoo :) sé que ya muchos estarán esperando con ansias este post, y perdón por hacerlos esperar, pero también considero que no explicar esto atenta contra mi status de usuario Gentoo :P Sin más que mencionar, comencemos.

¿Qué es el kernel?

El kernel es propiamente la parte Linux de toda distribución, es el programa que nos permite comunicar cada pieza de hardware de nuestro equipo con los programas que corremos en él. Su creador, Linus Torvalds, decidió liberarlo bajo la licencia GPL y gracias a él, y al proyecto GNU, podemos disfrutar hoy en día de tantas distribuciones y variedades para elegir. Está escrito en C en su mayoría, con un poco de Assembly por aquí y por allá, y hoy por hoy es el proyecto más grande de software libre, con miles de desarrolladores trabajando en él, tanto por hobby como profesionalmente, y mantiene una línea constante de crecimiento acelerado desde hace ya varios años. Aquí les dejo la página oficial del kernel para que puedan dar un vistazo en profundidad.

¿Cómo se encuentra en Gentoo?

Bueno, como es de esperarse en Gentoo, existen muchas opciones de kernel, les dejo aquí una pequeña lista para que vean mejor a lo que me refiero:

  • gentoo-sources: Kernel 4.12 con parches especiales para Gentoo Linux.
  • git-sources: Kernel directamente descargado desde el repositorio Git de Linus.
  • vanilla-sources: Kernel completo sin ningún tipo de parche.
  • xbox-sources: Kernel completo para Xbox Linux.
  • zen-sources: El kernel vivo de Zen

Para una lista completa les dejo el link del wiki donde pueden encontrar todos los kernel que mantiene Gentoo en sus repositorios.(todo lo que termina con -sources)

Tengo el código, ¿ahora qué?

Bueno, a diferencia de todos los demás paquetes de Linux, el kernel NO se actualiza, se instala. Esto nos permite tener múltiples kernel en nuestro sistema al mismo tiempo, claro que siempre se podrá correr solamente uno a la vez. Para poder compilarlo es necesario usar las herramientas que ya hemos discutido en un post anterior. Pero como en Gentoo la comunidad hace el 80% de tu trabajo, vamos a hacer la forma más sencilla ;)

genkernel-next:

Permítanme presentarles una herramienta que es simplemente estupenda :) se llama genkernel-next, la pueden encontrar en los repositorios de Gentoo.

Diseño propio. Christopher Díaz Riveros

La lista de opciones es aún más grande, pero aquí se pueden ver algunas de mis opciones favoritas. Uno de los pasos más importantes al momento de instalar Gentoo es la configuración de tu kernel, esto te permitirá sacar el máximo potencial a tu computadora y al mismo tiempo evitar todo aquel peso extra que tienen muchos kernel pre-compilados.

CLI y GUI:

Como es de esperarse, la configuración del kernel también tiene varias formas de realizarse :) elecciones por todos lados, simplemente impresionante. Aquí les dejo algunas de las fotos de cómo se ven las opciones:

genkernel –xconfig all

Diseño propio. Christopher Díaz Riveros

genkernel –qconfig all

Diseño propio. Christopher Díaz Riveros

genkernel –nconfig all

Diseño propio. Christopher Díaz Riveros

genkernel –menuconfig all (mi favorito)

Diseño propio. Christopher Díaz Riveros

Estupendo, pero ¿cómo encuentro las cosas?

Una sabia pregunta que todos seguro se están haciendo ahora mismo. Si no deseas tener que buscar línea por línea, recuerda que “/” y “?” son tus amigos en esta misión. Pero como es mejor ver que leer, les muestro a lo que me refiero con esto.

Supongamos que necesitamos revisar nuestro procesador, el kernel soporta tanto intel como amd, y el nuestro es intel. Si presionames / (slash), nos llevará al siguiente menú:

Diseño propio. Christopher Díaz Riveros

Genial, ahora veamos la magia en acción :)

Diseño propio. Christopher Díaz Riveros

¡Estupendo! Ahora tenemos una lista desplegable con toda la información que podemos necesitar, el nombre técnico del módulo, la ruta, el tipo de valor, etc. Y ahora la pregunta… ¿cómo llego a la ubicación? ¡También muy sencillo! si nos fijamos en la parte izquierda, tenemos números dentro de paréntesis. Presiona uno de ellos y verás la magia ocurrir nuevamente.

Diseño propio. Christopher Díaz Riveros

¡Tan rápido como esto! Ya estamos en la ubicación que necesitamos. Pero… espera, yo te dije que es tu amigo, ¿lo recuerdas? Pues veamos qué sucede si apretamos ? justo ahora.

Diseño propio. Christopher Díaz Riveros

Una pequeña descripción del módulo, sus opciones y dependencias :) todo al alcance de tu mano. Una vez terminada tu búsqueda, puedes dar a exit. Podrás notar que la barra superior ha retrocedido a la línea Search (intel), si vuelves a dar exit, te regresará al menú principal donde podrás comenzar una nueva búsqueda.

¿Qué mover y qué no?

En este punto ya debes sentirte totalmente poderoso, porque has conseguido algo que pocos humanos hacen en su vida, compilar un kernel. ¡Felicitaciones! Pero ahora surge la pregunta… ¿qué debo modificar? Eso mi amigo, es algo que solo tú puedes descubrir, pero por supuesto que yo te puedo dar un par de recomendaciones que a mí me ayudan mucho:

El default funciona

Como en todo programa, Linux está configurado para funcionar con las configuraciones por defecto. Esto te garantiza que incluso si no deseas configurar nada, al momento de compilar vas a tener un kernel funcional.

Si no lo conoces, no lo muevas

Esto es algo que tal vez los más aventureros pasarán por alto. Es genial poder navegar de manera rápida por las opciones, pero si te interesa conocer realmente cómo piensa tu máquina, una lectura de cada opción es una forma estupenda de hacerte a la idea. Siempre recordando lo que cambias y buscando o comparando con un navegador es bastante recomendable también.

El mayor peso está en los drivers

Muchos drivers vienen cargados por defecto, esto hace al kernel pesado. Por ejemplo, solo para tarjetas de red, existen como 10 drivers oficiales en el kernel, y muchas distribuciones compilan los 10, o más, pero en realidad tu en tu computadora solo usarás uno (ojo que para wifi hay otra sección aparte). Si deseas disminuir el peso de tu kernel de forma considerable, tu primer opción está ahí. Para esto, tus mejores amigos serán lspci, lsusb, Google. Con esto podrás tener una idea bastante clara de lo que tiene tu sistema y solo dejar los drivers necesarios para hacerlo funcionar. Por ejemplo les dejo mi output de lspci:

Diseño propio. Christopher Díaz Riveros

Con esto puedo tener bastante claro información crítica, como mi controlador de red, el de wifi, mi disco duro SATA, y muchas cosas más que me ayudan a disminuir el peso de mi kernel.

Revisa bien que estés compilando lo que es necesario con *

Gracias nuevamente a nuestro compañero njord, un punto importante que olvidé mencionar por la emoción :)

Además hay que mencionar que hay características del kernel que conviene incluir dentro del mismo(*), y otras manejarlas como módulos (M). Recuerdo mi primer kernel compilado, queriendo dejar como módulo el soporte para reiserfs de mi root, cuándo en la vida iba a funcionar?!?! xD…

Ciertamente, si tu kernel necesita de algo para funcionar, no puede ser un módulo. Por defecto, los módulos cargan después de que el kernel ha hecho todo el proceso de inicio. Si tu kernel necesita algo para iniciar, mejor que esté compilado dentro <Y> en lugar de como módulo <M>… Lo que nos lleva al primer punto otra vez “?”  es nuestro amigo ;)

En resumen:

Bueno, ahora que se han sumergido un poco en el mundo del kernel, creo que ya he cumplido con otro hito necesario para poder generar una guía de instalación de Gentoo de ~20 pasos :) pero si encuentro algo más por ahí, intentaré explicar antes que solo dejar suelto en el aire.

Saludos,

Gentoo: El corazón de la bestia

 

Wow, veo una gran acogida a mis pequeños aportes y me motiva mucho más a poder seguir compartiendo con esta bella comunidad. Ya sé que he prometido una guía de menos de 20 pasos, pero tendrán que comer ansias un poco todavía… Es que sencillamente no puedo empezar un tutorial de Gentoo sin detenerme a hablar de su corazón y la esencia misma de todo su poder Portage, su gestor de paquetes. Además, como fiel usuario de Gentoo creo yo que es mejor entender antes que repetir, y con esto solo quiero decir que antes de empezar una guía sencilla como copiar un script (repetir), es mejor saber lo que hacemos para poder después escribir el script. Como el conocido refrán:

“Dale a un hombre un pez y le habrás calmado el hambre por un día, enséñale a pescar y lo habrás salvado de por vida”.

Sin más que agregar, comencemos:

¿Qué es portage?

Portage, es el gestor de paquetes de Gentoo Linux. Sus equivalentes en otras distribuciones son apt (Debian y derivados) , yum (Red Hat, SUSE y derivados) , pacman (Arch y derivados)… Está inspirado en Ports de FreeBSD, eso debido a que el fundador de Gentoo utilizó una temporada FreeBSD y de ahí la inspiración y parecido en muchas de las maneras. Estuvo escrito en bash al principio y emerge (el nombre del programa que se encarga de instalaciones en línea de comando) a lo largo de su historia ha tenido una amplia base de bash y más actualmente Python para poder realizar sus funciones.

¿Por qué es importante saber esto?

Bueno, como todo usuario Linux, el gestor de paquetes es tu herramienta principal para poder mantener tu sistema funcional y operativo, te permite instalar, actualizar, eliminar, y muchas otras cosas más. Portage se subdivide en diversos comandos que se especializan en realizar una cosa, y hacerla bien (una conocida forma de trabajar en UNIX).

El corazón de Portage:

A diferencia de otros gestores de paquetes (al menos los que ya he mencionado antes), Portage basa todo su poder en un archivo de configuración. Este archivo se encuentra dentro de la ruta /etc/portage/make.conf . Por el momento es muy difícil explicar el intrincado sistema que existe en Gentoo que permite entregar todo el poder de la distribución a este archivo sin romper nada en otro lado, pero sigamos que eso lo dejaré para otro post ;)

Un vistazo al corazón:

Diseño propio. Christopher Díaz Riveros

Como podrán ver, no es algo fuera de este mundo, en realidad, tengo otros archivos que son mucho más específicos, pero lo que está aquí es más que suficiente para poder tener tu Gentoo operativo y funcional. Comencemos a revisar las líneas que siguen:

CFLAGS/CXXFLAGS:

El primer paso por nuestra aventura en el corazón de Gentoo son los C Flags. Estos flags permiten compilar programas en C (los más básicos que necesita un sistema para funcionar) con distintos tipos de ventajas. Como pueden apreciar en mi configuración, -march=broadweel me permite usar la generación de mi procesador al momento de compilar mis programas. -O2 y -pipe vienen por defecto, y si me detengo a explicar cada una me va a tomar tal vez un libro completo.

Sin embargo, aquí les dejo unos cuantos tipos de -march explicados en la wiki de Gentoo.

https://wiki.gentoo.org/wiki/Safe_CFLAGS

CHOST:

El CHOST se encarga de mostrar la ubicacióny tipo por defecto del compilador, esta variable es utilizada en equipos que cuenten con distintos tipos de compiladores, como los fanáticos de Arduino. Para una configuración básica no es necesario entrar en detalles.

Nota del autor: Gracias por tu aporte njord, y por compartir tus conocimientos con el resto de la comunidad :)

Esta variable del sistema no indica como tal la ubicación del compilador, más bien le indica al compilador la arquitectura del procesador, y opcionalmente la plataforma de hardware, sistema operativo y libreria de C para los cuales se van compilar los paquetes y aunque esta variable se define de manera global dentro de make.conf (como todo lo demás que aparecé ahí) nada impide que se puedan compilar paquetes para otras arquitecturas.

USE:

El corazón de los programas, los USE flags de make.conf son universales. Con esto me refiero a que cualquier programa que cuente con un USE de X, al momento de ser compilado, contará con el X activado. Esta opción es bastante útil para aquellos USE flags que vas a utilizar en muchos (si no son todos) de tus programas. Como pueden ver, gnome systemd hacen que mi sistema compile soporte para estos tipos de programas en cualquier software que lo tenga como posibilidad.

MAKEOPTS:

Esta es una de las mejores ventajas de los procesadores rápidos. MAKEOPTS como su nombre lo implica, son opciones que se agregan a la sentencia make que se corre al compilar cada programa. en este caso el -j9 me permite compilar 9 programas al mismo tiempo, 1 por cada hilo en mi núcleo del i7. Un número más conservador es -j5, pero incluso aquí, el tiempo de compilación se reduce bastante para cada instalación.

CPU_FLAGS_X86:

Oh oh… ahora deben estar pensando… ¿qué son esos números? y ¿de dónde o cómo sé yo qué poner aquí? La respuesta es la pura esencia de Gentoo :) aprovecha a la comunidad ;) quienes ya crearon un programa que te da el resultado. Para mostrar esto solo hace falta instalar el siguiente programa y ejecutarlo:

Diseño propio. Christopher Díaz Riveros

Como pueden ver, me muestra los FLAGS que mi procesador posee y los puedo copiar a mi archivo make.conf mediante redirects o escribiendo con nano, vim, o cualquier otro editor de texto :)  (Ya irán viendo cuán automatizado está todo en Gentoo ;) )

PORTDIR:

Simplemente el directorio donde comienza la raíz de los ebuilds. Estos son los scripts de Bash que permiten a portage instalar programas, pero eso lo dejaremos para otro post ;)

DISTDIR:

Como Gentoo instala todo desde su fuente, este directorio almacenará todo el código fuente que vamos descargando, si desean pueden borrar su contenido cada cierto tiempo, pero hay muchos otros usos interesantes para estos programas, pero eso también para otro post ;)

VIDEO_CARDS:

Bueno, como su nombre lo indica, la marca de tu tarjeta de vide, esto evita que tengas que instalar drivers al momento de instalar cosas como X u Wayland.

LANG:

Un espacio bastante cómodo para poder agregar todos los idiomas que quieres que soporte tu sistema, en mi caso yo quiero tener en español de Perú, pero se pueden agregar más para poder cambiar en caso de ser necesario.

INPUT_DEVICES:

El formato o driver con el que funcionan tus periféricos, dado que uso GNOME, libinput se encarga de mi touchpad. Otra opción bastante conocida pero que está siendo reemplazada es synaptics.

LINGUAS:

L10N:

Los que saben de programación sabrán por qué no hay nada en el anterior, sino, miren cómo funciona which en muchos lenguajes de programación ;) .

Estas variables permiten saber el lenguaje  de los programas instalados, en mi caso tanto en inglés como en español está bien.

RUBY_TARGETS:

Los TARGETS muestran otra funcionalidad bastante peculiar de Gentoo Linux. Es posible tener distintas versiones conviviendo dentro del mismo sistema. Esto quiere decir que yo podría tener Ruby 21, 22 ,23 y 24  al mismo tiempo y sin conflictos, lo mismo que Python, Apache, Tomcat, MariaDB, entre muchos otros. Esta función se denomina SLOT en nuestra comunidad y es tema para un post completo, por lo que lo dejaremos para otra oportunidad ;)

GENTOO_MIRRORS:

Los lugares de donde vas a copiar tu colección de ebuilds, sirve de manera especial para poder tener puntos de acceso al momento de sincronizar. Yo tengo estos dos de backup, puesto que mi lista de ebuilds la descargo directamente de Github, y solo es necesario hacer git pull para descargar (obviamente, Gentoo lo hace por mi de todas maneras cuando escribo emerge –sync)

MUCHO MÁS:

Estas no son todas las opciones de make.conf, existen muchas más, y probablemente algunas permitirán mayores ventajas o configuraciones, pero con esas es más que suficiente para tener un sistema funcional :)

/etc/portage:

Les presento un poco de lo que existe dentro de esta carpeta, solo para que se puedan hacer una idea de lo que falta por conocer y que iremos viendo en estos días y posts :)

Diseño propio. Christopher Díaz Riveros

Un poco más:

Como no puedo dejar de comentar un poco más, me adelantaré un poco y les mostraré una parte especial de esta carpeta, el archivo make.profile. Los perfiles de Gentoo te permiten generar configuraciones especializadas para cada tipo de usuario, así no es necesario que escribas o conozcas todos los USE, o muchas cosas más, simplemente puedes escoger un perfil y empezar sobre ese. Esta es la lista actual de perfiles que tenemos en Gentoo el día de hoy.

Diseño propio. Christopher Díaz Riveros

Como pueden ver, mi perfil está seleccionado con amd64, un desktop, con GNOME y usando systemd. Al seleccionar este perfil me aseguro que todos los USE flags y demás configuraciones sean los mínimos requeridos para tener mi sistema corriendo, y en base a eso yo hago los retoques. (Seguro alguno que otro creía que tendría que pensarlo todo desde cero… eso es mentira aquí ;) )

Como podemos ver, perfiles son muchos, y cada uno con sus beneficios propios.

Para terminar:

Bueno, otro post que se va de mis manos para sus ojos :) espero que las ansias de probar Gentoo ya los tenga bastante impacientes :D así podré sentir una emoción mayor al momento de crear la guía de instalación. Saludos a todos,

Gentoo: ¿Por qué opté por compilar mis propios programas?

Bueno, dada la gran acogida de mi anterior post, vengo a contarles un poco más sobre mi distribución favorita, Gentoo Linux. Prometo que este post tendrá información entretenida que les ayudará a entender un poco sobre los mitos que surgen frente a la temible compilación de software. También prometo que esta información será útil para la próxima guía de instalación de Gentoo Linux en ~20 pasos (todavía no los he contado bien, pero creo que son incluso menos). Sin más que aumentar, comencemos:

¿Qué es compilar?

Es el proceso que realiza un programa (comúnmente llamado compilador) para convertir código escrito en lenguaje humano (archivos C, C++,etc) en código entendible para una máquina (código binario). Miremos el siguiente ejemplo:

Diseño propio, Christopher Díaz Riveros

Este es nuestro pequeño programa en C ( si después desean otros tutoriales sobre C también estaré encantado de mostrar lo poco que he aprendido en este tiempo). Ahora veamos cómo se ve el resultado después de compilar.

Diesño propio, Chrirstopher Díaz Riveros

Hermoso, ¿no es cierto? :) Esto es lo que nuestra máquina entiende para poder escribir ese pequeño “Hola” en nuestra terminal cada vez que se ejecuta el programa.

El proceso de compilación:

Como no sirve de nada tener un programa que imprima un simple “Hola” en la pantalla, pues los archivos .c y .h abundan en proyectos (como en todos los lenguajes de programación). Para poder hacer el proceso de compilación un poco más sencillo aparecieron nuevas herramientas, la más representativa de todas es el comando make.

Make toma un archivo Makefile como punto de partida y compila lo necesario para poder crear el ejecutable final, en algunos casos este paso requiere ejecutar un archivo llamado configure para poder asignar unas cuantas variables necesarias para el compilador para compilar (valga la redundancia) un archivo útil.

Es por esto que en muchos tutoriales encontraremos los siguientes pasos:

Diseño propio. Christopher Díaz Riveros

La magia de ./configure:

Para mostrales uno de los secretos más ocultos y entretenidos del código fuente, iremos al código fuente de un programa que todos conocemos a la perfección, sudo. Primero los pasos de siempre, pero me detendré en ./configure  para mostrarles algo especial.

Diseño propio. Christopher Díaz Riveros

Esto nos devolverá una larga lista de opciones, entre las cuales les mostraré la que más me llama la atención.

Diseño propio. Christopher Díaz Riveros

--with-insults… como su nombre lo indica, compila sudo con insultos :D es una divertida funcionalidad que permite lanzar un insulto al usuario cada vez que se equivoca en su clave. ¿Para qué sirve? pues no hace mucho :P pero deja claro un punto. Existen miles de opciones que no vienen por defento en la mayoría de distribuciones.

Así como estás, hay muchas otras que tal vez estarán activas en distribuciones de código binario y que nunca utilizarás, o habrá algunas que necesites, pero no vendrán con tu binario distribuido oficial, lo que implica que cada actualización será manual.

Empieza la diversión en Gentoo:

Ya hemos visto cuántas opciones podemos estar perdiendo o arrastrando con programas precompilados. Pero ahora vamos a centrarnos un poco en el problema de lo pre-compilado.

Performance:

¿Alguno se ha preguntado por qué las máquinas nuevas solo se ven un poco más rápidas comparadas con otras no tan modernas? Si el procesador es mejor, hay más RAM, todo es mejor, ¿por qué no va más rapido? La respuesta es sencilla… compilación.

Pongamos un ejemplo muy práctico.

Mis programas son compilados con la opción --march=broadwell… esto es debido a que mi procesador es broadwell (i7 de intel). ¿La desventaja de esto? ningún procesador anterior a broadwell es capaz de reconocer este binario. En este punto ya deberías verlo muy claro, si yo compilo con un –march  específico, todo lo anterior no funcionará… ¿entonces cómo hacen los paquetes binarios para soportar tantos tipos de hardware? Fácil, compilan con la menor opción posible :) esto garantiza que todo tipo de hardware va a poder leerlo (al menos por compatibilidad).

El verdadero problema… si tu usas programas que están compilados para i3… ¡¡Todo el poder de tu i7 ( o sus respectivas analogías AMD) es desperdiciado!! ¿ No es eso triste? :(

Flexibilidad:

Dado que los desarrolladores de Gentoo son muy inteligentes, todo este proceso de tar, ./configure, make, etc… ha sido reemplazado con el poder de Portage. Todas estas configuraciones curiosas han pasado a denominarse USE flags, por lo que si tu deseas una configuración específica, no necesitas entrar al código fuente, solo configurar la variable. Aquí un ejemplo de cómo hacerlo con sudo en portage. Primero veremos qué opciones tenemos en nuestra configuración actual con equery.

Diseño propio. Christopher Díaz Riveros

Como podemos ver, las opciones rojas están activadas, las azules no, bueno… todos pueden leer la leyenda :)

digamos que yo quiero agregar una opción…

Diseño propio. Christopher Díaz Riveros

Tan sencillo como agregar una línea en un archivo llamado sudo (el nombre es referencial) dentro de /etc/portage/package.use/. Con esto la siguiente vez que instalemos sudo nos dirá que se va a recompilar con la opción activada.

Diseño propio. Christopher Díaz Riveros

Si damos, YES, todo lo que hay que hacer es esperar un poco y listo :) tan sencillo como esto.

Consideraciones finales:

Bueno, ya hemos visto lo sencillo que es manejar funcionalidades extra en Gentoo, lo que nos permite agregar, quitar o modificar opciones dentro de nuestros programas favoritos. También hemos visto cómo es que el performance de nuestros programas depende mucho de las variables con las que lo compilemos. Si tienes una máquina muy nueva, Gentoo es tu mejor opción. Si tienes una máquina muy vieja, Gentoo también es tu opción (aunque demore un poco en compilar, los programas finales serán mucho más ligeros).

Dentro de poco estaré escribiendo mi guía de instalación de Gentoo, tanto para los amantes de SystemD como para los aventureros por OpenRC (yo uso systemd con GNOME). Por cierto, otra de las grandes ventajas de Gentoo es la posibilidad de elegir todo dentro de tu sistema, y cuando digo todo es TODO.

Saludos,

Gentoo Linux: La historia de un viaje

Gentoo Linux es…

¡Vaya! Creo que es necesario empezar con un poco de información antes de comentarles algo respecto a esta distribución que ha sido el punto de partida en mi vida Linux.

Un poco de “yo”:

Primero empezaré por contarte un poco de mí (si es que no te incomoda claro, pero si es así, puedes saltar un par de párrafos hacia abajo, no me voy a ofender :) ).

Mi nombre es Christopher, tengo 24 años y ya llevo poco más de 2 años usando distintas distribuciones Linux. Ha sido un camino lleno de alegrías (aunque también confusiones debo admitir :P ) y a lo largo del viaje he podido aprender múchisimas cosas.

Yo estudio (ya estoy por terminar mi carrera) desarrollo de software en Lima, Perú. A lo largo de mi carrera he visto distintos tipos de lenguajes y frameworks, y uno que otro lo he utilizado para proyectos personales.

Soy un apasionado de la seguridad informática, ese es un campo en el que espero desenvolverme profesionalmente, sobre todo en la investigación de vulnerabilidades.

Con esta pequeña introducción creo que ya hay más que suficiente, ahora si podemos entrar a nuestra historia.

Un poco de “ustedes”:

DesdeLinux es uno de los principales puntos de encuentro para usuarios de habla hispana de distintas distribuciones. Y es probable que todos los que estén leyendo estos párrafos ya han usado, usen o deseen usar alguna distribución Linux. Los más conservadores podrán usar un sistema dual con algunas otra versión de otro sistema operativo, y los más aventureros seguramente saltarán de distribución en distribución con el pasar de los meses. Sea donde sea que te encuentres en este instante permíteme compartir un poco de mi historia con Linux, un mundo lleno de aventuras, desafíos y éxitos.

Como muchos, especialmente aquí en América Latina, cuando era más joven, no tenía ni idea de la existencia de Linux. Siempre me había sentido insatisfecho de las continuas fragmentaciones de disco, el perder velocidad con cada instalación, el tener que pagar por cada mantenimiento, en fin, mil y una situaciones que tal vez todos hemos atravesado en algún momento.

Primer capítulo, Ubuntu:

Todo esto cambió cuando me presentaron Ubuntu poco antes de comenzar a estudiar Desarrollo de Software. Todavía recuerdo la primera vez que inició el Live USB de Ubuntu, con ese típico color naranja, la barra lateral, el nuevo orden y esa “extraña” manera de buscar mis aplicaciones apretando la tecla Windows.

Ubuntu 17.10
Ubuntu Linux

El primer encuentro:

Debo admitir que fue amor a primera vista, un nuevo mundo de posibilidades, cosas por aprender y sin lugar a dudas la nueva experiencia de vivir libremente con tu equipo. Pero como todo amor repentino, no duró mucho… Debo admitir que al principio no tenía idea de lo que implicaba actualizar los repositorios ni siquiera cómo actualizar un paquete. Instalar mi software favorito siempre era una experiencia que, aunque a tropiezos, me dejaba una sensación de satisfacción absoluta al ver ejecutarse en la pantalla principal la ventana con el programa que me había tomado (a veces poco, a veces mucho) tiempo configurar.

Los desamores:

Al poco tiempo empecé a notar que en mi falta de experiencia, había empezado a instalar cientos de repositorios, archivos, programas, etc, etc. Así que un día me dije a mi mismo: “Hoy vamos a limpiar la computadora” (no es que estuviera lenta ni nada por el estilo cabe mencionar, simplemente me parecía que sería mejor tenerla con pocas cosas que ya no usaba). Tras un par de horas de limpieza empecé a notar que habían muchas más cosas de las que yo había instalado en primer lugar, programas y paquetes que desconocía su función y sobre todo el motivo por el cual estaban en mi sistema.

La curiosidad:

Mientras terminaba de descubrir las novedades, mi siempre activa curiosidad me impulsaba a seguir buscando más cosas por descubrir. De esta manera empecé a leer sobre todos los tipos de distribuciones de Linux existentes. En poco tiempo ya habían pasado por mis ojos nombres como Fedora, SUSE, CentOs… y la lista siguió y siguió hasta que encontré uno que me llamaba mucho la atención… Arch Linux…

Arch Linux es una distribución que explotó mi mente… Rolling Release… fue una de las primeras cosas que me llamó la atención. La segunda fue la filosofía KISS. Muy pronto empecé a soñar al respecto, poder crear mi sistema desde lo mínimo, saber exactamente qué tenía y tener exactamente lo que deseaba, sin programas extra, sin configuraciones extra. Debo admitir que me sentí poco capaz en ese momento, a decir verdad solo llevaba unos cuantos meses en esto de Linux, pero pensaba que no podría estar a la altura de la instalación por consola. El miedo me superó y decidí buscar algo un poco más sencillo.

Mis sueños se hicieron realidad al encontrar Manjaro

Segundo capítulo, Manjaro:

Para todos los conocidos en el tema, Manjaro es una de las distribuciones que se enfocan en acercar a los usuarios más nuevos del mundo Linux al ambiente Rolling Release de Arch Linux. Su entorno y sus aplicaciones tienen una amplia selección de programas que facilitan la vida a cualquier usuario y le permiten familiarizarse con pacman, el gestor de paquetes de Arch.

Logo de Manjaro
Manjaro Linux

Ya llevaba poco más de cuatro meses de haber usado Ubuntu, y decidí optar por Manjaro. Me dije a mi mismo: “Si puedes con esto, estarás más cerca de poder instalar Arch en la laptop”. Fue una experiencia enriquecedora, pude aprender cómo se manejaban distintos tipos de kernel ( y descubrir lo que el kernel era) aquí. Pude instalar muchos paquetes nuevos y aprendí mucho sobre configuraciones y lo mínimo que necesita un sistema para poder iniciar. Al mismo tiempo empecé a practicar en máquinas virtuales el proceso de instalación de Arch. Sin sentirme totalmente preparado para dar el salto decidí intentar instalar Arch en una máquina que me pude prestar en el instituto. Siguiendo al pie de la letra la guía de instalación y uno que otro tutorial por internet. Y en un abrir y cerrar de ojos, ya lo había conseguido, la instalación completa en mi laptop.

Tercer capítulo, Arch:

Logo de Arch Linux
Arch Linux

Mi primer instalación tuvo muchos tropiezos, todavía desconocía muchas cosas del mundo de Linux, pero al menos ya me sentía un poco más experimentado en el tema. Había conseguido instalar un sistema que otros consideraban difícil y lo había logrado en mi segundo intento ( el primero fue en la máquina que me presté en el instituto). Al poco tiempo decidí volver a instalar mi sistema, me parecía que todavía habían muchas cosas que podía configurar mejor, o instalar mejor. Con el tiempo me di cuenta de cuan pocos eran los paquetes que realmente necesitaba para poder hacer funcionar mi laptop y me sentía cada vez más cómodo con la terminal, los comandos y las ubicaciones de archivos.

Todo iba de maravilla hasta que un día, navegando por internet, me topé con una imagen que me despertó curiosidad…

¿Qué era esto? ¿Había algo más avanzado que Arch Linux? ¿Gentoo? ¿Linux From Scratch?… Mi curiosidad llamaba nuevamente. Más decidida que nunca a poder empezar este nuevo reto.

Un nuevo capítulo, Gentoo:

Logo Gentoo
Gentoo Linux

Lo primero que encuentras al hablar de Gentoo es documentación, mucha documentación. La Wiki de Gentoo es un lugar maravilloso donde puedes encontrar todo tipo de información referente a miles de programas y configuraciones. Pero la más básica de todas, era un compendio lleno de arquitecturas y procesos llamado Gentoo Handbook.

En el Handbook uno puede encontrar paso a paso todo lo necesario para poder realizar una instalación de Gentoo desde cero. Sumamente detallado y explicado de manera entendible, este manual te lleva de la mano en el proceso de configuración e instalación de Gentoo Linux. Debo admitir que intenté aplazar la instalación lo más que pude, pensando que no iba a ser capaz de realizarla completa, pero un fin de semana, con toda la emoción y un poco de miedo, me lancé a comenzar la instalación que cambiaría mi forma de ver Linux.

El proceso me tomó poco menos de dos días (un día de lectura previa y un día entre compilación e instalación). Digo compilación porque en Gentoo puedes compilar todos tus programas en lugar de descargar una copia binaria, pero en realidad es bastante parecido a pacman, apt o incluso yum. Uno de los procesos más largos fue el kernel, la parte de configuración, leer las opciones, seleccionar lo necesario. Otro nuevo mundo de posibilidades y formas de personalización que escapaba a todas las otras distribuciones que había visto hasta ese momento.

Acabado el proceso, no puedo negar que fue una emoción totalmente nueva el ver prender por primera vez mi entorno de escritorio GNOME, mover mi mouse y ver todo lo que había logrado con mi trabajo. Todo esto sucedió en enero y desde ese entonces no puedo negar que cada día aprendo más sobre esta impactante distribución, y he decidido quedarme aquí hasta el día en que deje de poder usar una computadora.

El verdadero comienzo:

Ya es la tercera vez que instalo desde cero mi laptop con Gentoo, con cada instalación siento más la habilidad de poder configurar mejor mi computadora, sacar el mayor provecho a mi hardware y disfrutar la emoción de saber que el equipo es completamente mío, y que yo soy quien lo hace funcionar.

También he probado la instalación de Linux From Scratch ( sin lugar a duda era una obligación para mí). Pude completarla y prender mi terminal, sabiendo que yo había compilado desde cero cada programa, y lo había montado desde cero dentro de mi laptop, otra experiencia maravillosa debo admitir.

Linux from scratch

Pero es en este punto donde he encontrado y reforzado las razones por las cuales quedarme en Gentoo y seguir disfrutando de mi distribución.

Un vistazo rápido a Gentoo:

Al final de esta aventura he optado por Gentoo por los siguientes motivos:

Contar con una comunidad hace más sencillo el mantenimiento:

Esto siempre será verdad, Linux from scratch es maravilloso, pero no es posible mantenerlo de manera sencilla, mucho menos cuando existen vulnerabilidades de seguridad de por medio, o cuando quieres tener el software más reciente en tu equipo.

Una comunidad y documentación de primera:

La documentación de Gentoo es magnífica, todo está a disposición en algún lugar, solo es cuestión de leerlo. En caso de no encontrarlo, siempre se puede encontrar a alguien en IRC para pedir consejo. Muchos son muy amables, y aunque poco conversadores, la mayoría siempre están en disposición de ayudar a todos.

Control y performance total:

Al usar Gentoo, tu construyes todo, y todo es TODO. Pero la principal diferencia con Linux from scratch es que después de instalarlo, el mantenimiento es bastante sencillo. Portage, el gestor de paquetes de Gentoo, es sumamente versátil y permite configurar en cada detalle (y de forma sencilla) los atributos de los programas que instalas. Esta configuración al mismo tiempo permite exprimir al máximo el hardware de tu equipo. Si tu laptop es moderna y no usa Gentoo, está perdiendo mucho de su potencial.

Para terminar:

Si has llegado hasta aquí, espero que hayas podido emocionarte un poco de las maravillosas oportunidades que ofrece Linux a sus usuarios. El poder de conocer en cada aspecto tu máquina, si eres desarrollador de software como yo, es una de las experiencias más satisfacctorias que puedes experimentar. Si tu curiosidad te inclina a probar nuevas cosas, solo te puedo recomendar ¡HAZLO!  Sin esperar mucho tiempo, sin poner peros, y si no lo consigues a la primera, sigue intentando. Al poco tiempo te darás cuenta de cuánto has aprendido y descubierto en el proceso.