Raspberry Pi - Ubuntu 20.04.1 を使用したディスクレス クラスター

Raspberry Pi - Ubuntu 20.04.1 を使用したディスクレス クラスター

Ubuntu 20.04 を Raspberry PI 上でディスクレスで起動して、クラスター上で Ubuntu を実行できるようにしたいと考えています。

これまでのところ、Ubuntu がインストールされた RPi4b のブート パーティションからイメージを、/srv/tftpboot/<serial>/Raspberry Pi のデフォルトである の下にある dnsmasq/TFTP サーバーに移動し、ブートローダーを更新して PI を起動しました。

dnsmasq ログには、起動時に読み込まれるファイルが表示されます。

ログファイル

==> /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

通常は、NFS サーバーを使用し、cmdline.txt を更新して rootfs の場所を含めることで、initrd がロードされたら、ネットワーク上に保存されている root FS を使用できるようになります。

Ubuntu に必要なオプションに関する情報はあまり見つからないので、次のカーネル ドキュメントから直接取得しました。https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt

そこで、TFTP サーバー上の cmdline.txt を次のように更新しました。

コマンドライン.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

U-Boot コンソールまでしか進みませんでした。vmlinuz イメージがロードされていなかったので、SD カードから実行しているインストール済みの Pi で vmlinuz-5.4.0-1016-raspi を vmlinux に解凍しました。

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

これを TFTP サーバーに配置し、解凍されたイメージを使用するために [all] セクションの config.txt を更新しました。

config.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

initrd の読み込みまでは成功しましたが、NFS マウント スクリプトが NFS 共有をマウントしていません...

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

initrd の抽出:

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

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
}

NFS サーバーには何もアクセスせず、tcpdump port nfsデバッグ ログも追加されました。

/etc/default/nfs-カーネルサーバー

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

nfsroot に渡されるパスが間違っているようです...ここが少し混乱するところです。

ベースイメージのインストールにおけるnfsroot=の処理

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

apt アップデートを実行した後、インストールされた SD カードからインストールする場合:

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

髪の毛を抜くのに5時間もかかりました。

Ubuntu が Raspberry PI 用に提供しているイメージから、起動可能な NFS インストール システムを作成することはできません (少なくとも私はできませんでした)。 考えてみてください。 試すと、サービスが起動しないというさまざまなエラーが発生します。

それで、私は自分自身の質問に答えます。

答え1

Raspberry PI 4b 上の Ubuntu 20.04.1 で完全にディスクレスなシステムを作成する

1)RaspberryPi LiteをSDカードにインストールする

2)Raspberry OS SD カードを使用して Rpi4 を起動し、ログインして次のコマンドを実行して ssh を有効にします。

cd /boot
touch ssh
reboot

3)別のマシンからブートローダーを更新します。PIのIPアドレスがわかっていて、ssh(上記)を有効にしている場合、このスクリプトはブートコードを0xf12に設定します。つまり、ネットワーク、SDカード、再起動の順序で何度も試行します。この投稿が古くなった場合は、ファームウェアのバージョンを確認することをお勧めします。また、シリアルとMACアドレスを含むenvファイルも提供されます。これはファイルに保存されて便利です<uuid>.rpi.env

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

例えば

./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

これで Pi が再起動され、DHCP 応答を取得するためにネットワークに ping が実行されるようになります。

4)PI Imagerを使用してSDカードにUbuntu 20.04.1をインストールする

5)SDカードをPiに挿入して起動します

6)行う

apt update -y; apt upgrade -y

パスを設定し、いくつかのパッケージをインストールし、そこに vim を配置します (明らかに、そもそも emacs や nano を使用する人は誰ですか??)

7)Piをシャットダウンする

halt -p

あなたのサーバー上で

8)Ubuntu 20.04.1 がインストールされた SD カードをサーバーに接続し、ドライブをマウントして、パーティション 2 から OS ファイルをコピーし、PI にルートを共有するための NFS の場所 (おそらく /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)Rpi ファイル (NFS 共有に保存されている) のブート フォルダーを TFTP の場所にマウントして、TFTP がブート ファイルを提供できるようにします。ここでは、他の PI を提供するために PI を使用しているため、必要に応じて編集します)

#/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

次に新しい場所をマウントします

mount -a

10)Pi は vmlinuz カーネルを解凍しないので、NFS 共有のブート フォルダーにある vmlinuz を vmlinux に抽出します。

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

11)/srv/nfs/<serial>/boot パーティション内にシンボリックリンクを作成し、ブートフォルダに存在しない bcm2711-rpi-4-b.dtb、start4.elf、fixup4.dat ファイルを指すようにします。これにより、TFTP は dtb およびファームウェアフォルダでこれらのファイルを見つけられるようになります。

オプション - 不要になったジャンクをすべて削除します - 私のls -al出力を見て、そこに何があるべきか、何を削除したかを確認します。

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)/srv/nfs/<serial>/bootパーティション内のいくつかの設定を更新する

#/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)fstabを更新します。これはPiに送信されるfstabです。

#/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)Piにサービスを提供するNFSサーバー(Googleで検索)をインストールします

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

15)dnsmasqサーバー(Googleがお役に立ちます)をインストールして、DHCPオプションを提供し、ブートイメージをTFTPで転送します。

#/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

16)クラスターですか? Pi が複数ありますか? サーバー上で overlayfs マウントを使用して、単一の基本ルート ファイル システムを使用して複数の Pi にオペレーティング システムを提供し、その後オーバーレイを使用して各 Pi にストレージと FS 変更用の独自のスペースを与えることができます。

ここまで来たら、これは簡単なはずです:

適切なサーバー上 - piではない

17)オーバーレイ ファイル ベースのマウントを作成し、ルート ファイル システムを下位ディレクトリとして使用できるようにします (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)オーバーレイをサポートする FS システムを作成します。私の 3 つの Pi の場合、次のようになります。

# 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)マウント用にマージされたフォルダー内に配置する必要があり/etc/fstab(上位ディレクトリや作業ディレクトリではなく、単純なシリアル名のものだけ)、これにより、ubuntu-rpi4-lower が提供するものが上書きされます。詳細については、fusefs または overlayfs を Google で検索してください (これは Docker コンテナーの動作方法です)。

20)/srv/nfs/<serial>/boot/cmdline.txt 内の各マージされたフォルダ内に cmdline.txt を作成します。

21)マージされたフォルダーを NFS 経由でエクスポートして、PIS が以前と同じように使用できるようにします。

#/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)新しい Pi を追加するのは、次のケースだけです。

22.0)ブートローダーを更新する

22.1サーバー上に3つの空のフォルダを作成する

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

22.2)新しいシリアルおよび上位/作業ディレクトリのマウントオプションを指定したfstabを追加する

22.3)正しいNFSの場所を指定したcmdline.txtを追加する

23)超自動化 必要に応じて、RaspberryPi SD カードの initrd 内にフック スクリプトを作成できます。このスクリプトは、ブートローダーを更新し、シリアルを使用して Web サーバーに ping を送信します。これにより、Pi が再起動するまでにマウントが追加され、ネットワークから起動し始めます。これは、いつか提供します。

答え2

マニュアルをありがとうございます。いくつか追加したいことがあります。新しいバージョンfirmwaresではカーネルを解凍しても問題ないようです。(5.8 以降でテスト済み) ただし、私の場合はファイルの権限に問題がありましたvmlinuz

また、これはスナップを台無しにしています。とにかく反対する人が多いと思いますが、必要な場合は追加できます

network inet,
network inet6,

の中へ/etc/apparmor.d/usr.lib.snapd.snap-confine.real

関連情報