Instalar ArchLinux cifrando el disco con dm-Crypt y LUKS – Parte II – Sistema base

Publicado: diciembre 9, 2013 en BootLoader, FileSystem, Seguridad, System
Etiquetas:, , , , , , ,

archlinux-vert-dark-grad1

En el artículo anterior, realizamos el particionado del sistema de archivos, cifrando los volúmenes. Utilizamos LVM para crear volúmenes virtuales y LUKS para cifrarlos. Ahora, continuemos con la instalación.

Lo siguiente que debemos hacer, una vez particionado y formateado el disco, será indicar los puntos de montaje. Para comprender mejor cómo es la jerarquía del sistema de archivos en ArchLinux, podéis leer esto.

Bastará montar las particiones, formando la estructura del sistema de archivos, por ejemplo, a partir de /mnt:

# Primero montamos el /
mount /dev/mapper/root /mnt
# Creamos los puntos de montaje
mkdir /mnt/boot
mkdir /mnt/home
# Montamos el resto de particiones
mount /dev/sda2 /mnt/boot
mount /dev/mapper/home /mnt/home

Una vez hecho esto, podemos proceder a instalar el sistema base. Para ello, vamos a utilizar el script pacstrap, que nos permite instalar la paquetería, indicando que nuestro directorio raíz comienza en un lugar diferente a /:

pacstrap /mnt base base-devel grub

Una vez terminado el proceso, tendremos nuestro sistema base instalado. Toca configurar el nuevo sistema.

Para definir los puntos de montaje, bastará ejecutar:

genfstab -U /mnt > /mnt/etc/fstab

Al utilizar -U, indicamos que se utilicen los identificadores UUID. Es recomendable utilizar estos identificadores porque, en caso de utilizar los nombres de dispositivo (/dev/sda, /dev/sdb…) pueden presentarse problemas si añadimos más discos al sistema, sobre todo, si mezclamos discos ATA y SATA. Unas veces será /dev/sda el primer ATA y, otras, el primer SATA. Esto hará que nuestro sistema no pueda arrancar y, además, será aleatorio.

Ahora, debemos dar un nombre a nuestra máquina. Esto se hace creando o editando /etc/hostname, y añadiendo el nombre correspondiente:

echo nombre_máquina > /mnt/etc/hostname

Vamos a establecer el idioma. Primero, crearemos los archivos necesarios:

echo LANG=es_ES.utf-8 > /mnt/etc/locale.conf
echo KEYMAP=es > /mnt/etc/vconsole.conf

Para el resto de la configuración, vamos a acceder al nuevo sistema mediante chroot. Éste es un comando que nos permite indicar al sistema que, a partir de ese momento, el directorio raíz empieza en un directorio diferente. Como es necesario crear dispositivos y realizar otras tareas, vamos a hacerlo con el script arch-chroot, que hará esas cosas por nosotros:

arch-chroot /mnt
loadkeys es

Antes generamos los archivos para el idioma pero, todavía, no hemos generado los locales. Editados el /etc/locale.gen y descomentamos los correspondientes, podemos utilizar nano, debiendo quedar así:

Generamos los locales:

locale-gen

Si no está el sistema en nuestro idioma, ejecutados:

export LANG=es_ES.utf-8

Debemos especificar nuestro uso horario. Para ello, bastará crear un link al archivo correspondiente. Estos archivos se encuentran en /usr/share/zoneinfo. En nuestro caso:

ln -s /usr/share/zoneinfo/Europe/Madrid /etc/localtime

Se recomienda, y es así por defecto en Arch Linux y otras muchas distribuciones, que configuremos el reloj del sistema en modo UTC. En caso de tener otro sistema instalado, ambos deberán tener la misma configuración.

hwclock --systohc --utc

Para la red, podemos utilizar netctl, que es el gestor de red de Arch Linux. Otro gestor de red que podemos utilizar es NetworkManager. Éste último está muy bien y dispone de herramientas gráficas para su configuración, además está integrado en los escritorios GNome y KDE.

pacman -Syu networkmanager
systemctl enable NetworkManager

En el caso de no disponer de conexión cableada, deberemos utilizar netctl para disponer de conexión al iniciar el sistema. Para identificar el nombre de la interfaz de red, ejecutamos:

iwconfig
# Nos devuelve las interfaces y nos informa si son wireless o no.
wifi-menu -o nombre_interfaz
# Genera un perfil para netctl en /etc/netctl

Si vamos a utilizar, una vez instalado el sistema un gestor de red diferente, cuando iniciemos el sistema, tan solo debemos levantar la red, ejecutando:

netctl start <nombre_perfil>

En caso contrario, podemos utilizar los servicios automáticos que nos proporciona netctl. Para ello instalaremos los siguientes paquetes:

pacman -S ifplugd wpa_actiond

El perfil creado por wifi-menu incluye un (guión) en el nombre, es necesario cambiarlo. Para que se inicie:

systemctl enable netctl-auto@nombre_perfil.service

Si no se iniciara automáticamente, comprobamos que, en el perfil, la variable Security está establecida a wpa-configsection. Si, aún así, no se inicia automáticamente, añadiremos la variable ExcludeAuto con el valor yes.

Los drivers propietarios no se instalan por defecto. Si nuestra tarjeta los necesita, debemos instalarlos. En caso contrario, no tendremos red al iniciar y habrá que arrancar con el medio de instalación para instalarlos. Un ejemplo para las Broadcom, con driver propietario, disponible en el AUR sería:

# Instalamos wget
pacman -S wget

# Descargamos e instalamos el paquete
wget https://aur.archlinux.org/packages/br/broadcom-wl-dkms/broadcom-wl-dkms.tar.gz
tar zxvf broadcom-wl-dkms.tar.gz
cd broadcom-wl-dkms
makepkg -si
cd ..
rm -r broadcom-wl-dkms.tar.gz

# Habilitamos dkms
systemctl enable dkms
systemctl start dkms

Ahora mismo, solo existe un usuario en el sistema: El usuario root. Debemos asignarle una contraseña:

passwd

Ya tenemos el sistema con la configuración inicial. Vamos a instalar el gestor de arranque. Aquí debemos tener en cuenta dos cosas:

  • El disco RAM inicial, que se encarga de la detección de dispositivos al iniciar el sistema, debe contener lo necesario para acceder a volúmenes LVM y cifrados.
  • Configurar GRUB para que pase los argumentos necesarios al kernel.

Para el disco RAM inicial, editados el archivo /etc/mkinitcpio.conf y, en la lista de hooks, debemos especificar lvm2 y encrypt antes de filesystems:

HOOKS="base udev autodetect modconf block keyboard lvm2 encrypt filesystems fsck"

El hook keyboard debe estar antes de encrypt, para que esté el teclado presente antes de que se pida la contraseña.

Generamos la imagen:

mkinitcpio -p linux

Vamos a por el GRUB. Editados el /etc/default/grub. En la línea GRUB_CMDLINE_LINUX_DEFAULT, especificamos:

GRUB_CMDLINE_LINUX_DEFAULT="cryptdevice=/dev/Datos/rootvol:root quiet"

Creamos el menú:

grub-mkconfig -o /boot/grub/grub.cfg

En el caso de que nos lanzase los siguientes errores:

error: syntax error.
error: Incorrect command.
error: syntax error.

Añadimos al final del /etc/default/grub la siguiente línea:

GRUB_DISABLE_SUBMENU=y

Y volvemos a generar las entradas del menú, con el comando anterior.

Instalamos el GRUB:

grub-install --recheck /dev/sda

Aunque, al estar el sistema cifrado, no sea de vital importancia, es recomendable proteger también GRUB. En este artículo, María José nos cuenta cómo hacerlo, os recomiendo leerlo.

Ya está la instalación base hecha. Nos falta crear los KEY-files para que se monten automáticamente el home y swap:

dd if=/dev/random of=/etc/home.key bs=512 count=4
dd if=/dev/random of=/etc/swap.key bs=512 count=4
cryptsetup luksAddKey /dev/mapper/Datos-homevol /etc/home.key
cryptsetup luksAddKey /dev/mapper/Datos-swapvol /etc/swap.key

Creamos el archivo /etc/crypttab con el siguiente contenido:

home           /dev/mapper/Datos-homevol                /etc/home.key
swap           /dev/mapper/Datos-swapvol                /etc/swap.key

Reiniciemos el equipo:

exit
umont /mnt/{boot,home}
umount /mnt
reboot

Ahora, en el arranque, tras seleccionar la opción en el menú, el sistema nos preguntará por la contraseña del volumen. Una vez abierto, continuará el arranque del equipo. En el siguiente vídeo, podemos ver el proceso:

En el siguiente artículo, continuaremos con la instalación del sistema gráfico, sonido, usuarios, etc., dejando ya un sistema completo instalado.

comentarios
  1. […] Instalar ArchLinux cifrando el disco con dm-Crypt y LUKS – Parte II – Sistema base diciembre 9, 2013 […]

  2. Omar dice:

    Hola Archuser. Quise hacer la instación en modo uefi, para lo que cree la partición efi y el resto del espacio fué para el contenedor LVM. no hice la partición ef02 en este caso. Iba todo bien hasta el momento de instalar el grub con grub-install –recheck /dev/sda. Me daba un error como que no encontrada el directorio efi o algo asi. Hay algo que hice mal o en modo uefi se hace de otra forma? Saludos

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.