BeagleBoneGreenのdebian versionup と wireguard client設定

はじめに

2年半前に、BeagleBoneGreenに、GPS deviceを搭載して、GPS-PPS-NTPサーバをつくり稼働させてました。

今回、それをVPNネットワークセグメントにも入れることにしました。一応、VPNとはいえ、internet接続をしますので、upgradeなどはしておきたい。

ただ、それまで動作させてたのが

  • initrd.img-5.10.168-ti-r7
  • vmlinuz-5.10.168-ti-r71

で、各種バイナリをupgradeしても、archives入りしてますので、 BBB対応の最新のカーネル(IoT版)をインストールし直しました(BBG独自ってのはありません)。

am335x-debian-13.7-base-v6.18-armhf-2026-10-09-4gb.img.xz

miniSDブート用に新debianを書き込む

手元のmacで、

xz -d am335x-debian-13.7-base-v6.18-armhf-2026-10-09-4gb.img.xz
sudo dd if=am335x-debian-13.7-base-v6.18-armhf-2026-10-09-4gb.img of=/dev/rdiskX bs=1m

して(rdiskXは、miniSDのデバイス名)、あとはBBGのスロットに差し込むだけ(16GB miniSD)。

今回はeMMCへの書き込みはしないので複雑なことなしに、そのまま新バージョンが立ち上がります。

USBデバイスからmac iterm2でloginして(jerm -b 9600 /dev/cu.usbXXXXXXXXX)

uname -r
6.18.59-bone61

と、ここまでは順調。

wireguardのinstall時にカーネルバージョン書き換えで、はまる

wireguardそれ自体じゃなくて、 apt install wireguradしたときに、強制的に linux-image-6.12.113+deb13-rt-armmp と linux-image-rt-armmp が依存としてインストールされ シンボリックリンクが変更されてしまうという現象

text/vmlinuz → boot/vmlinuz-6.12.113+deb13-rt-armmp
/vmlinuz.old → boot/vmlinuz-6.18.59-bone61

dmesgをみると

etc/kernel/postinst.d/zz-uenv_txt:
zz-uenv_txt: Updating /boot/uEnv.txt [uname_r=6.12.113+deb13-rt-armmp]
Setting up linux-image-rt-armmp (6.12.113-1) ...
Setting up wireguard (1.0.20210914-3) ...
Processing triggers for man-db (2.13.1-1) ...

で、/root/uEnv.txtが、 uname_r=6.12.113+deb13-rt-armmp に書き換えられ、SDブートがfailする。

wireguardインストール時の障害報告がいくつかあるのを、後で知ったが、これはひどい(ちなみに、2年前からその報告はあるが、いまだに、かわってない)。

というわけで、uEnv.txtを uname_r=6.18.59-bone61 に書き換え。ブートしなおす。

今後問題がでると困るので

sudo apt-mark hold linux-image-rt-armmp linux-image-6.12.113+deb13-rt-armmp

して、おく。

clientだけなら、wireguard-toolsだけインストールすれば、上の状況に出会わないという話もあるのだが、まあ、入れちゃったから仕方がなかった。やれやれw

wireguard 設定

VPNサーバ側の設定はあるけど、ここではパス。

鍵生成

sudo wg genkey | sudo tee /etc/wireguard/server_private.key | sudo wg pubkey | sudo tee /etc/wireguard/server_public.key
sudo chmod 700 /etc/wireguard

/etc/wireguard/wg0.conf

[Interface]
Address = VPNセグメントの自分のアドレス(例示:10.0.80.10/24)
PrivateKey = /etc/wiregurard/server_private.keyの文字列
ListenPort = 58300(これはエフェメラルポートなら、任意)
[Peer]
PublicKey = VPNサーバのPublickey
Endpoint = VPNサーバのIP:UDPポート番号(例示:111.111.111.111:33321)
AllowedIPs = 10.0.80.0/24
PersistentKeepalive = 25

あとはVPNサーバで、設定とreloadが終わっていれば、

sudo chmod 400 /etc/wireguard/*
sudo wg-quick up wg0
して、
sudo wg show
の結果は下の通り
interface: wg0
  public key: 略
  private key: (hidden)
  listening port: 58300
peer: 略
  endpoint: 111.111.111.111:33321
  allowed ips: 10.0.80.0/24
  latest handshake: 27 seconds ago
  transfer: 368.87 KiB received, 532.89 KiB sent
  persistent keepalive: every 25 seconds

sudo systemctl enable wg-quick@wg0

して、rebootしておく。

VPNに参加している別ホストから ping 10.0.80.10