LuckFox Pico Miniでbuildrootを使ってみる

Linuxを母艦にしたネットワーク共有

前回、WindowsPCを母艦としたネットワーク共有を紹介しました。
そこで、今回はUbuntu/DebianなどのLinux環境を母艦としたネットワーク共有を紹介します。
Pico-Miniにデバッグポート経由でログインすると、1つの端末しか開くことができませんが、
WindowsPCからTeraTermなどで母艦に接続し、母艦経由でPico-Miniにリモートログインすることで、
複数の端末を同時に使うことができます。
但し、Pico-Miniはメモリーが小さいので、沢山ログインするとメチャクチャ遅くなります。
Ubuntu20.04、Ububtu22.04、Debian11、Debian12では、ネットワークインタフェースの挙動が異なります。



最初にUbuntu20.04の挙動です。
Miniボードの電源をUbuntu20.04マシンから供給すると、以下の様にUbuntu側にusb0のインタフェースが出現します。
$ sudo ifconfig usb0
usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::a742:1ab5:c616:d016  prefixlen 64  scopeid 0x20<link>
        ether 7a:da:62:7c:d5:bb  txqueuelen 1000  (イーサネット)
        RX packets 21  bytes 2169 (2.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 39  bytes 8001 (8.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ nmcli conn show
NAME        UUID                                  TYPE      DEVICE
有線接続 2  ea035181-2f58-3f41-bf2b-89c5022bb4e0  ethernet  usb0
有線接続 1  5bfff474-56e9-3a46-81d7-3b3a7d5692d7  ethernet  enp4s0

そこで、nmcliコマンドを使って、usb0に対して固定IPアドレス(172.32.0.100)をアサインします。
Ubuntu側にアサインする固定IPアドレスは、Miniボードと同じセグメントなら何でも構いません。
Miniボードでbuildrootが動いているとき、MiniボードのUSBポートには「172.32.0.93」のIPアドレス がアサインされます。
MiniボードでUbuntuが動いているとき、MiniボードのUSBポートには「172.32.0.70」のIPアドレス がアサインされます。
nmcliはデバイス(usb0)ではなく接続名(有線接続 2)を指定します。
$ sudo nmcli connection down "有線接続 2"
接続 '有線接続 2' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/3)
$ sudo nmcli connection modify "有線接続 2" ipv4.addresses "172.32.0.100/16"
$ sudo nmcli connection modify "有線接続 2" ipv4.method manual
$ sudo nmcli connection up "有線接続 2"
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/4)

$ nmcli device show usb0
GENERAL.DEVICE:                         usb0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         DA:1F:7F:84:10:69
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (接続済み)
GENERAL.CONNECTION:                     有線接続 2
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/6
WIRED-PROPERTIES.CARRIER:               オン
IP4.ADDRESS[1]:                         172.32.0.100/16
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 172.32.0.0/16, nh = 0.0.0.0, mt = 101
IP6.ADDRESS[1]:                         fe80::f220:3c47:db11:8fbe/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 101

ifconfigで結果を確認します。
$ sudo ifconfig usb0
usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.32.0.100  netmask 255.255.0.0  broadcast 172.32.255.255
        inet6 fe80::f220:3c47:db11:8fbe  prefixlen 64  scopeid 0x20<link>
        ether da:1f:7f:84:10:69  txqueuelen 1000  (イーサネット)
        RX packets 53  bytes 7107 (7.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 109  bytes 19284 (19.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

これで、Miniボードに対してpingが通り、sshとscpが使えるようになります。
$ ping 173.32.0.93 -c 5
PING 173.32.0.93 (173.32.0.93) 56(84) bytes of data.
64 bytes from 173.32.0.93: icmp_seq=1 ttl=49 time=267 ms
64 bytes from 173.32.0.93: icmp_seq=2 ttl=49 time=272 ms
64 bytes from 173.32.0.93: icmp_seq=3 ttl=49 time=267 ms
64 bytes from 173.32.0.93: icmp_seq=4 ttl=49 time=275 ms
64 bytes from 173.32.0.93: icmp_seq=5 ttl=49 time=270 ms

--- 173.32.0.93 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 266.740/270.134/275.481/3.283 ms

$ ssh root@172.32.0.93
root@172.32.0.93's password:
[root@luckfox root]$ uname -a
Linux luckfox 5.10.110 #1 Mon Jun 17 20:20:43 JST 2024 armv7l GNU/Linux
[root@luckfox root]$ exit

$ vi ssh-test.txt
中身は何でもよい

$ scp ssh-test.txt root@172.32.0.93:/root
root@172.32.0.93's password:
ssh-test.txt



次にUbuntu22.04の挙動を紹介します。
Miniボードの電源をUbuntu22.04マシンから供給しても、Ubuntu側にusb0のインタフェースが出現しません。
$ sudo ifconfig usb0
usb0: インタフェース情報を取得中にエラーが発生しました: デバイスが見つかりません

Ubuntu22.04ではインタフェースの名前が「一貫性のあるネットワークデバイス命名方法」に変わり、usb0のインタフェース名は以下の 様な名前に変わりました。
この名前はLuckFox側のRNDISのMACアドレスを使っています。
LuckFox側のRNDISのMACアドレスは、LuckFoxが起動する毎に変わります。
Miniボードに電源を供給する前と、供給した後の表示を見比べると、1つインタフェースが増えるのが分かります。
これがLuckFoxが提供するRNDISデバイスのインタフェースです。
$ sudo ifconfig -a

enx0a1c4376e2be: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::f663:a0a0:a112:c7da  prefixlen 64  scopeid 0x20<link>
        ether 8e:4b:24:87:65:cc  txqueuelen 1000  (イーサネット)
        RX packets 22  bytes 2418 (2.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 82  bytes 17016 (17.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ nmcli conn show
NAME        UUID                                  TYPE      DEVICE
有線接続 2  3bfa1614-912b-3797-b7bc-53bea6b8217d  ethernet  enx0a1c4376e2be
有線接続 1  2a8a02a6-1692-3945-ac49-740b257bf467  ethernet  enp25s0

そこで、nmcliコマンドを使って、このインタフェース(enx0a1c4376e2be)に対して固定IPアドレス (172.32.0.100)をアサインします。
$ sudo nmcli connection down "有線接続 2"
接続 '有線接続 2' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/3)
$ sudo nmcli connection modify "有線接続 2" ipv4.addresses "172.32.0.100/16"
$ sudo nmcli connection modify "有線接続 2" ipv4.method manual
$ sudo nmcli connection up "有線接続 2"
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/4)

$ nmcli device show enx0a1c4376e2be
GENERAL.DEVICE:                         enx0a1c4376e2be
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         0A:1C:43:76:E2:BE
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (接続済み)
GENERAL.CONNECTION:                     有線接続 2
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/4
WIRED- PROPERTIES.CARRIER:               オン
IP4.ADDRESS[1]:                         172.32.0.100/16
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 172.32.0.0/16, nh = 0.0.0.0, mt = 101
IP6.ADDRESS[1]:                         fe80::366a:8a1:dc16:eb27/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 1024

ifconfigで結果を確認します。
$ sudo ifconfig enx0a1c4376e2be
enx0a1c4376e2be: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.32.0.100  netmask 255.255.0.0  broadcast 172.32.255.255
        inet6 fe80::366a:8a1:dc16:eb27  prefixlen 64  scopeid 0x20<link>
        ether 0a:1c:43:76:e2:be  txqueuelen 1000  (イーサネット)
        RX packets 22  bytes 2418 (2.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 75  bytes 13863 (13.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

これで、Miniボードに対してpingが通り、sshとscpが使えるようになります。
$ ping 173.32.0.93 -c 5
PING 173.32.0.93 (173.32.0.93) 56(84) bytes of data.
64 bytes from 173.32.0.93: icmp_seq=1 ttl=49 time=267 ms
64 bytes from 173.32.0.93: icmp_seq=2 ttl=49 time=272 ms
64 bytes from 173.32.0.93: icmp_seq=3 ttl=49 time=267 ms
64 bytes from 173.32.0.93: icmp_seq=4 ttl=49 time=275 ms
64 bytes from 173.32.0.93: icmp_seq=5 ttl=49 time=270 ms

--- 173.32.0.93 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 266.740/270.134/275.481/3.283 ms

$ ssh root@172.32.0.93
root@172.32.0.93's password:
[root@luckfox root]$ uname -a
Linux luckfox 5.10.110 #1 Mon Jun 17 20:20:43 JST 2024 armv7l GNU/Linux
[root@luckfox root]$ exit

$ vi ssh-test.txt
中身は何でもよい

$ scp ssh-test.txt root@172.32.0.93:/root
root@172.32.0.93's password:
ssh-test.txt



次にUbuntu24.04の挙動を紹介します。
Miniボードの電源をUbuntu24.04マシンから供給しても、Ubuntu側にUSB0のインタフェースが出現しません。
インタフェースの名前が「一貫性のあるネットワークデバイス命名方法」に変わり、usb0のインタフェース名は以下の 様な名前に変わりました。
Ubuntu22.04と同じですが、一定以上時間が経過しても、nmcliからは消えません。
Miniボードに電源を供給する前と、供給した後の表示を見比べると、1つインタフェースが増えるのが分かります。
接続名が英語表記の「Wired connection 1」になっています。
これ以降はUbuntu22.04と同じです。
$ sudo ifconfig -a

enxf297ad12263d: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::f86:66ef:8950:9c2f  prefixlen 64  scopeid 0x20<link>
        ether f2:97:ad:12:26:3d  txqueuelen 1000  (イーサネット)
        RX packets 21  bytes 2169 (2.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 3196 (3.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ nmcli conn show
NAME                UUID                                  TYPE      DEVICE
netplan-enp4s0      6051479d-df65-3705-9f22-99be0f7f2e09  ethernet  enp4s0
Wired connection 1  d59d5ce5-03e1-366d-b9a9-0ccf6c34cc6b  ethernet  enxf297ad12263d
lo                  f8a1cda1-7a62-4405-8736-58d3a50efc88  loopback  lo



こちらがDebian11の挙動です。
Miniボードの電源をDebian11マシンから供給すると、以下の様にDebian側にusb0のインタフェースが出現します。
接続名が英語表記の「Wired connection 1」になっています。
これ以降はUbuntu20.04と同じです。
$ sudo ifconfig usb0
usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::e0a1:47ff:fe7f:e607  prefixlen 64  scopeid 0x20<link>
        ether e2:a1:47:7f:e6:07  txqueuelen 1000  (イーサネット)
        RX packets 21  bytes 2169 (2.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 3166 (3.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ nmcli conn show
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  901dc7a2-c80a-42c3-ae85-8c9194f501a2  ethernet  usb0
aterm-d5a4ee-g      49b4bfa0-3705-40bd-9e98-97e6ac4dba30  wifi      wlp7s0



こちらがDebian12の挙動です。
Miniボードの電源をDebian12マシンから供給すると、以下の様にDebian側にenx9efc2b4d1091のインタフェースが出 現します。
「一貫性のあるネットワークデバイス命名方法」になっています。
但し、nmcliに接続名が表示されません。
接続名が無いインタフェースに、固定IPアドレスをアサインする方法を知りません。
$ sudo ifconfig -a

enx9efc2b4d1091: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 9e:fc:2b:4d:10:91  txqueuelen 1000  (イーサネット)
        RX packets 16  bytes 1689 (1.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ nmcli conn show
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  595b95eb-a0ab-4949-87b9-2a118e21c5f7  ethernet  enp0s25
lo                  16ee843a-0cce-4a66-abec-bd6572b53956  loopback  lo



こちら
にLinuxのネットワーク共有の手順が公開されています。
LuckFoxもLinuxなので、母艦となるLinuxは(Debianであっても)Ubuntuと呼ぶことにします。
最初にUbuntu側のネットワークインターフェースを確認します。
上(enp25s0)が実際のインタフェース、下(enx62ca1d071324)がLuckFoxとの接続に使用するRNDIS用のUSBイ ンタ フェースです。
つまり下(enx62ca1d071324)から届いたパケットを、上(enp25s0)に転送する設定を行います。
$ sudo ifconfig -a
enp25s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.128  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::dbe2:5971:df3e:2e1  prefixlen 64  scopeid 0x20<link>
        ether fc:61:98:2a:3c:b1  txqueuelen 1000  (イーサネット)
        RX packets 3176  bytes 316441 (316.4 KB)
        RX errors 0  dropped 917  overruns 0  frame 0
        TX packets 1699  bytes 326373 (326.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enx62ca1d071324: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.32.0.100  netmask 255.255.0.0  broadcast 172.32.255.255
        inet6 fe80::b943:52d6:d608:24f3  prefixlen 64  scopeid 0x20<link>
        ether 62:ca:1d:07:13:24  txqueuelen 1000  (イーサネット)
        RX packets 467  bytes 31678 (31.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 322  bytes 47213 (47.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


Ubuntu側で転送の設定を行います。
この設定はUbuntuを起動すると消えてしまうので、起動したときは行う必要が有ります。
$ sudo sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

$ sudo iptables -P FORWARD ACCEPT

# enp25s0は実際の環境に置き換えてください
$ sudo iptables -t nat -A POSTROUTING -o enp25s0 -j MASQUERADE

次にLuckFox側で転送の設定を行い、外部への疎通を確認します。
この設定はLuckFoxを起動すると消えてしまうので、毎回行う必要が有ります。
これで、外部にネットワークが通るようになります。
$ sudo ip r add default via 172.32.0.100

$ sudo sh -c "echo "nameserver 8.8.8.8" >> /etc/resolv.conf"
nameserver

$ ping www.yahoo.co.jp -c 5
PING edge12.g.yimg.jp (182.22.28.252): 56 data bytes
64 bytes from 182.22.28.252: icmp_seq=0 ttl=54 time=22.667 ms
64 bytes from 182.22.28.252: icmp_seq=1 ttl=54 time=33.339 ms
64 bytes from 182.22.28.252: icmp_seq=2 ttl=54 time=21.401 ms
64 bytes from 182.22.28.252: icmp_seq=3 ttl=54 time=24.123 ms
64 bytes from 182.22.28.252: icmp_seq=4 ttl=54 time=22.296 ms
--- edge12.g.yimg.jp ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 21.401/24.765/33.339/4.376 ms



LuckFoxをShutdownしてもUbuntu側のネットワーク接続は残ったままになります。
$ nmcli conn show
NAME        UUID                                  TYPE      DEVICE
有線接続 1  2a8a02a6-1692-3945-ac49-740b257bf467  ethernet  enp25s0
有線接続 2  891368de-c32e-39eb-8e71-6bee34845044  ethernet  --

LuckFoxを再び起動すると、Ubuntu側には新しいネットワーク接続が生成されます。
$ nmcli conn show
NAME        UUID                                  TYPE      DEVICE
有線接続 3  90873a28-c528-396d-9fe3-77a9226b28fc  ethernet  enx6aabe8110655
有線接続 1  2a8a02a6-1692-3945-ac49-740b257bf467  ethernet  enp25s0
有線接続 2  891368de-c32e-39eb-8e71-6bee34845044  ethernet  --

ネットワーク接続が変わってしまうと、コピペで設定を行うことができなくなるので、
使わなくなったネットワーク接続は消してしまった方がいいです。
$ nmcli conn show
NAME        UUID                                  TYPE      DEVICE
有線接続 3  90873a28-c528-396d-9fe3-77a9226b28fc  ethernet  enx6aabe8110655
有線接続 1  2a8a02a6-1692-3945-ac49-740b257bf467  ethernet  enp25s0
有線接続 2  891368de-c32e-39eb-8e71-6bee34845044  ethernet  --

$ sudo nmcli connection delete "有線接続 2"
接続 '有線接続 2' (891368de-c32e-39eb-8e71-6bee34845044) が正常に削除されました 。
$ sudo nmcli connection delete "有線接続 3"
接続 '有線接続 3' (cb54c9ae-1996-34e5-85aa-a1579edada21) が正常に削除されました 。

$ sudo nmcli connection show
NAME        UUID                                  TYPE      DEVICE
有線接続 1  2a8a02a6-1692-3945-ac49-740b257bf467  ethernet  enp25s0

Ubuntu側の設定は、このようなシェルスクリプトを使って、ネットワーク接続の状況を確認したのち、固定IPアドレスを設定しています。
Ubuntu側に使わなくなったネットワーク接続が残っていると、"有線接続 2"ではなく"有線接続 3"になってしまい、このスクリプトは正しく動きません。
#!/bin/bash
sudo nmcli connection show

read -n1 -p "ok? (y/N): " yn
if [[ $yn = [yY] ]]; then
  echo continue
else
  echo
  echo if you want delete connection
  echo sudo nmcli connection delete \"name\"
  exit
fi

udo nmcli connection down "有線接続 2"

sudo nmcli connection modify "有線接続 2" ipv4.addresses "172.32.0.100/16"

sudo nmcli connection modify "有線接続 2" ipv4.method manual

sudo nmcli connection up "有線接続 2"

nmcli conn show

ping 173.32.0.93 -c 5

続く....