En esta publicación leerás un poco sobre mi extraña investigación durante la baja por enfermedad forzada. Se tratará de varias cosas a la vez, que no son "mejores prácticas", ¡sino que también son posibles! Así que aquí hay un tutorial sobre cómo instalar Archlinux (mi distribuidor favorito) para que:
- sin un / boot separado (solo en / root)
- / en lvm
- lvm dentro del contenedor luks
- con UEFI
- en una maquina virtual
con arranque seguro ("difícil" en la máquina virtual es poco probable que tenga éxito)
Cabe señalar que todo se cifrará, excepto la partición del sistema EFI con un solo archivo grubx64.efi, una aplicación EFI para ejecutar grub.
Si estás interesado, ¡bienvenido a cat!
Primero, configuré todo en mi laptop Lenovo X240, luego para escribir un artículo usé una máquina virtual con OVMF en Proxmox.
Configuración del banco de pruebas:
Todo se crea de manera bastante estándar. La imagen usa mi arco favorito, que siempre se puede descargar desde
Yandex .
A continuación, algunos puntos en lo virtual en Proxmox con respecto a UEFI. Para probar el funcionamiento del soporte con UEFI (de lo contrario, no será tan interesante), debe configurar OVMF en lugar de SeaBIOS en las propiedades de la máquina virtual:

A continuación, agregue el disco UEFI en consecuencia, para obtener algo como esto:

Ahora podemos iniciar la máquina virtual y comenzar el proceso de instalación. En la consola de la máquina virtual, inicie inmediatamente el servicio sshd, establezca la contraseña de root y descubra la dirección dhcp de la máquina virtual:

A continuación, podemos seguir trabajando en ssh para que sea más conveniente.
Diseño del disco
Entonces, después de habernos conectado a través de ssh, primero establecemos el tiempo para que luego no resulte que los sistemas de archivos se creen en el futuro:
timedatectl set-ntp true && timedatectl set-timezone Europe/Moscow
Comprueba que todo está correcto:
root@archiso ~
Ahora podemos comenzar a particionar el disco. En esta etapa, tengo una unidad / dev / vda, como Controlador Virtio y esto es solo un disco vacío sin una tabla de particiones:
root@archiso ~
Lo dividiremos en 2 particiones:
- disco fat32 para aplicaciones UEFI (EFI_system_partition)
- Contenedor LUKS con todo lo demás
Use gdisk para crear el GPT:
root@archiso ~
A continuación, cree la primera partición para EFI con el tipo EF00 (Partición del sistema EFI):
Command (? for help): n Partition number (1-128, default 1): First sector (34-31457246, default = 2048) or {+-}size{KMGTP}: Last sector (2048-31457246, default = 31457246) or {+-}size{KMGTP}: +512M Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): <b>EF00</b> Changed type of partition to 'EFI System'
Ahora cree una partición para LUKS, donde ni siquiera nos molestemos con el tipo y lo dejamos como está:
Command (? for help): n Partition number (2-128, default 2): First sector (34-31457246, default = 1050624) or {+-}size{KMGTP}: Last sector (1050624-31457246, default = 31457246) or {+-}size{KMGTP}: <b>Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to 'Linux filesystem'</b>
Anotaremos los cambios y terminaremos con el marcado de partición:
Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/vda. The operation has completed successfully.
Crear un contenedor LUKS y sistemas de archivos
Con la primera sección (vda1), todo es bastante simple. Solo necesitamos formatearlo y por ahora eso es todo:
root@archiso ~
La segunda partición es el contenedor que primero debe preparar. Formateamos la partición a través de cryptsetup y establecemos la frase de contraseña:
root@archiso ~
*** No me molesté con la elección de los cifrados, con la aleatorización sobrescrita con urandom y otros, sino que simplemente creé un contenedor predeterminado.
A continuación, abra el contenedor especificando la misma frase de contraseña:
root@archiso ~
Ahora tenemos un contenedor abierto accesible a través del mapeador de dispositivos:
root@archiso ~
Ahora podemos continuar con lvm (escribiré de manera rápida, ya que este no es un tema):
root@archiso ~
A continuación, cree los sistemas de archivos en nuestro lv:
root@archiso ~
Ahora todo esto se puede montar para instalar el sistema base. El punto de instalación será / mnt, donde comenzará la raíz de nuestro sistema futuro:
[root@archiso ~]
*** / boot / efi creo para que / boot permanezca en / dev / mapper / rootvg-root, y la carpeta efi ya esté montada en / dev / vda1 (partición fat32 efi): [root@archiso ~]
Verifique los puntos de montaje actuales (siempre útiles):
[root@archiso ~]
Como vemos, todo es honesto y ahora es el momento de poner el arco en sí.
Instalación del sistema base
Instale los paquetes base de los conjuntos base y base-devel usando el paquete pacstrap (puede poner todo lo que quiera y además de esto):
pacstrap /mnt base base-devel
Todo arrancó perfectamente, el sistema base está listo. Naturalmente, eliminé la conclusión. Ahora podemos configurar este mismo sistema para arrancar y trabajar.
De las cosas básicas, generamos inmediatamente fstab:
genfstab -pU /mnt >> /mnt/etc/fstab
A continuación, haga arch-chroot en este nuevo sistema:
[root@archiso ~]
*** arch-chroot es una utilidad muy útil, porque hace todo por sí mismo. Aunque siempre puede usar el chroot estándar, antes de hacer esto, siga las instrucciones en el manual de gentoo wiki.gentoo.org/wiki/Handbook : AMD64 / Installation / Base sección "Montaje de los sistemas de archivos necesarios"Configure inmediatamente la hora del sistema y el nombre de host:
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime && \ hwclock --systohc && \ echo luks-test > /etc/hostname
Establezca la contraseña de root:
[root@archiso /]
Descomente las configuraciones regionales requeridas en /etc/locale.gen:
[root@archiso /]
Los generaremos:
[root@archiso /]
Inmediatamente configúrelos para el sistema y la consola:
[root@archiso /]
Ahora configure el archivo /etc/mkinitcpio.conf, que es responsable de las opciones, enlaces, etc. al generar initramfs:
vi /etc/mkinitcpio.conf
Lo más importante son los ganchos y su orden:
HOOKS=(base udev autodetect modconf block keymap encrypt lvm2 resume filesystems keyboard fsck)
*** reanudar el enlace para iniciar el sistema después de hibernar desde el intercambio. En una máquina virtual no es necesaria. Lo copié de haya.Ahora podemos generar initramfs:
[root@archiso /]
Ahora que tenemos el sistema, necesitamos instalar el gestor de arranque. Mi elección recayó en grub (2), porque es de alguna manera más familiar y bastante fácil de cargar el núcleo desde una partición cifrada (bueno, o realmente no busqué otros).
Instale el paquete grub:
[root@archiso /]
Antes de generar la configuración, edite las opciones predeterminadas de grub:
vim /etc/default/grub
aquí necesita descomentar una línea importante (sin comentarios, por supuesto):
y agregue (está vacío por defecto) a GRUB_CMDLINE_LINUX:
GRUB_CMDLINE_LINUX="cryptdevice=UUID=5ad7c9ad-fb17-4839-925e-479432516c07:container"
UUID que tomé de blkid:
[root@archiso /]
Generamos una configuración para grub:
[root@archiso /]
A continuación, instale grub en el disco:
[root@archiso /]
*** puede agregar --recheck --debug, especificar la arquitectura ... pero ... realmente funciona por sí solo)Ahora editaremos / etc / crypttab para que el propio sistema sepa que al cargar es necesario descifrar la sección LUKS. Agrega la línea:
echo "container /dev/vda2 none" >> /etc/crypttab
Lo que significa que debe solicitar una contraseña (ninguna) para la partición / dev / vda2 y presentarla ya como contenedor a través del mapeador de dispositivos.
Ahora estamos listos para salir de chroot y reiniciar el sistema:
[root@archiso /]
Ahora pasemos a la consola de la máquina virtual para ver el resultado:

En esta etapa, comenzamos la aplicación EFI /boot/efi/EFI/arch/grubx64.efi con / dev / vda1, que nos pide una contraseña para descifrar nuestro contenedor.
Luego, después de ingresar la contraseña:

Aquí está la ventana grub familiar con nuestras opciones de arranque desde /boot/grub/grub.cfg.
En este punto, grub descifró nuestro contenedor y obtuvo acceso a este archivo en sí (/boot/grub/grub.cfg), el kernel e initramfs. Después de seleccionar la opción, el núcleo se iniciará por defecto, initramfs:

Activamente, el kernel apareció con el gancho de cifrado, que nuevamente nos pide la contraseña para descifrar el contenedor (en general, debe ingresar la contraseña 2 veces, pero puede suceder que cree 2 contenedores para el arranque y la raíz por exceso de paranoia :)
Y luego, después de que el sistema esté completamente cargado:
PD: para aumentar el nivel de esquizofrenia, solo el arranque seguro no es suficiente para firmar nuestro gestor de arranque grubx64.efi.
Me pareció poco interesante simplemente poner el kernel e initramfs en / dev / vda1, como ya lo hice 100 veces. Otros cargadores de arranque como SHIM, bootctl, etc. no saben cómo hacer esto (bueno, si no lo sé, díganos en los comentarios)
Materiales útiles sobre el tema y materiales utilizados.