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