tutoriales_void/Chroot.md

16 KiB
Raw Blame History

GUÍA CHROOT VOID LINUX

Autores

Telegram

  • @tenshalito Tuxliban Torvalds
  • @lumaro Luis

1. Introducción

El método de instalación mediante chroot en lugar de la instalación por defecto mediante el menú basado en ncurses, nos aportará un mayor control sobre los paquetes y configuración que se instalarán en nuestro sistema.

Chroot o Change root es una utilidad de Unix empleada principalmente para crear un nuevo entorno conocido como "jaula chroot", separado lógicamente del directorio raíz del sistema principal. Uno de los usos principales del enjaulamiento es crear un sistema Linux independiente encima del sistema huesped que se utiliza para llevar a cabo esta tarea. Explicado y expuesto el método, se expondrá la medología para realizar este tipo de instalación montando la jaula Chroot desde distintas fuentes para adquirir nuestro sistema.

Void permite al usuario poder instalar el sistema a través de dos métodos siguiendo la metodología de chroot. El primero es realizarlo utilizando el gestor de paquetes XBPS y descargar el sistema base y paquetes apoyándose de un sistema host (Glibc o Musl) y el segundo método es hacerlo descomprimiendo un tarball de ROOTFS obteniendo un sistema host que permita ingresar a una jaula chroot. Un tercer método, fuera del alcance de esta guía es compilando desde fuentes todo el sistema mediante XBPS-SRC, instalación más compleja que merece una guía a parte.

Antes de comenzar el proceso de instalación, debemos fijarnos si el comando se debe ejecutar como root, precedido de #, o bien como usuario del sistema, precedido por $. Aclarado esto, estamos preparados para abordar la instalación.


2. Preparar el sistema de archivos

Antes de comenzar con la instalación del sistema, es necesario llevar a cabo el proceso de particionamiento del disco. En nuestro caso nos apoyaremos de crear las particiones de la herramienta cfdisk que está incluída en las ISOs que distribuye Void.

Para nuestro ejemplo consideraremos que el sistema estará compuesto de cuatro particiones:

  1. /boot
  2. /
  3. /home
  4. swap

Ante cualquier duda sobre qué tamaño asignar a la partición swap, en este link podrán ver algunas recomendaciones.

NOTA: En sistemas de arranque UEFI será necesario contar con una partición de por lo menos unos 200 MB y estar formateada en FAT32. Procedemos a formatear las particiones:

# mkfs.vfat /dev/sdaX ← Partición para /boot

# mkfs.ext4 /dev/sdaY ← Partición para /

# mkfs.ext4 /dev/sdaZ ← Partición para /home

# mkswap /dev/sdaW ← Partición para swap


3. Crear punto de montaje para el nuevo sistema de archivos (raíz)

Dado que esta guía se basa en el supuesto de que la tabla de particiones es tipo GPT, entonces será necesario de un punto de montaje especial para el sistema EFI. Para ello montaremos primero la partición que se ha designado para el sistema raíz:

# mount /dev/sdaY /mnt

Crear el punto de montaje para el sistema EFI y montar la partición

# mkdir -p /mnt/boot/efi
# mount /dev/sdaX /mnt/boot/efi

Activar el área de intercambio (swap)

# swapon /dev/sdaW

Montar la partición que se ha designado para el home del usuario:

# mount /dev/sdaZ /mnt/home

4. Instalación del sistema

Como se mencionó anteriormente, Void Linux puede instalarse mediante chroot siguiendo dos métodos: a través de XBPS descargando el sistema del repositorio o descomprimiendo un tarball que ya contiene un sistema base.

4.1 XBPS

Si escogió este método, tendrá que elegir el mirror más cercano a usted. Para ver cuáles están disponibles consulte este artículo

NOTA: Si desea instalar la versión de Void + Glibc, añadir al final del mirror seleccionado /current; si desea instalar la versión de Void + Musl añadir al final del mirror seleccionado /current/musl. Cabe mencionar que Musl es una implementación de libc que se esfuerza por ser liviana, rápida, simple y correcta. Void admite oficialmente musl al usarlo en su base de código para todas las plataformas de destino (aunque los paquetes binarios no están disponibles para i686). Además, todos los paquetes compatibles de los repositorios oficiales están disponibles con binarios vinculados a musl además de sus equivalentes glibc. En caso de que opten por instalar la versión compilada para musl, tener en cuenta, que algunos binarios de los repositorios non-free, no estarán disponibles para esta versión, por lo tanto si busca una mejor compatibilidad se recomienda altamente instalar la versión con glibc. Por ejemplo si desea utilizar los drivers privativos de Nvidia.

Para comenzar a descargar el sistema, es necesario indicarle a XBPS qué arquitectura se necesita, es decir x86_64, x86_64-musl o para i686. ¡Claro, Void Linux también da soporte para arquitecturas de 32 Bits!

Dependiendo de la aquitectura que haya elegido y tomando como ejemplo que se seleccionó el mirror de Alemania, proceder del siguiente modo:

  1. Para la versión con glibc:

    export XBPS_ARCH=X86_64 && xbps-install -S -R https://alpha.de.repo.voidlinux.org/current - r /mnt base-minimal grub-x86_64-efi

  2. Para la versión con musl:

    export XBPS_ARCH=X86_64 && xbps-install -S -R https://alpha.de.repo.voidlinux.org/current/musl - r /mnt base-minimal grub-x86_64-efi

NOTA 1: Void Linux provee al usuario de tres opciones para tomar como base la construcción del sistema:

  1. base-minimal: Metapaquete con las herramientas mínimas para el sistema
  2. base-system: Metapaquete del sistema base que viene con las ISO's que provee Void
  3. base-voidstrap: Conjunto de herramientas necesarias para crear contenedores o jaulas chroot

NOTA 2: Si se instaló el paquete base-minimal, quizá desee instalar algunos paquetes extras para que el sistema funcione correctamente, es decir, paquetes que brinden funciones como soporte de wifi, detección de periféricos, etc.

NOTA 3: Algunas de las funciones que desearía habilitar si optó por el paquete base-minimal se consigue instalando paquetes como los siguientes:

  • nano/vim - editor de texto cli de su preferencia
  • less paginador de archivos de texto
  • man-pages manuales
  • e2fsprogs Utilidades de sistema de archivos para ext2, ext3 y ext4
  • procps-ng Utilidades para monitorizar el sistema y sus procesos (free, pkill, top, etc)
  • pciutils Conjunto de programas para enumerar dispositivos PCI (lspci)
  • usbutils Utilidades para mostrar información de buses USB (lsusb)
  • iproute2 Programas para redes básicas y avanzadas en IPV4 (ip, bridge, ifstat,etc)
  • util-linux Diversos programas de utilidad (blkid, dmesg,kill, mkfs, mount, etc)
  • kdb fuentes de consola y utilidades de teclado (setfont, fgconsole, loadkeys, etc)
  • wifi-firmware - Metapaquete con driver para tarjetas ipw2100, ipw2200, zd1211
  • ethtool utilidades para controlar controladores y hardware de red
  • kmod utilidades para cargar módulos del núcleo (depmod, lsmod, modprobe, etc)
  • traceroute - Rastrea la ruta tomada por los paquetes a través de una red IPv4 / IPv6
  • iputils - Utilidades útiles para redes Linux (incluido ping)

NOTA 4: Al instalar base-system tener en cuenta que se tiene menos control de los paquetes instalados para el sistema ya que de manera predeterminada instala los metapaquetes linux, linux-firmware, wifi-firmware, además de un paquete que no es de mucha utilidad: void-artwork Por lo tanto, con una instalación mínima es posible escoger qué paquetes realmente necesita y no tener en el sistema paquetes que nunca utilizará (linux-firmware-amd linux-firmware-nvidia linux-firmware-intel ipw2100-firmware ipw2200-firmware zd1211-firmware) o una versión de kernel que reemplazará después.

4.2 Tarball rootfs

Descargar del siguiente link la versión que desea instalar: glibc o musl.

NOTA: Para la arquitectura de i686 no está disponible una versión con musl

Una vez seleccionado el tarball proceder a descomprimirlo en la partición que será asignda para el directorio raíz:

# tar xpf <ROOTFS_VERSIÓN>.tar.xz --xattrs-include='*.*' --numeric-owner

5. Configuración

A partir de estos pasos y exceptuando las instalación base del sistema usando un tarball, la metodología aplicará a ambos métodos, tanto para XBPS como para ROOTFS.

5.1 Configurar jaula chroot

Montar los siguientes directorios para el correcto funcionamiento de la jaula chroot:

# mount --rbind /sys /mnt/sys && mount --make-rslave /mnt/sys
# mount --rbind /dev /mnt/dev && mount --make-rslave /mnt/dev
# mount --rbind /proc /mnt/proc && mount --make-rslave /mnt/proc

También será necesario copiar el fichero resolv.conf del sistema anfitrión ya que contiene la configuración de DNS necesarios para que XBPS descargue los paquetes más recientes dentro de la jaula recien creada:

# cp /etc/resolv.conf /mnt/etc

Se procede a ingresar a la jaula chroot y para mayor comodidad se cambia el prompt para recordarnos que lo estamos usando. Así mismo, se establece a bash como shell de trabajo durante la instalación y configuración,

# PS1='(chroot) # ' chroot /mnt/ /bin/bash

5.1.1 Instalación de sistema (ROOTFS)

Debido a que los tarball no tienen una fecha de publicación reciente, suelen estar desactualizados, por lo que una vez que se ha estraido el contenido en la partición que se utilizará como directorio raíz, hay que proceder a actualizar los paquetes:

# xbps-install -u xbps
# xbps-install -Su

5.2 Configuración de la instalación

Crear el hostname para la nueva instalación:

# echo HOSTNAME > /etc/hostname

Editar el fichero rc.conf del sistema que se está configurando. Para que el sistema lea esas configuraciones será necesario eliminar '#' que está al inicio de cada una de las lineas respectivas. Para llevar a cabo esta tarea, utilice el editor VI que viene incluído en el chroot.

# vim /etc/rc.conf
	HOSTNAME="foo"
	HARDWARECLOCK="UTC"
	TIMEZONE="America/Mexico_City" <-- Ejemplo para México / "Europe/Madrid" <-- Ejemplo para España
	KEYMAP="la-latin" <-- Distribución de teclado para español latinoamericano / "es" <-- Distribución para español

Para conocer más zonas horarias (TIMEZONE) liste las ubicaciones con:

# ls -l /usr/share/zoneinfo/

Como se darán cuenta mostrará directorios con los continentes disponibles, por lo que deben de ubicar la ruta completa para reemplazarla en el ejemplo que se muestra arriba.

La distribución de teclado para las consolas virtuales en español España se añade reemplazando la-latin por es.

NOTA: Si se optó por instalar la versión de Void con glibc, hay que editar el fichero /etc/default/libc.locales y descomentar quitando el símbolo # del entorno de locales que desee. Se recomienta altamente utilizar las opciones UTF.

LANG=es_MX.UTF-8 <-- Configuración para México	
LANG=es_ES.UTF-8 <-- Configuración para España

Generar los archivos locales (sólo para glibc)

# xbps-reconfigure -f glibc-locales

5.3 Crear la contraseña para la cuenta de root

# passwd

5.4 Establecer permisos para la cuenta de root

# chown root:root /
# chmod 755 /	

5.5 Configurar el fichero fstab

El fichero fstab (File System TABle) es el encargado de montar las particiones en cada inicio del sistema. Su configuración inicial se puede generar tomando como base las particiones que se tengan montadas en el fichero /proc/monts, así que se procederemos a copiar dicho fichero en nuestra jaula chroot:

# cp /proc/mounts /etc/fstab

NOTA: Una vez que se ha copiado el fichero hay que editarlo y eliminar las líneas que hacen referencia a proc, sys, devtmpfs y pts.

Con ayuda de la herramienta blkid podremos identificar el UUID de cada una de las particiones que serán parte de nuestro sistema. Ejecutamos el programa así:

# blkid

Si tiene más de un disco duro conectado, entonces especificar cuál es el que se desea analizar. Por ejemplo:

# blkid /dev/sda
# blkid /dev/sdc

El sistema devolverá algo parecido a esto:

/dev/sda1: UUID="7EE1-A537" TYPE="vfat" PARTLABEL="EFI" PARTUUID="b35386b0-30d8-4d9d-9bc1-b02e78a2c708"
/dev/sda2: UUID="39b09ece-b3c5-4d72-b8a2-7f1611504820" TYPE="ext4" PARTLABEL="GRUB" PARTUUID="824a24e5-5795-4a98-9977-1e534e480fa6"
/dev/sda3: UUID="b7c453a3-332b-4feb-9e57-29a3c08f6fb5" TYPE="ext4" PARTLABEL="tmp" PARTUUID="12e852ce-79cc-4447-a8a0-d93c41b1967a"
/dev/sda4: UUID="95abee86-9bcf-40d6-83bd-2afd30e78e90" PARTLABEL="swap" PARTUUID="e4f25f1c-f74b-487b-9413-0f43a1ac1a99"

Ahora que ya se conoce la UUID de cada una de las particiones reemplazarlas en nuestro fstab para que quede de la siguiente manera:

# <UUID>                                        <dir>		<type>		<options>		     <dump>  <pass>
UUID=39b09ece-b3c5-4d72-b8a2-7f1611504820   	/            	ext2        	defaults	            	0       1	# Partición raíz
UUID=7EE1-A537                                  /boot/efi    	vfat        	defaults               		0       2	# Partición de arranque
UUID=b7c453a3-332b-4feb-9e57-29a3c08f6fb5       /home        	ext4        	defaults               		0       2	# Partición home
UUID=95abee86-9bcf-40d6-83bd-2afd30e78e90       none         	swap        	sw		                0       0	# Área de intercambio
tmpfs			    			/tmp		tmpfs	     	defaults,nosuid,nodev  		0	0	# Sistema de archivos virtual para almacenar archivos en memoria RAM

Al configurar el fstab (File System TABle), es necesario asignar el valor de 1 para la entrada de la partición del directorio raíz (columna pass) y asignar un 2 para las demás particiones exeptuando a la partición swap y para tmpfs (ver más detalles aquí)

La ventaja de configurar el fstab de este modo es que las particiones serán detectadas por el sistema incluso si tuvieran un nombre y se les modificara más adelante.


6. Instalación del kernel

Si no eligió instalar el paquete base-system entonces puede continuar con este paso, de lo contrario omitirlo y continuar con el siguiente punto ya que el paquete base-system ya incluye un kernel.

# xbps-install linuxX.XX dracut

NOTA: Si compilará módulos para el kernel entonces también será necesario instalar los headers de la misma versión del kernel que desee:

# xbps-install linux-headersX.XX

Reemplazar X.XX por la serie del kernel que desea instalar

6.1 Configurar archivos de arranque

# xbps-install -f linuxX.XX

7. Instalación de GRUB

Usar el comando grub-install para instalar GRUB en el disco de arranque:

# xbps-install grub-x86_64-efi
# grub-install --bootloader-id="Void"

8. Finalización

Utilice el comando xbps-reconfigure para asegurar que todos los paquete que se han instalado han sido configurados apropiadamente:

# xbps-reconfigure -fa

El comando anterior hará que dracut genere un initramfs el cual hará que grub genere una configuración de trabajo. En este punto la instalación del sistema ya está completa, por lo que lo único que resta es salir de la jaula chroot y reiniciar el sistema:

# exit
# shutdown -r now

9. Referencias