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.
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:
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.
passwd
useradd -m -G users davidochobits
passwd davidochobits
Si nos interesa que otro usuario o nosotros mismos, puede acceder por ssh, debemos habilitar el servicio:
/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:
parted -a optimal /dev/sda
Definimos la etiqueta GPT
mklabel gpt
Cambiamos las unidades a MB
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.
mkpart primary 1 3
name 1 grub
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:
mkpart primary 3 131
name 2 boot
mkpart primary 131 643
name 3 swap
mkpart primary 643 -1
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
mkfs.ext2 /dev/sda2
mkfs.ext4 /dev/sda4
Ahora utilizamos ‘mkswap‘ para indicar la partición de intercambio, y ‘swapon‘ para activarla.
mkswap /dev/sda3
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:
mount /dev/sda4 /mnt/gentoo
mkdir /mnt/gentoo/boot
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.
cd /mnt/gentoo
links https://www.gentoo.org/downloads/mirrors/
Hay que acceder al directorio /releases/amd64/autobuilds/ y allí escoger el que más nos interese.
Cuando ya lo tenemos descargado, recuerda que debemos estar ubicados en /mnt/gentoo, lo descomprimimos:
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
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 : )
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:
mkdir /mnt/gentoo/etc/portage/repos.conf
Copiamos el fichero de configuración del repositorio de Gentoo proporcinado por Portage:
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:
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:
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.
mount -t proc proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
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:
chroot /mnt/gentoo /bin/bash
source /etc/profile
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:
emerge-webrsync
A partir de aquí el proceso se puede demorar, depende de nuestra conexión a Internet y de la capacidad del equipo
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:
eselect profile list
La imagen en mi caso es la siguiente:
Para escoger uno usaremos:
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«
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:
ls /usr/share/zoneinfo
Cuando ya sabemos la que nos interesa escribimos, cambiando la zona por la nuestra:
echo "Europe/Madrid" > /etc/timezone
Y el comando:
emerge --config sys-libs/timezone-data
De esta manera actualizamos la biblioteca C del sistema que se encarga de la zora horaria.
Para configurar la localización debemos trabajar con el fichero /etc/locale.gen
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:
en_US ISO-8859-1
en_US.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
Utilizamos el comando ‘locale-gen‘ para generar las localizaciones:
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:
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í.
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.
/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‘
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».
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:
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í:
/dev/sda2 /boot ext2 defaults,noatime 0 2
/dev/sda3 none swap sw 0 0
/dev/sda4 / ext4 noatime 0 1
/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:
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
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
nano /etc/conf.d/net
#En la configuración estática:
config_eth0="192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255"
routes_eth0="default via 192.168.0.1"
#Si dinámica
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:
cd /etc/init.d
ln -s net.lo net.eth0
rc-update add net.eth0 default
Instalamos el client DHCP mencionado antes:
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:
emerge --ask sys-boot/grub
Instalamos los ficheros necesarios en /boot/grub
grub2-install /dev/sda
#Generamos la configuración
grub2-mkconfig -o /boot/grub/grub.cfg
Pues aunque parezca increible, ya podemos reiniciar el equipo, también es importante desmontar las unidades:
exit
cd
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount /mnt/gentoo{/boot,/sys,/proc,}
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 ^.^