initramfs, LUKS e dm_mod não podem inicializar após a atualização

2

Meu Raspberry Pi (que está a 10.000 km de distância de mim agora) funciona da seguinte maneira:

  • Ele está executando o Raspbian (versão de julho de 2016)
  • O cartão SD contém /boot
  • Uma unidade de disco rígido criptografada (usando LUKS cryptsetup ) contém /
  • Quando o Pi é inicializado, posso desbloquear o HDD remotamente usando dropbear sobre SSH. Ele pede a senha do disco rígido e depois a seqüência de inicialização continua normalmente.

Para mais informações sobre como eu fiz tudo isso, leia o link . < br> TL; DR aqui é uma versão abreviada:

apt-get install busybox cryptsetup rsync
echo "initramfs initramfs.gz 0x00f00000" >> /boot/config.txt
sed -e "s|root=/dev/mmcblk0p2|root=/dev/mapper/hddcrypt cryptdevice=/dev/sda1:hddcrypt|" -i /boot/cmdline.txt
sed -e "s|/dev/mmcblk0p2|/dev/mapper/hddcrypt|" -i /etc/fstab
echo -e "hddcrypt\t/dev/sda1\tnone\tluks" >> /etc/crypttab
cryptsetup --verify-passphrase -c aes-xts-plain64 -s 512 -h sha256 luksFormat /dev/sda1
mkinitramfs -o /boot/initramfs.gz $(uname -r)
aptitude install dropbear
// Configuring the SSH access here...
mkinitramfs -o /boot/initramfs.gz $(uname -r)
update-initramfs -u

Problema

Até ontem, tudo estava funcionando bem. Eu poderia reiniciá-lo e desbloquear o disco rígido por SSH. No entanto, ontem eu fiz aptitude update && aptitude upgrade . Tanto quanto eu sei, isso não atualiza o kernel. De qualquer forma, eu reiniciei. Agora, estou preso no passo de desbloqueio. Mesmo que eu digite a senha correta, ela diz imediatamente Can't change directory to <something/a kernel version> e Cannot initialize device-mapper. Is dm_mod kernel module loaded? e fica pedindo novamente a senha.

Eu não posso dizer a você qual kernel ele está rodando enquanto eu configurei um tempo atrás e não o uso muito.

Desculpe pela falta de detalhes, eu não tenho acesso físico ao meu Raspberry e o desliguei ontem, então estou dizendo do que me lembro.

Suposição

Tenho certeza de que poderia consertá-lo ajustando /boot/initramfs.gz , mas não sei como. Você pode me ajudar por favor? Muito obrigado.

    
por Romain Pellerin 04.12.2016 / 09:52

1 resposta

2

Eu não sei o que lhe deu a impressão de que aptitude upgrade deixaria seu kernel intacto, simplesmente não o faz. Eu tive o mesmo problema depois de uma atualização do kernel no meu pi criptografado. O problema é que o seu initramfs precisa ser reconstruído. Aqui está como você faz isso em uma máquina externa.

Primeiro, conecte seu cartão SD com o raspbian criptografado no seu computador externo e monte tudo da seguinte maneira:

cryptsetup -v luksOpen /dev/mmcblk0p2 thunderdome
mount /dev/mapper/thunderdome /mnt
mount /dev/mmcblk0p1 /mnt/boot
mount -o bind /dev /mnt/dev
mount -t sysfs none /mnt/sys
mount -t proc  none /mnt/proc

Instale o qemu para emular binários pi de framboesa:

apt-get install qemu qemu-user-static binfmt-support

Ao codificar esta essência , é melhor remover todas as linhas de /mnt/etc/ld.so.preload antes de continuar, é isso que o Os comandos sed fazem o seguinte:

# comment out ld.so.preload
sed -i 's/^/#/g' /mnt/etc/ld.so.preload
# copy qemu binary
cp /usr/bin/qemu-arm-static /mnt/usr/bin/

# chroot to raspbian and rebuild initramfs
chroot /mnt /bin/bash
    mkinitramfs -o /boot/initramfs.gz [NEW RASPBIAN KERNEL VERSION]
    exit

# undo damage
sed -i 's/^#//g' /mnt/etc/ld.so.preload
umount /mnt/{dev,sys,proc,boot}

Você pode encontrar a nova versão do kernel raspbian checando /lib/modules , dentro do chroot .

Depois de fazer isso, meu pi de framboesa começou bem novamente.

    
por 23.04.2017 / 12:10