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 nfs
y 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.env
archivo.
./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 -al
salida 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>/boot
partició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/fstab
directorio 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 firmwares
parecen estar bien con descomprimir el kernel. (probado en 5.8 y superior) Sin embargo, para mí tuve problemas con los permisos del vmlinuz
archivo.
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