Posts better-initramfs (Dropbear + LVM + LUKS) setup
Post
Cancel

better-initramfs (Dropbear + LVM + LUKS) setup

Desde hace años que uso better-initramfs en todos los sistemas que necesiten un initramfs y es que como su nombre anuncia, es mejor que todas las alternativas IMO (mkinit, genkernel, dracut…etc). Es rápido, tiene soporte para lvm, luks, dropbear! y encima es totalmente independiente del kernel!, una vez ‘compilado’ te puedes olvidar (cuidado con los 0days de Dropbear)… todo ventajas. Esta es mi configuración para un servidor con LVM on LUKS en un SSD.


Instalación desde git

# cd /opt
# git clone https://bitbucket.org/piotrkarbowski/better-initramfs.git

La compilación la hace en un chroot por lo que hace falta hacerlo como root!

# cd better-initramfs
# bootstrap/bootstrap-all
# make prepare

Shell remota (Opcional)

Antes de crear la imagen tenemos que añadir las claves públicas que tendrán acceso.

# cp /rutal/a/.ssh/authorized_keys /opt/better-initramfs/sourceroot

Crear e instalar la imagen

# make image
# cp /opt/better-initramfs/output/initramfs.cpio.gz /boot

Entrada de GRUB

better-initramfs es muy flexible y soporta muchísimas configuraciones, en la página oficial están explicadas al detalle todas las opciones. Es importante consultar la documentación oficial pues algunos parámetros pueden cambiar con el tiempo o dejar de existir (eg luks_trim ya no existe).

Editamos el fichero /etc/grub.d/40_custom y añadimos una nueva entrada, en mi caso queda así:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry 'Gentoo Linux 4.17.7 (better-init)' --class gentoo --class gnu-linux --class gnu --class os {
	load_video
	insmod gzio
	insmod part_msdos
	insmod fat
	set root='hd2,msdos1'
	search --no-floppy --fs-uuid --set=root 2ACF-01EF
	echo	'Loading Linux 4.17.7 ...'
	linux	/vmlinuz-4.17.7-gentoo \
	root=/dev/mapper/vg1-root ro lvm luks sshd\
	binit_net_if=eth3 binit_net_addr=10.0.0.242/24\
	binit_net_gw=10.0.0.1\
	enc_root=UUID=ca098a60-f942-43be-9138-bcb06922211f\
	rootfstype=ext4 
	echo	'Loading initial ramdisk ...'
	initrd	/initramfs.cpio.gz
}

La mayoria de líneas se pueden copiar descaradamente de las entradas que genera GRUB automáticamente!

Básicamente las únicas dos líneas en las que estamos interesados son la del kernel (linux ...), a la que se le pasan todos los parámetros y el initrd que debe apuntar a la imagen creada anteriormente (aparte del título, los echo y demás pijadas).

root= : partición con la raiz (/).
lvm : escanea los discos en busca de volúmenes.
enc_root=UUID=... : especifica el UUID de la partición cifrada.
luks : indica que queremos hacer luksOpen en enc_root.
ro : monta la raiz en read-only.
binit_net_if binit_net_addr binit_net_gw : interfaz, dirección y gateway que queremos usar.
sshd : ejecutar el servidor ssh para poder introducir la clave de forma remota.
rootfstype : el formato de la partición raíz.

Montamos /boot si está en otra partición y regeneramos el grub.cfg.

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

Cambiar el orden de las entradas de GRUB (Opcional)

El número delante de los ficheros en /etc/grub.d especifica el orden en el que son procesados, para que la entrada personalizada sea seleccionada por defecto, basta con mover el fichero 40_custom editado anteriormente y regenerar grub.cfg.

# mv /etc/grub.d/40_custom /etc/grub.d/05_better-initramfs
# grub-mkconfig -o /boot/grub/grub.cfg

Fuentes:

better-initramfs

OLDER POST NEWER POST

Comments powered by Disqus.

Search Results