22 KiB
GUÍA CHROOT VOID LINUX
Autores
Telegram
- @tenshalito Tuxliban Torvalds
- @lumaro Luis
ÍNDICE
- Indroducción
- Preparar el sistema de archivos
- Crear punto de montaje para el nuevo sistema de archivos (raíz)
- Instalación del sistema
- Configuración
- Instalación del kernel
- Instalación de GRUB
- Finalización
- Referencias
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.
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 ISO’s que distribuye Void.
Para nuestro ejemplo consideraremos que el sistema estará compuesto de cuatro particiones:
- /boot
- /
- /home
- 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 el área de intercambio (swap)
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:
# mkdir /mnt/home
# mount /dev/sdaZ /mnt/home
NOTA: Después de haber montado todas las particiones que usaremos en el sistema, opcionalmente se puede exportar a texto plano cómo están distribuidas las particiones para que cuando estemos en la jaula chroot terminemos de editarlo y usarlo como nuestro fstab de forma sencilla:
# lsblk -o NAME,UUID,MOUNTPOINT,FSTYPE > /mnt/etc/fstab
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.
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 elegir la versión de Void con la libc Glibc.
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 la Unión Europea (Finlandia), proceder del siguiente modo:
-
Para la versión con glibc:
export XBPS_ARCH=x86_64 && xbps-install -S -R https://repo-default.voidlinux.org/current -r /mnt base-minimal
-
Para la versión con musl:
export XBPS_ARCH=x86_64-musl && xbps-install -S -R https://repo-default.voidlinux.org/current/musl -r /mnt base-minimal
NOTA 1: Void Linux provee al usuario de tres opciones para tomar como base la construcción del sistema:
- base-minimal: Metapaquete con las herramientas mínimas para el sistema
- base-system: Metapaquete del sistema base que viene con las ISO's que provee Void
- 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 (badbloks, blkid, fsck)
- procps-ng – Utilidades para monitorizar el sistema y sus procesos (free, pgrep, pkill, ps, sysctl, top, uptime watch, 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)
- kbd – Fuentes de consola y utilidades de teclado (setfont, fgconsole, loadkeys, etc)
- wifi-firmware - Metapaquete con driver para tarjetas ipw2100, ipw2200, zd1211
- ethtool – Utilidades para examinar 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 eficaces 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.
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 xvf <ROOTFS_VERSIÓN>.tar.xz -C /path
NOTA: Reemplazar path por la ruta que han definido para la construcción del sistema
Configuración
A partir de estos pasos y exceptuando la instalación base del sistema usando un tarball, la metodología aplicará a ambos métodos, tanto para XBPS como para ROOTFS.
Configurar jaula chroot
Montar los directorios sys dev proc para el correcto funcionamiento de la jaula chroot:
# for dir in sys dev proc; do $(mount --rbind /$dir /mnt/$dir && mount --make-rslave /mnt/$dir); done
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. Asimismo, se establece a bash como shell de trabajo durante la instalación y configuración,
# PS1='(chroot) # ' chroot /mnt /bin/bash
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 extraido el contenido en la partición que se utilizará como directorio raíz, hay que proceder a actualizar los paquetes:
# xbps-install -uy xbps
# xbps-install -Suy
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 líneas respectivas. Para llevar a cabo esta tarea, utilice el editor VI que viene incluído en el chroot. Para introducir texto presione la tecla i de insertar o la tecla a de añadir. Para salir del modo edición presione la tecla Esc
# vi /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
Una vez haya finalizado de editar, para guardar los cambios presione las teclas :wq y después la tecla Enter
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
Crear la contraseña para la cuenta de root
# passwd
Establecer permisos para la cuenta de root
# chown root:root /
# chmod 755 /
Configurar el fichero fstab
Modo avanzado
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.
Modo sencillo
Ahora procederemos a terminar de editar el fichero fstab. Como recordarán, antes de ingresar a la jaula chroot se creó un fichero en texto plano que contiene información que usaremos para definir las particiones que usará el sistema. Procedemos a abrir el fichero y a editarlo:
# vi /etc/fstab
Comenzamos añadiendo una almohadilla # al inicio de la palabra NAME para que no sea leída por el sistema y se procede a eliminar las líneas que no se utilizarán teniendo cuidado de no borrar las que se usarán para el sistema:
#NAME UUID MOUNTPOINT FSTYPE
loop0 squashfs # Eliminar línea
loop1 xxxxx /run/rootfsbase ext # Eliminar línea
sda xxxxx iso9660 # Eliminar línea
sda1 xxxxx /run/initramfs/live iso9660 # Eliminar línea
sda2 ... # Eliminar línea
sdb xxxxx # Eliminar línea
sdb1 xxxxx /mnt/boot/efi vfat
sdb2 xxxxx /mnt ext4
sdb3 xxxxx [SWAP] swap
sdb4 xxxxx /mnt/home ext4
sdb5 xxxxx xxxxx xxx
Para la creación del fichero fstab y fácil lectura nos apoyaremos de usar columnas. Para ello nos aseguraremos de tener en la primera línea los siguientes nombres: UUID MOUNTPOINT FSTYPE OPTIONS DUMP PASS y procedemos a hacer lo siguiente:
- Eliminar la columna NAME que corresponde al nombre y número de partición
- Añadir UUID= antes de la serie alfanumérica que corresponde a cada uuid
- Colocar a la partición raíz / en la parte superior
- Eliminar la palabra mnt de la columna MOUNTPOINT
- Reemplazar [SWAP] por none
- Añadir la palabra defaults en la columna OPTIONS para todas las particiones exceptuando a la partición SWAP a la cual se le añadirá
rw,noatime,discard
- En la columna PASS añadir 1 para la partición raíz; 0 (cero) para la partición swap, así como para el directorio
/tmp
; y añadir 2 para la partición/boot /home
o cualquier otra que también hayan definido - Añadir una línea adicional para montar al directorio /tmp en la ram. En la columna UUID poner
tmpfs
en lugar de UUID
Tras haber realizado lo anterior, el resultado debería verse similar a este ejemplo:
#UUID MOUNTPOINT FSTYPE OPTIONS DUMP PASS
UUID=xxxx / ext4 defaults 0 1 # Partición raíz
UUID=xxxx /boot/efi vfat defaults 0 2 # Partición sistema EFI
UUID=xxxx none swap rw,noatime,discard 0 0 # Partición swap
UUID=xxxx /home ext4 defaults 0 2 # Partición home
tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0 # Partición de tmp montada en la ram
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
NOTA: Si su sistema necesita firmware adicional, es el momento de instalarlo, en otro caso puede que el sistema no arranque correctamente por falta de dichos controladores:
# xbps-install linux-firmware-XXX
Dependiendo de su sistema, tendrá que instalar un paquete o varios, las opciones de firmware son linux-firmware-amd linux-firmware-intel linux-firmware-network linux-firmware-nvidia
Configurar archivos de arranque
# xbps-install -fy linuxX.XX
Instalación de GRUB
Usar el comando grub-install para instalar GRUB en el disco de arranque:
Para sistemas BIOS
# xbps-install -y grub
# grub-install --target=i386-pc /dev/sdX
Para sistemas EFI
# xbps-install -y grub-x86_64-efi
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id="Void"
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 cree 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
# umount -R /mnt
# shutdown -r now
Referencias
- GNU Operating System (s.f.) Installing GRUB using grub-install. Sitio web de Manual Page Search Parameters:https://www.gnu.org/software/grub/manual/grub/html_node/Installing-GRUB-using-grub_002dinstall.html
- Void Linux (2009). FSCK(8). Sitio web de Manual Page Search Parameters: https://man.voidlinux.org/fsck.8
- Void Linux (2014). CFDISK(8). Sitio web de Manual Page Search Parameters: https://man.voidlinux.org/cfdisk.8
- Void Linux (2019). XBPS-RECONFIGURE(1). Sitio web de Manual Page Search Parameters:https://man.voidlinux.org/xbps-reconfigure.1
- Void Linux (2020). Download installable base live images and rootfs tarballs. Sitio web de Download: https://alpha.de.repo.voidlinux.org/live/current/
- Void Linux (s.f.). Mirrors. Sitio web de Handbook's Void: https://docs.voidlinux.org/installation/live-images/partitions.html#swap-partitions
- Void Linux (s.f.). Partition notes. Sitio web de Handbook's Void: https://docs.voidlinux.org/installation/live-images/partitions.html#swap-partitions
- Void Linux. (2013). BLKID(8). Sitio web de Manual Page Search Parameters: https://man.voidlinux.org/blkid.8