Gentoo sí es para humanos

En la web ya he tratado diferentes distribuciones, desde las más comunes para usuarios nóveles como Linux Mint o Ubuntu, hasta las más avanzadas, para usuarios expertos, como GuixSD o Slackware. Pero aunque ya son un buen número, todavía no había tratado con la más “hueso” o complicada, esto es, Gentoo. Respecto al título del artículo, he buscado algo provacador y llamativo, que tiene que ver con la fama de complicado de su instalación y manejo.

gentoo-logo-1

Sobre Gentoo

Se trata de una distribución GNU Linux para usuarios expertos y con experiencia en sistemas operativos. Nació en el año 2002, de la mano Daniel Robbins, basada en la desaparecida Enoch Linux. El nombre deriva del término en inglés del pingüino papua.

La idea nació de crear una distribución sin binarios precompilados, que se adapte el hardware de cada equipo y sólo incluya los programas necesarios. Su gestión de paquetes es similar a los ports de FreeBSD, de los que ya hemos hablado. En Gentoo se llama Portage. Utiliza licencias libres, como no podía ser de otra manera, entre ellas la GNU GPL.

En 2004 se fundó Gentoo Foundation. Qué es la organización que la coordina y mantiene.

Sobre Portage

Este concepto nos debe quedar claro. Se trata de un gestor de paquetes basado en los ports de FreeBSD, escrito en Python y Bash. Se encarga de gestionar las dependencias, cajas de arena durante la instalación, adaptar los paquetes a gusto del administrador, perfiles del sistema, desinstalación segura, gestión de ficheros de configuración entre otras características.

Siempre a la última

Gentoo al igual que otras distribuciones como Arch, es rolling release, esto es, los paquetes se actualizan de forma continua. Esto le permite tener las últimas versiones de los programas.

Instalación sobre una máquina virtual

Para probar el sistema he utilizado una máquina virtual en un entorno con VirtualBox, con un disco de 12 GB y una memoria de 1 GB. He utilizado una imagen mínima, que he descargado desde aquí. A diferencia de otros autores que les viene la inspiración de manera divina (humor), he utilizado la guía oficial en castellano, bastante extensa, que podéis consultar vosotros también.  Al iniciar la máquina virtual, escogemos la ISO recién descargada, y nos aparecerá algo similar a esto:

Arranque CD mínimo Gentoo

Arranque CD mínimo Gentoo

En la guía, que es muy extensa, explica y da detalles de muchos conceptos técnicos, a nivel informativo, yo iré al grano. Es evidente que algunos de los pasos que yo realizaré se pueden hacer de otra manera, esto es a gusto del consumidor. El primer paso es crear una contraseña para root y, de manera adicional, un usuario.

  1. passwd
  2. useradd -m -G users davidochobits
  3. passwd davidochobits

Si nos interesa que otro usuario o nosotros mismos, puede acceder por ssh, debemos habilitar el servicio:

  1. /etc/init.d/sshd start

En mi caso me ha detectado la configuración de red a la primera. Se puede comprobar utilizando el programa ‘ifconfig‘ o el comando y parámetro ‘ip addr‘ Siempre podéis consultar la guía oficial que he comentado antes.

Vamos al siguiente paso, es decir, crear las particiones, en mi caso la mía es /dev/sda. Voy a crear cuatro particiones, la primera para la BIOS, la segunda para el arranque, la tercera para la partición transaccional o swap, y la cuarta para el sistema en sí. Voy a utilizar GPT en vez de MBR. Por normal general para el particionado uso la gran herramienta que es ‘cfdisk‘, en cambio ahora, usaré el programa ‘parted‘ , que es el que aparece primero en la guía.

Primero escogemos la unidad a particionar:

  1. parted -a optimal /dev/sda

Definimos la etiqueta GPT

  1. mklabel gpt

Cambiamos las unidades a MB

  1. unit mib

Ahora vamos con el particionado. Indicamos el tamaño de las particiones, los tamaños se indican de la siguiente manera, en la primera que vamos a crear, le decimos que empieza en el primer MB y acabo en el tercero, esto es, ocupa 2 MB.

  1. mkpart primary 1 3 
  2. name 1 grub
  3. set 1 bios_grub on

Hemos indicado el tamaño y le hemos dicho al sistema que en ella irá el cargador de arranque GRUB. Sigamos:

  1. mkpart primary 3 131
  2. name 2 boot 
  3. mkpart primary 131 643 
  4. name 3 swap 
  5. mkpart primary 643 -1 
  6. name 4 rootfs

En el resto de particiones seguimos los mismos pasos, indicar el tamaño y añadir su respectiva etiqueta. Para ver el resultado utilizamos la orden ‘print

Vamos al apartado de crear los sistemas de ficheros, en mi caso para la partición de arranque, que es la segunda, usaré EXT2 y para la cuatro el sistema EXT4

  1. mkfs.ext2 /dev/sda2
  2. mkfs.ext4 /dev/sda4

Ahora utilizamos ‘mkswap‘ para indicar la partición de intercambio, y ‘swapon‘ para activarla.

  1. mkswap /dev/sda3
  2. swapon /dev/sda3

Ya tenemos las particiones creadas y con sus respectivos sistemas de ficheros. Ahora toca crear los puntos de montaje. Voy a seguir los recomendados para la instalación:

  1. mount /dev/sda4 /mnt/gentoo
  2. mkdir /mnt/gentoo/boot
  3. mount /dev/sda2 /mnt/gentoo/boot

Vamos ahora con la comprobación de la fecha y hora del sistema utilizando ‘date‘, si es incorrecta, la podemos modificar siguiendo los parámetros «date mes+día+hora+minutos+año», un ejemplo : ‘date 042017002016

Instalar el Stage comprimido (tarball)

En esta sección vamos a descargar y descomprimir la última versión del sistema base. Para ello utilizaremos el programa ‘links‘ que nos permitirá navegar por la web desde la consola de comandos. Ya hablamos de él en su día. Nos ubicaremos en la carpeta /mnt/gentoo, y allí descargaremos el fichero que nos interese.

  1. cd /mnt/gentoo
  2. links https://www.gentoo.org/downloads/mirrors/

Hay que acceder al directorio /releases/amd64/autobuilds/ y allí escoger el que más nos interese.

Descarga del fichero tarball utilizando links

Descarga del fichero tarball utilizando links

Cuando ya lo tenemos descargado, recuerda que debemos estar ubicados en /mnt/gentoo, lo descomprimimos:

  1. tar xvjpf stage4-*.tar.bz2 --xattrs

El proceso puede tardar un rato, según la capacidad de nuestra máquina.

Enjaulamiento y servidor de réplica

Para poder escoger un servidor de réplica rápido se recomienda utilizar uno que tengamos cerca geográficamente. Portage comprobará el fichero make.conf la variable GENTOO_MIRRORS y utilizará los servidores que se especifican allí. Utilizaremos el programa ‘mirrorselect‘ para escoger el que más nos convenga, y que el resultado se refleja en el fichero /mnt/gentoo/etc/portage/make.conf

  1. mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

En mi caso es el de la Facultad de Informática (FIB) de la UPC, en Barcelona, cerquita de casa : )

Selección mirror Gentoo

Selección mirror Gentoo

Creamos el fichero donde se encontraré la información de los servidores replica en el fichero /etc/portage/repos.conf/gentoo.conf. Creamos el directorio:

  1. mkdir /mnt/gentoo/etc/portage/repos.conf

Copiamos el fichero de configuración del repositorio de Gentoo proporcinado por Portage:

  1. cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

En mi instalación ha quedado de la siguiente manera:

Fichero gentoo.conf

Fichero gentoo.conf

Una vez hecho esto, copiaremos el fichero de configuración de DNS, al sistema, para que cuando comience el proceso, no nos falle la instalación:

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

Si ya existe lo sobreescribimos.

En breve cambiaremos a un entorno enjaulado, para proseguir con la instalación, pero antes de ello debemos crear una serie de puntos de montaje, para que todo funcione correctamente.

  1. mount -t proc proc /mnt/gentoo/proc
  2. mount --rbind /sys /mnt/gentoo/sys
  3. mount --make-rslave /mnt/gentoo/sys 
  4. mount --rbind /dev /mnt/gentoo/dev
  5. mount --make-rslave /mnt/gentoo/dev

Ya tenemos todas las particiones creadas, los puntos de montaje preparados y el sistema base descargado. En este punto vamos a entrar en el nuevo entorno de instalación, utilizando ‘chrooting’ Nuestra sesión cambiará de raíz.  Mediante los siguientes comandos:

  1. chroot /mnt/gentoo /bin/bash 
  2. source /etc/profile 
  3. export PS1="(chroot) $PS1"

A partir de ahora todas nuestras acciones se realizarán en el nuevo entorno.

Configurar Portage

Ya hemos hablado en el principio del artículo lo que era Portage. En el siguinte paso vamos a instalar una instantánea, una colección de ficheros que informan a Portage de los últimos títulos que se pueden instalar, que perfiles están disponibles, entre otras cosas. Para obtener la última versión disponible:

  1. emerge-webrsync

A partir de aquí el proceso se puede demorar, depende de nuestra conexión a Internet y de la capacidad del equipo

Instantánea Portage

Instantánea Portage

Un perfil (profile) es uno de los bloques de construcción en cualquier sistema Gentoo. Especifica una serie de valores para el sistema, debemos escoger el que más nos convenga, para ver la lista y escoger uno, es mediante el comando:

  1. eselect profile list

La imagen en mi caso es la siguiente:

gentoo-install-013

Para escoger uno usaremos:

  1. eselect profile set 3

De esta manera he escogido el perfil para amd64 con escritorio, sin systemd, es decir, utilizando OpenRC.

Como hemos modificado seguramente el perfil, debemos actualizar lo que se llama «conjunto @world«

  1. emerge --ask --update --deep --newuse @world

Este proceso tarda realmente mucho, ya que se trata de un conjunto de tareas de compilación de paquetes, así que podéis ir a dar un paseo de unas horitas. O leer un texto que escribí en su día, para pasar el rato, que guarda cierta relación.

Zona horaria y localización

Al igual que en otras distribuciones ahora nos toca configurar la zona horaria. Listado la carpeta /usr/share/zonainfo, nos mostrará todas las posibilidades:

  1. ls /usr/share/zoneinfo

Cuando ya sabemos la que nos interesa escribimos, cambiando la zona por la nuestra:

  1. echo "Europe/Madrid" > /etc/timezone

Y el comando:

  1. emerge --config sys-libs/timezone-data

De esta manera actualizamos la biblioteca C del sistema que se encarga de la zora horaria.

Configuración zona horaria

Configuración zona horaria

Para configurar la localización debemos trabajar con el fichero /etc/locale.gen

  1. vim /etc/locale.gen

Imaginemos que queremos disponer de alemán e inglés, junto con sus formatos de carácteres. El fichero debería contener:

  1. en_US ISO-8859-1
  2. en_US.UTF-8 UTF-8
  3. de_DE ISO-8859-1
  4. de_DE@euro ISO-8859-15

Utilizamos el comando ‘locale-gen‘ para generar las localizaciones:

  1. locale-gen

Para comprobar que efectivamente las localizaciones están indicadas en el sistemas, sólo debemos escribir el comando y parámetro ‘locale -a

No hemos acabado todavía con esta parte. Nos falta definir exactamente la localización para todo el sistema, para ello utilizaremos ‘eselect locale list‘, que nos mostrará todas las opciones disponibles. Seleccionamos la que más nos interese con ‘eselect locale set número

Por último recargamos las variables de entorno:

  1. env-update && source /etc/profile && export PS1="(chroot) $PS1"

La comunidad de Gentoo nos ofrece una magnífica guía de localización por si tenemos alguna duda.

Configurar el núcleo Linux

Ahora viene la parte más importante que es la configuración del núcleo o kernel de Linux. Se puede hacer de dos formas, de manera manual o de forma automática. El artículo, hasta esta parte, ya es bastante extenso, así que voy a pasar directamente la configuración automática con la herramienta ‘genkernel‘, que se encargará de configurarlo e instalarlo.

Para nuestro sistema, que es de 64 bits utilizaré la fuente ‘sys-kernel/genkernel‘ , podemos consultar todas las fuentes disponibles del núcleo aquí.

  1. emerge --ask sys-kernel/gentoo-sources

Esto ubicará las fuentes en la carpeta /usr/src

Modificamos el fichero de montaje /etc/fstab, para que la línea /boot apunte al dispositivo correcto.

  1. /dev/sda2	/boot	ext2	defaults	0 2

El fichero /etc/fstab lo trataremos más adelante, pero la línea en particular que hemos añadido o modificado, según sea el caso, es muy importante para la herramienta ‘genkernel

  1. genkernel all

Y sí, en esta parte también nos podemos ir a dar un paseo, que no se diga que Gentoo no se preocupa por nuestra salud 🙂

Una vez haya finalizado, un núcleo, un conjunto de módulos y un disco de inicio en ram (initramfs) se habrán creado. Usaremos el núcleo e initramfs para configurar un gestor de arranque más tarde. Anotamos los nombres del núcleo y de initramfs ya que los necesitaremos cuando editemos el archivo de configuración del gestor de arranque. El initramfs se iniciará inmediatamente después del arranque para realizar la autodetección de hardware (igual que en el CD de instalación) antes del inicio del sistema «real».

  1. ls /boot/kernel* /boot/initramfs*

Módulos del núcleo

De manera manual podemos añadir una serie de módulos al núcleo, según los que necesitemos. En la guía sólo veremos la instalación de los controladores, firmware, para que todo el hardware, incluido los módulos Wi-Fi, nos funcionen correctamente:

  1. emerge --ask sys-kernel/linux-firmware

Ya podemos pasar a la siguiente sección.

Configurar el sistema

Vamos a pasar a configurar el fichero /etc/fstab, para que las unidades se monten al inicio del arranque, de manera correcta, en mi caso ha quedado así:

  1. /dev/sda2   /boot        ext2    defaults,noatime     0 2
  2. /dev/sda3   none         swap    sw                   0 0
  3. /dev/sda4   /            ext4    noatime              0 1
  4.  
  5. /dev/cdrom  /mnt/cdrom   auto    noauto,user          0 0

En el siguiente paso añadimos un nombre, que más nos guste, para nuestra máquina:

  1. vim /etc/conf.d/hostname

Escribimos el nombre, guardamos y salimos, con :wq. Una vez hecho esto vamos a configurar la red, hay que tener en cuenta que hasta ahora utilizamos la configuración de red para la instalación, que no se conservará al reiniciar. Por lo que debemos configurarla para su posterior uso. Para ello debemos instalar net-misc/netifrc

  1. emerge --ask --noreplace net-misc/netifrc

Si utilizamos DHCP necesitamos instalar también un cliente para ello. Para añadir la configuración de esa manera, modificamos el fichero /etc/conf.d/net

  1. nano /etc/conf.d/net
  2. #En la configuración estática:
  3. config_eth0="192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255"
  4. routes_eth0="default via 192.168.0.1"
  5. #Si dinámica
  6. config_eth0="dhcp"

Esto según nuestras necesidades y la topología de nuestra red. Para que la red se inicie en el arranque, lo debemos indicar en el nivel de ejecución por defecto:

  1. cd /etc/init.d 
  2. ln -s net.lo net.eth0 
  3. rc-update add net.eth0 default

Instalamos el client DHCP mencionado antes:

  1. emerge --ask net-misc/dhcpcd

Seguimos

Instalar un cargador de arranque

En lo que respecta al cargador de arranque yo voy a usar GRUB2, que es al que estoy más acostumbrado. En mi caso no utilizo UEFI, sino BIOS, por lo que instalaré el siguiente paquete:

  1. emerge --ask sys-boot/grub

Instalamos los ficheros necesarios en /boot/grub

  1. grub2-install /dev/sda
  2. #Generamos la configuración
  3. grub2-mkconfig -o /boot/grub/grub.cfg

Pues aunque parezca increible, ya podemos reiniciar el equipo, también es importante desmontar las unidades:

  1. exit
  2. cd 
  3. umount -l /mnt/gentoo/dev{/shm,/pts,} 
  4. umount /mnt/gentoo{/boot,/sys,/proc,} 
  5. reboot

Que no se nos olvide quitar el CD o USB de instalación.

Con esto ya tenemos el sistema listo para su uso, pero aún nos faltan muchas más cosas, que veremos más adelante en otros capítulos. Nos leemos en la próxima ^.^

Derechos de la imagen