Raspberry Pi: clúster sin disco con Ubuntu 20.04.1

Raspberry Pi: clúster sin disco con Ubuntu 20.04.1

Estoy intentando que Ubuntu 20.04 arranque sin disco en una Raspberry PI para poder ejecutar Ubuntu en un clúster.

Hasta ahora, moví las imágenes de la partición de arranque en un RPi4b instalado con Ubuntu instalado, a un servidor dnsmasq/TFTP /srv/tftpboot/<serial>/que es el predeterminado para una Raspberry Pi, actualicé el gestor de arranque y conseguí que el PI arrancara.

El registro de dnsmasq muestra los archivos que se cargan en el arranque:

/var/log/dnsmasq.log

==> /var/log/dnsmasq.log <==
Sep  6 14:25:03 dnsmasq-dhcp[4799]: 1527100745 available DHCP subnet: 192.168.254.254/255.255.255.0
Sep  6 14:25:03 dnsmasq-dhcp[4799]: 1527100745 vendor class: PXEClient:Arch:00000:UNDI:002001
Sep  6 14:25:03 dnsmasq-dhcp[4799]: 1527100745 PXE(eth0) dc:a6:32:b4:48:4f proxy
Sep  6 14:25:03 dnsmasq-dhcp[4799]: 1527100745 tags: eth0
Sep  6 14:25:03 dnsmasq-dhcp[4799]: 1527100745 broadcast response
Sep  6 14:25:03 dnsmasq-dhcp[4799]: 1527100745 sent size:  1 option: 53 message-type  2
Sep  6 14:25:03 dnsmasq-dhcp[4799]: 1527100745 sent size:  4 option: 54 server-identifier  192.168.254.254
Sep  6 14:25:03 dnsmasq-dhcp[4799]: 1527100745 sent size:  9 option: 60 vendor-class  50:58:45:43:6c:69:65:6e:74
Sep  6 14:25:03 dnsmasq-dhcp[4799]: 1527100745 sent size: 17 option: 97 client-machine-id  00:52:50:69:34:14:31:d0:00:32:b4:48:4f:f6...
Sep  6 14:25:03 dnsmasq-dhcp[4799]: 1527100745 sent size: 32 option: 43 vendor-encap  06:01:03:0a:04:00:50:58:45:09:14:00:00:11...
Sep  6 14:25:03 dnsmasq-dhcp[4799]: 1527100745 available DHCP subnet: 192.168.254.254/255.255.255.0
Sep  6 14:25:03 dnsmasq-dhcp[4799]: 1527100745 vendor class: PXEClient:Arch:00000:UNDI:002001
Sep  6 14:25:03 dnsmasq-tftp[4799]: error 0 Early terminate received from 192.168.254.253
Sep  6 14:25:03 dnsmasq-tftp[4799]: failed sending /srv/tftpboot/6b0bb1f6/start4.elf to 192.168.254.253
Sep  6 14:25:03 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/config.txt to 192.168.254.253
Sep  6 14:25:03 dnsmasq-tftp[4799]: file /srv/tftpboot/6b0bb1f6/pieeprom.sig not found
Sep  6 14:25:03 dnsmasq-tftp[4799]: file /srv/tftpboot/6b0bb1f6/recover4.elf not found
Sep  6 14:25:03 dnsmasq-tftp[4799]: file /srv/tftpboot/6b0bb1f6/recovery.elf not found
Sep  6 14:25:04 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/start4.elf to 192.168.254.253
Sep  6 14:25:05 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/fixup4.dat to 192.168.254.253
Sep  6 14:25:05 dnsmasq-tftp[4799]: file /srv/tftpboot/6b0bb1f6/recovery.elf not found
Sep  6 14:25:05 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/config.txt to 192.168.254.253
Sep  6 14:25:05 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/syscfg.txt to 192.168.254.253
Sep  6 14:25:05 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/usercfg.txt to 192.168.254.253
Sep  6 14:25:05 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/dt-blob.bin to 192.168.254.253
Sep  6 14:25:05 dnsmasq-tftp[4799]: file /srv/tftpboot/6b0bb1f6/recovery.elf not found
Sep  6 14:25:05 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/config.txt to 192.168.254.253
Sep  6 14:25:05 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/syscfg.txt to 192.168.254.253
Sep  6 14:25:05 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/usercfg.txt to 192.168.254.253
Sep  6 14:25:05 dnsmasq-tftp[4799]: file /srv/tftpboot/6b0bb1f6/bootcfg.txt not found
Sep  6 14:25:06 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/bcm2711-rpi-4-b.dtb to 192.168.254.253
Sep  6 14:25:06 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/overlays/overlay_map.dtb to 192.168.254.253
Sep  6 14:25:06 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/config.txt to 192.168.254.253
Sep  6 14:25:06 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/syscfg.txt to 192.168.254.253
Sep  6 14:25:06 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/usercfg.txt to 192.168.254.253
Sep  6 14:25:06 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/cmdline.txt to 192.168.254.253
Sep  6 14:25:08 dnsmasq-tftp[4799]: file /srv/tftpboot/6b0bb1f6/armstub8-gic.bin not found
Sep  6 14:25:08 dnsmasq-tftp[4799]: error 0 Early terminate received from 192.168.254.253
Sep  6 14:25:08 dnsmasq-tftp[4799]: failed sending /srv/tftpboot/6b0bb1f6/uboot_rpi_4.bin to 192.168.254.253
Sep  6 14:25:08 dnsmasq-tftp[4799]: sent /srv/tftpboot/6b0bb1f6/uboot_rpi_4.bin to 192.168.254.253

Normalmente, usaría un servidor NFS y actualizaría su cmdline.txt para que contenga las ubicaciones de los rootfs, de modo que una vez que se cargue initrd, pueda usar un FS raíz almacenado en la red.

No puedo encontrar mucha información sobre las opciones requeridas para Ubuntu, así que las tomé directamente de los documentos del kernel en:https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt

Entonces actualicé mi cmdline.txt en el servidor TFTP a:

cmdline.txt

net.ifnames=0 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 nfsrootdebug elevator=deadline rootwait fixrtc init=initrd.img ip=dhcp rootfstype=nfs4 root=/dev/nfs nfsroot=192.168.254.254/srv/nfs/6b0bb1f6 rw

Sólo llegué hasta la consola U-Boot. La imagen de vmlinuz no se estaba cargando, así que descomprimí mi vmlinuz-5.4.0-1016-raspi a vmlinux en mi pi instalado ejecutándose desde la tarjeta SD:

zcat /boot/vmlinuz-5.4.0-1016-raspi > vmlinux

y lo coloqué en el servidor TFTP y luego actualicé mi config.txt en la sección [todos] para utilizar la imagen descomprimida.

configuración.txt

[all]
arm_64bit=1
device_tree_address=0x03000000
enable_uart=1
cmdline=cmdline.txt
include syscfg.txt
include usercfg.txt
kernel=vmlinux
initramfs initrd.img followkernel

Me las arreglé para llegar hasta la carga initrd y los scripts de montaje de NFS no montan el recurso compartido NFS....

nfsmount: need a path
Begin: Retrying nfs mount ...

Extrayendo el initrd:

mkdir /root/initrd-expanded
cd /root/initrd-expanded
lz4 -cd /boot/initrd.img-5.4.0-1016-raspi | cpio -id

y mirando dentro del script nfs:

# NFS root mounting
nfs_mount_root()
{

    nfs_top

    # For DHCP
    modprobe af_packet

    wait_for_udev 10

    # Default delay is around 180s
    delay=${ROOTDELAY:-180}

    # loop until nfsmount succeeds
    nfs_mount_root_impl
    ret=$?
    nfs_retry_count=0
    while [ ${nfs_retry_count} -lt "${delay}" ] \
        && [ $ret -ne 0 ] ; do
        [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount"
        sleep 1
        nfs_mount_root_impl
        ret=$?
        nfs_retry_count=$(( nfs_retry_count + 1 ))
        [ "$quiet" != "y" ] && log_end_msg
    done
}

Nada llegaba al servidor NFS tcpdump port nfsy también agregaba el registro de depuración:

/etc/default/nfs-kernel-servidor

RPCMOUNTDOPTS="--manage-gids --debug all"

Parece que la ruta que se pasa a nfsroot es incorrecta... aquí es donde se vuelve un poco confuso.

El manejo de nfsroot= en una instalación de imagen base

nfsroot=192.168.254.254/srv/nfs/6b0bb1f6 -> works
nfsroot=192.168.254.254:/srv/nfs/6b0bb1f6 -> fails

Si realiza la instalación desde una tarjeta SD instalada después de realizar una actualización adecuada:

nfsroot=192.168.254.254/srv/nfs/6b0bb1f6 -> fails
nfsroot=192.168.254.254:/srv/nfs/6b0bb1f6 -> works

Fueron 5 horas las que pasé arrancándome el pelo.

No puedes (o al menos yo no pude) crear un sistema instalado con NFS de arranque a partir de las imágenes proporcionadas por Ubuntu para Raspberry PI. ¡Imagínate! Si lo intenta, obtendrá todo tipo de errores acerca de que los servicios no se inician.

Entonces, responderé mi propia pregunta.

Respuesta1

Cree un sistema completamente sin disco en Ubuntu 20.04.1 en una Raspberry PI 4b

1)Instale una RaspberryPi Lite en una tarjeta SD

2)Inicie Rpi4 con la tarjeta SD Raspberry OS, inicie sesión y ejecute lo siguiente para habilitar ssh:

cd /boot
touch ssh
reboot

3)Actualice el gestor de arranque, desde otra máquina. Si conoce la dirección IP del PI y habilitó ssh (arriba), este script establecerá el código de inicio en 0xf12, lo que significa que probará la red, la tarjeta SD y reiniciará en ese orden una y otra vez. Es posible que desee asegurarse de la versión del firmware si esta publicación envejece. También le proporcionará un archivo env que contiene la dirección serial y mac, que es útil, almacenada en un <uuid>.rpi.envarchivo.

./update-bootloader.sh <ip-address-of-the-pi> <ip-address-of-your-nfs-server>

p.ej

./update-bootloader.sh 192.168.0.254 192.169.0.254

#!/usr/bin/env bash
# update-bootloader.sh - update the boot loader for Rpi4
RPI_IP=$1
KICKSTART_IP=$2
RPI_DEFAULT_PASS="raspberry"
PI_EEPROM_DATE="2020-07-31"
PI_EEPROM_VERSION="pieeprom-${PI_EEPROM_DATE}"
PI_EEPROM_FILE="${PI_EEPROM_VERSION}.bin"
PI_EEPROM_LINK="https://github.com/raspberrypi/rpi-eeprom/raw/master/firmware/stable/${PI_EEPROM_FILE}"
UBUNTU_IMAGE_NAME="ubuntu-20.04.1-preinstalled-server-arm64+raspi.img"
UBUNTU_IMAGE_FILE="${UBUNTU_IMAGE_NAME}.xz"
UUID=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)

ssh-keygen -R ${RPI_IP}
ssh-keyscan -H ${RPI_IP} >> ~/.ssh/known_hosts
sshpass -p "${RPI_DEFAULT_PASS}" ssh pi@${RPI_IP} << EOF
if [[ -f ${PI_EEPROM_FILE} ]];then
  rm ${PI_EEPROM_FILE}
  echo 'removed eeprom file'
fi

rm *.rpi.env
echo 'removed old env'

rm bootconf.txt
echo 'removed bootconf.txt'

if [[ ! -f ${PI_EEPROM_FILE} ]];then
  wget ${PI_EEPROM_LINK}
fi

echo "extracting boot config from eeprom"
sudo rpi-eeprom-config ${PI_EEPROM_FILE} > bootconf.txt

echo "updating bootconfig"
sed -i 's/BOOT_ORDER=.*/BOOT_ORDER=0xf12/g' bootconf.txt
echo "MAX_RESTARTS=5" | sudo tee -a bootconf.txt

echo "writing eeprom"
sudo rpi-eeprom-config --out ${PI_EEPROM_VERSION}-netboot.bin --config bootconf.txt ${PI_EEPROM_FILE}

echo "updating eeprom on rpi"
sudo rpi-eeprom-update -d -f ./${PI_EEPROM_VERSION}-netboot.bin

echo "getting serial and mac"
cat /proc/cpuinfo | grep Serial | awk -F ': ' '{print \$2}' | tail -c 9 | awk '{print "RPI_SERIAL="\$1}' > ${UUID}.rpi.env
ip addr show eth0 | grep ether | awk '{print \$2}' | awk '{print "RPI_MAC="\$1}' >> ${UUID}.rpi.env
EOF

# copy the pi env back to get the serial and mac
sshpass -p "${RPI_DEFAULT_PASS}" scp -r pi@${RPI_IP}:~/${UUID}.rpi.env ~/${UUID}.rpi.env

sshpass -p "${RPI_DEFAULT_PASS}" ssh pi@${RPI_IP} << EOF
sudo reboot
EOF
cat ~/${UUID}.rpi.env

Su pi ahora se habrá reiniciado y hará ping a su red para obtener la respuesta de DHCP.

4)Instale Ubuntu 20.04.1 en la tarjeta SD usando PI Imager

5)Conecte la tarjeta SD a su Pi e inícielo

6)hacer un

apt update -y; apt upgrade -y

configure su pase, instale algunos paquetes, coloque vim allí (obviamente, ¿quién usa emacs o nano de todos modos?)

7)apagar el pi

halt -p

en tu servidor

8)Tome la tarjeta SD instalada de Ubuntu 20.04.1, conéctela a su servidor, monte la unidad, copie los archivos del sistema operativo de la partición 2 a su ubicación nfs para compartir la raíz con el PI, probablemente /srv/nfs/<serial>/

# find the partition where your CD card is (mine was sda on a rpi)
fdisk -l 

# mount the sdcard - copy the second partition off (should contain the boot files, you can ignore the boot partition, we can use the files off the root partition)
mkdir /root/p2
mount /dev/sda2 /root/p2
# cp using using -ax will give you a correct copy, man cp if needed
cp -vax /root/p2/. /srv/nfs/<serial>/.
# clean up
umount /root/p2
rm -rf /root/p2

9)Monte la carpeta de inicio de los archivos Rpi (almacenados en el recurso compartido NFS) en su ubicación TFTP para que su TFTP pueda entregar los archivos de inicio. Estoy usando un PI aquí para servir los otros PI, así que edite según sea necesario).

#/etc/fstab
LABEL=writable  /        ext4   defaults        0 0
LABEL=system-boot       /boot/firmware  vfat    defaults        0       1
/srv/nfs/<serial>/boot /srv/tftpboot/<serial> none defaults,bind 0 0

Luego monte la nueva ubicación.

mount -a

10)Extraiga su vmlinuz en la carpeta de inicio de su recurso compartido nfs en vmlinux ya que pi no descomprime el kernel de vmlinuz

zcat /srv/nfs/<serial>/boot/vmlinuz-5.4.0-1016-raspi > /src/nfs/<serial>/boot/vmlinux-5.4.0-1016-raspi

11)Cree enlaces simbólicos dentro de la partición /srv/nfs/<serial>/boot para apuntar a los archivos bcm2711-rpi-4-b.dtb, start4.elf, fixup4.dat que faltan en la carpeta de inicio para que TFTP los encuentre. en las carpetas dtb y firmware

Opcional: limpie toda la basura que ya no sea necesaria; mire mi ls -alsalida para ver qué debería haber allí y qué eliminé.

lrwxrwxrwx 1 root root       41 Sep  7 08:19 bcm2711-rpi-4-b.dtb -> dtbs/5.4.0-1016-raspi/bcm2711-rpi-4-b.dtb
-rw-r--r-- 1 root root      216 Sep  7 08:23 cmdline.txt
-rw-r--r-- 1 root root   220286 Aug 13 15:09 config-5.4.0-1016-raspi
-rw-r--r-- 1 root root      231 Sep  7 08:45 config.txt
lrwxrwxrwx 1 root root       43 Sep  6 20:34 dtb -> dtbs/5.4.0-1016-raspi/./bcm2711-rpi-4-b.dtb
lrwxrwxrwx 1 root root       43 Sep  6 20:34 dtb-5.4.0-1016-raspi -> dtbs/5.4.0-1016-raspi/./bcm2711-rpi-4-b.dtb
drwxr-xr-x 3 root root     4096 Sep  7 07:27 dtbs
drwxr-xr-x 2 root root     4096 Sep  7 07:56 firmware
lrwxrwxrwx 1 root root       19 Sep  7 08:15 fixup4.dat -> firmware/fixup4.dat
lrwxrwxrwx 1 root root       27 Sep  6 20:32 initrd.img -> initrd.img-5.4.0-1016-raspi
-rw-r--r-- 1 root root 29579888 Sep  6 20:34 initrd.img-5.4.0-1016-raspi
lrwxrwxrwx 1 root root       19 Sep  7 07:26 start4.elf -> firmware/start4.elf
-rw-r--r-- 1 root root      327 Sep  7 08:04 syscfg.txt
-rw-r--r-- 1 root root  4162247 Aug 13 15:09 System.map-5.4.0-1016-raspi
-rw-r--r-- 1 root root      200 Sep  7 08:04 usercfg.txt
-rw-r--r-- 1 root root 25907712 Sep  7 08:13 vmlinux-5.4.0-1016-raspi
lrwxrwxrwx 1 root root       24 Sep  6 20:32 vmlinuz -> vmlinuz-5.4.0-1016-raspi
-rw-r--r-- 1 root root  8420251 Aug 13 15:09 vmlinuz-5.4.0-1016-raspi

12)actualizar algunas configuraciones en la /srv/nfs/<serial>/bootpartición

#/srv/nfs/<serial>/boot/config.txt
[pi4]
max_framebuffers=2

[all]
arm_64bit=1
device_tree_address=0x03000000
enable_uart=1
cmdline=cmdline.txt
include syscfg.txt
include usercfg.txt
kernel=vmlinux-5.4.0-1016-raspi
initramfs initrd.img-5.4.0-1016-raspi followkernel
#/srv/nfs/<serial>/boot/cmdline.txt
net.ifnames=0 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 nfsrootdebug elevator=deadline rootwait fixrtc init=initrd.img ip=dhcp rootfstype=nfs4 root=/dev/nfs nfsroot=<nfs ip>:/srv/nfs/<serial> rw

13)Actualice el fstab: este es el fstab que se envía al pi

#/srv/nfs/<serial>/etc/fstab
proc            /proc           proc    defaults        0       0
<nfs ip>:/srv/nfs/<serial> /       nfs4     defaults,rw,nolock             0       0 # data to be shared to server
<nfs ip>:/srv/nfs/<serial>/boot/firmware /boot/firmware       nfs4     defaults,rw,nolock             0       1 # data to be shared to server
none            /tmp            tmpfs   defaults        0       0
none            /var/run        tmpfs   defaults        0       0
none            /var/lock       tmpfs   defaults        0       0
none            /var/tmp        tmpfs   defaults        0       0

14)Instale un servidor NFS (google esto) para servir el Pi

#/etc/exports
/srv/nfs/<serial> *(insecure,rw,async,no_root_squash)
exportfs -ra

15)Instale un servidor dnsmasq (google es su amigo) para ofrecer las opciones de dhcp y tftp las imágenes de arranque

#/etc/dnsmasq.conf
dhcp-range=<your network subnet>,proxy # e.g. 192.168.254.254,proxy
log-dhcp
enable-tftp
tftp-root=/srv/tftpboot
pxe-service=0,"Raspberry Pi Boot"
log-facility=/var/log/dnsmasq.log

dieciséis)¿Clústeres? ¿Tienes más de un Pi? Puede usar un montaje overlayfs en su servidor para proporcionar múltiples Pis en su sistema operativo usando un único sistema de archivos raíz base y luego usar superposiciones para darle a cada Pi su propio espacio para almacenamiento y modificaciones de FS.

Si has llegado hasta aquí, esto debería ser fácil:

En su servidor adecuado, no un pi

17)Cree montajes para montajes basados ​​en fs superpuestos para que podamos usar el fs raíz como directorio inferior (google overlayfs)

#/etc/fstab
overlay /srv/nfs/6b0bb1f6 overlay defaults,lowerdir=/srv/nfs/ubuntu-rpi4-lower,upperdir=/srv/nfs/6b0bb1f6-upper,workdir=/srv/nfs/6b0bb1f6-work,nfs_export=on,index=on 0 0
overlay /srv/nfs/68e71308 overlay defaults,lowerdir=/srv/nfs/ubuntu-rpi4-lower,upperdir=/srv/nfs/68e71308-upper,workdir=/srv/nfs/68e71308-work,nfs_export=on,index=on 0 0

18)Cree el sistema FS para admitir las superposiciones, el mío se ve así durante 3 pis.

# this is inside /srv/nfs
drwxr-xr-x  1 root root 4096 Sep  7 12:47 68e71308
drwxr-xr-x  3 root root 4096 Sep  7 12:47 68e71308-upper
drwxr-xr-x  3 root root 4096 Sep  7 13:25 68e71308-work
drwxr-xr-x  1 root root 4096 Sep  7 12:13 6b0bb1f6
drwxr-xr-x  2 root root 4096 Sep  7 12:13 6b0bb1f6-upper
drwxr-xr-x  4 root root 4096 Sep  7 13:25 6b0bb1f6-work
drwxr-xr-x  1 root root 4096 Sep  7 12:47 917c9833
drwxr-xr-x  2 root root 4096 Sep  7 11:49 917c9833-upper
drwxr-xr-x  2 root root 4096 Sep  7 11:34 917c9833-work
drwxr-xr-x 21 root root 4096 Sep  6 19:58 ubuntu-rpi4-lower

19)Debe colocar un /etc/fstabdirectorio dentro de la carpeta fusionada para el montaje (no los directorios superior o de trabajo, solo el nombre de serie simple), que anulará los proporcionados por ubuntu-rpi4-lower. Busque fusefs o overlayfs en Google para obtener más información (así es como funcionan los contenedores acoplables, ¿no lo sabe?)

20)Cree un cmdline.txt dentro de cada carpeta fusionada dentro de /srv/nfs/<serial>/boot/cmdline.txt

21)Exporte las carpetas fusionadas a través de nfs para que nuestro pi pueda usarlas como antes:

#/etc/exports
/srv/nfs/6b0bb1f6 *(rw,sync,no_subtree_check,no_root_squash,fsid=1)
/srv/nfs/917c9833 *(rw,sync,no_subtree_check,no_root_squash,fsid=2)
/srv/nfs/68e71308 *(rw,sync,no_subtree_check,no_root_squash,fsid=3)
exportfs -ra

22)Agregar un nuevo Pi es entonces solo un caso:

22.0)Actualizar el cargador de arranque

22.1Creando tres carpetas vacías en el servidor

mkdir /srv/nfs/<serial>
mkdir /srv/nfs/<serial>-work
mkdir /srv/nfs/<serial>-upper

22.2)Agregar un fstab con las opciones de montaje para los nuevos directorios serie y superior/de trabajo

22.3)Agregar un cmdline.txt con la ubicación NFS correcta

23)Automatización de Uber Si lo desea, puede crear un script de enlace dentro del initrd de su tarjeta SD RaspberryPi que actualice el gestor de arranque por usted y haga ping a un servidor web con su serie que luego agregará los soportes cuando el Pi se haya reiniciado, ya arrancando desde la red. Lo proporcionaré en algún momento.

Respuesta2

Gracias por el manual. Yo añadiría algunas cosas. Los más nuevos firmwaresparecen estar bien con descomprimir el kernel. (probado en 5.8 y superior) Sin embargo, para mí tuve problemas con los permisos del vmlinuzarchivo.

Además, esto es un desastre. Supongo que hay mucha gente en contra de todos modos, pero si fuera necesario. Puedes añadir

network inet,
network inet6,

en/etc/apparmor.d/usr.lib.snapd.snap-confine.real

información relacionada