sdm es un gestor de im谩genes de tarjetas SD para Raspberry Pi que te permite automatizar y repetir todo lo que normalmente har铆as a mano: usuarios, claves SSH, paquetes, cifrado y m谩s. En lugar de configurar cada tarjeta manualmente, personalizas una imagen base una sola vez y luego grabas tantas tarjetas id茅nticas como necesites.
En esta publicaci贸n muestro c贸mo instalar y usar sdm para crear una imagen de RaspiOS cifrada que puedes desbloquear por SSH, y luego grabarla en una tarjeta SD.
Requisitos
Para ejecutar sdm necesitas:
- La 煤ltima versi贸n de
systemd-nspawn - La imagen de RaspiOS que deseas personalizar, por ejemplo:
2025-12-04-raspios-trixie-arm64-lite.img.
Instalaci贸n
Una instalaci贸n t铆pica se ve as铆:
| |
Personalizar la imagen
Despu茅s de leer la documentaci贸n sobre Cifrado de Disco y plugins, realizo la siguiente personalizaci贸n:
| |
Este comando sdm --customize personaliza una imagen de RasPiOS Trixie ARM64 lite de la siguiente forma:
- Expande el sistema de archivos ra铆z y regenera las claves host de SSH
- Configura el swap, crea un usuario, instala una clave SSH y ajusta los par谩metros del demonio SSH
- Configura el cifrado completo del sistema de archivos ra铆z con desbloqueo SSH en initramfs y red est谩tica
- Desactiva piwiz y reinicia despu茅s de la personalizaci贸n
Desglose detallado
Par谩metros globales:
customize: Personaliza el archivo de imagen especificado.host rpi-1: Establece el nombre de host como rpi-1.plugin-debug: Habilita la salida de depuraci贸n de los plugins.expand-root: Expande el sistema de archivos ra铆z al primer arranque.regen-ssh-host-keys: Regenera las claves host SSH en el primer arranque para que cada dispositivo tenga claves 煤nicas.restart: Reinicia la imagen despu茅s de finalizar la personalizaci贸n.- Imagen objetivo:
2025-12-04-raspios-trixie-arm64-lite.img.
Plugins
swap:"filesize=2048|zramsize=1024": Configura un archivo swap de 2 GB y un dispositivo zram de 1 GB mediante el plugin de swap.user:"deluser=pi|adduser=user|uid=4321|password=12345|addgroup=sudo": Elimina el usuario por defectopi, crea un nuevo usuariousercon UID 4321, establece su contrase帽a y lo agrega al gruposudo.copyfile:"from=...|to=...|chown=user:user|chmod=600|mkdirif": Copia una clave p煤blica SSH dentro de la imagen comoauthorized_keyspara la cuenta del usuario, creando el directorio.sshsi es necesario, y ajustando los permisos.sshd:"password-authentication=yes|port=62626": Configura el daemon SSH para permitir autenticaci贸n por contrase帽a y escuchar en el puerto 62626.cryptroot:"ssh|authkeys=...|crypto=xchacha|ipaddr=...|gateway=...|netmask=...|dns=...": Configura el cifrado completo del sistema de archivos ra铆z con LUKS, habilita el desbloqueo SSH en initramfs, usa cifrado xchacha y define red est谩tica para el initramfs.network:"ifname=eth0|ipv4-static-ip=...|ipv4-static-gateway=...": Establece una IP est谩tica paraeth0en el sistema en ejecuci贸n.disables:piwiz: Desactiva el asistente de primer iniciopiwizpara que no solicite teclado ni usuario al arrancar.
Cifrar la tarjeta SD (rootfs)
Durante la personalizaci贸n invocamos el plugin
cryptroot, por lo tanto, ahora solo es necesario grabar la imagen en la tarjeta SD situada en/dev/sdb:1sudo sdm --burn /dev/sdb 2025-12-04-raspios-trixie-arm64-lite.imgPrimer arranque: se ejecuta
sdm-auto-encrypty el sistema se reinicia.- El servicio ejecuta
sdm-cryptconfig --sdm ... --reboot, que actualizainitramfs,cmdline.txt,fstabycrypttab.
- El servicio ejecuta
Segundo arranque: se abre el prompt de initramfs; ejecuta
sdmcryptfs.- El sistema cae a (initramfs). Conecta un disco auxiliar mayor al espacio usado y ejecuta:
1(initramfs) sdmcryptfs /dev/mmcblk0 /dev/sdY- Sustituye
/dev/mmcblk0por el disco del sistema y/dev/sdYpor el disco auxiliar. - Sigue las instrucciones para cifrar y desbloquear el rootfs. Luego escribe
exitpara continuar el arranque.
Arranque final: rootfs cifrado activo.
El sistema ahora pedir谩 la contrase帽a en cada inicio.
Si SSH est谩 habilitado, puedes desbloquear remotamente iniciando sesi贸n comorootal IP del initramfs durante el arranque.