NanoPi R4SE で FreeBSD を使う

freebsd

サーバーのダウンサイジング(物理的)

前回退職のエントリを書きましたが、今後の環境変化(引っ越しなど検討中)に備えて、身の回りの物をいろいろ捨てるとかダウンサイジングしていかねばならんな・・・と考えています。

というわけで AliExpress で NanoPi R4SE(以降 R4SE)を購入しました。

NanoPi R4SE
The NanoPi R4SE is an RK3399 SoC-based ARM board.

飛躍しすぎてなんのこっちゃわからないと思いますが、

引っ越しに備えて周りの物を減らそう・捨てよう
→でもサーバーは捨てられんなぁ
→じゃあ小さくしよう
→現状でも nano ITX でそれなりに小さいけど?
→そうだ SBC があるじゃないか

というリクツです。自宅の x86_64 FreeBSD マシンを置き換えられないかなぁ、と(ただ買いたいだけとも言う)。

用途的には本当は R5S の方が良さそうだったけど、FreeBSD を起動できるか確証が持てなかったため、まずは R4SE から攻めてみることにしました。

NanoPi R4S 向けの u-boot があるので、R4SE の方がイケる確率高いかなぁ、と。

# pkg search nanopi
u-boot-nanopi-neo2-2022.04_1   Cross-build das u-boot for model nanopi-neo2
u-boot-nanopi-r4s-2022.04_1    Cross-build das u-boot for model nanopi-r4s
u-boot-nanopi_a64-2022.04_1    Cross-build das u-boot for model nanopi_a64
u-boot-nanopi_m1plus-2022.04_1 Cross-build das u-boot for model nanopi_m1plus
u-boot-nanopi_neo-2022.04_1    Cross-build das u-boot for model nanopi_neo
u-boot-nanopi_neo_air-2022.04_1 Cross-build das u-boot for model nanopi_neo_air

価格は 13,666 円。ちょっと高いかなぁ。円安だから仕方ないか。

でも1週間くらいで到着したので満足。

予想通りではあるものの、本体以外一切付属しない、とても男らしい仕様。

外箱と本体のみ。いさぎよし。

初期確認

まずは観察。

ケースがヒートシンクを兼ねていて、ひんやり冷たい。

サイズはやはりコンパクト。SBC はこうでなきゃという感じですが、作りもかなりしっかりしています。さすが専用品。

底面4か所に薄いゴム足みたいなものがあり、これをはがすとネジがあります。

ネジ4か所をはがして底面パネルを外すと基板とご対面。

SD カード挿しっぱだと基板を取り出せないので注意・・・

基板は小さなネジ2本でケースに止められている(この写真ではネジは外してあります)ので、それを外すと基板を取り出せます。

ぱっと見る限りは、ネットで得られる公式情報等と差分はなさそうです。

で、ここから起動していくわけですが、R4SE は HDMI などの画面出力がありません。

なので LAN で SSH 接続するのが基本となります。

デフォルトでは LAN 側ポートに 192.168.2.1 が割り当てられているので、PC で LAN ケーブル直つなぎするなどすれば SSH でアクセスできます。

購入時は FriendlyWrt が入ってました。

login as: root
root@192.168.2.1's password:
 ___    _             _ _    __      __   _
| __| _(_)___ _ _  __| | |_  \ \    / / _| |_
| _| '_| / -_) ' \/ _` | | || \ \/\/ / '_|  _|
|_||_| |_\___|_||_\__,_|_|\_, |\_/\_/|_|  \__|
                          |__/
 -----------------------------------------------------
 FriendlyWrt 22.03.0, r19685-512e76967f
 -----------------------------------------------------
root@FriendlyWrt:~#

root ユーザーのパスワードは password ですが、世界で5番目に危険なパスワードということで、速やかに変更しておきましょう。

OpenWrt – 最初のログイン
OpenWrt – 最初のログイン OpenWrt にはパスワードはありません! telnet か WebUI で最初にログインしたらパスワードを設定する必要があります。 OpenWrt システムデフォルト インストールしたばかりの

OpenWrt は触ったことないので詳しくないのですが、バージョンは以下のようです。

DISTRIB_ID='OpenWrt'
DISTRIB_RELEASE='22.03.0'
DISTRIB_REVISION='r19685-512e76967f'
DISTRIB_TARGET='rockchip/armv8'
DISTRIB_ARCH='aarch64_generic'
DISTRIB_DESCRIPTION='OpenWrt 22.03.0 r19685-512e76967f'
DISTRIB_TAINTS='busybox'

FreeBSD のインストール

FriendlyWrt はそこそこに、早速 FreeBSD を動かしていきます。

イメージファイルの準備

R4SE は定番(?)の RK3399 チップと言うことで、ROCKPRO64 のイメージを使用できます。

今回は 13.1-RELEASEFreeBSD-13.1-RELEASE-arm64-aarch64-ROCKPRO64.img.xz を焼いてみることにします。

(以下全て root で作業)

まずはイメージをゲットして展開。

wget http://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-arm64-aarch64-ROCKPRO64.img.xz
xz -dv FreeBSD-13.1-RELEASE-arm64-aarch64-ROCKPRO64.img.xz

R4SE は画面出力がなく、起動する前にネットワーク設定を行っておかないと詰むので、事前にイメージファイルを loopback mount して設定しておきます。

mdconfig -a -t vnode -u 0 -f FreeBSD-13.1-RELEASE-arm64-aarch64-ROCKPRO64.img
mount /dev/md0p2 /mnt/loopback

/etc/rc.conf/mnt/loopbackup/etc/rc.conf)を更新。

kld_list="if_re"
hostname="r4se" # デフォは 'generic'。任意の値で OK
#ifconfig_DEFAULT="DHCP"
ifconfig_re0="192.168.1.50/24"  # 環境に合わせて変更(re0 は LAN 側)
ifconfig_dwc0="192.168.1.51/24" # 環境に合わせて変更(dwc0 は WAN 側)
defaultrouter="192.168.1.1"     # こちらも環境に合わせて変更
sshd_enable="YES"
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
growfs_enable="YES"

re0 は2つある Ethernet ポートの内 LAN 側の方(WAN 側は dwc0)。

re0 ということで伝統のカニさん(Realtek RTL8111H)チップなわけですが、標準ではドライバが組み込まれていません。

且つ、if_re ドライバをロードするようにしてもなんか認識されないことが多いのですが、試行錯誤した結果(この段階では不要であっても)dwc0 の設定も入れておくと認識されやすいような気がします。

if_re ドライバは今回は kld_list で設定していますが、以下のように loader.conf を使うでも良い(はず)です。

echo 'if_re_load="YES"' >> /mnt/loopback/boot/loader.conf

これでデバイスとしては認識するようになりますが、そのままではどういうわけか MAC アドレスが設定されません。

ちなみに UART 接続で確認したところこんな感じでオールゼロ

re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
        ether 00:00:00:00:00:00
        inet 192.168.1.50 netmask 0xffffff00 broadcast 192.168.1.255
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

というわけでシステム起動時に MAC アドレスが設定されるようにしておきます。
(アドレスは FriendlyWrt を起動した際に表示されていたものを指定)

echo 'ifconfig re0 ether XX:XX:XX:XX:XX:XX' > /mnt/loopback/etc/start_if.re0

あとは、必要なら resolv.conf なども変更しておきましょう(変更してなくても SSH 接続であればつながりはする)。

ここまでやったら後片付け。

umount /mnt/loopback
mdconfig -d -u 0

これでイメージファイルの準備は完了。

ちなみに標準の pkg に u-boot-nanopi-r4s-YYYY.MM_N がありますが、これは使用しなくて OK。というかこれを上書きすると起動しなくなるので放置しておきます。

SD カードに FreeBSD を焼いて起動

eMMC ぶっ壊して文鎮化させるのもヤだし、まずは SD カード起動から様子見が王道だよね!

というわけで作成したイメージファイルを micro SD カードに書き込みます。

と言っても特別なことは必要なく、単に dd で焼くだけです(/dev/da0 は SD カード)。

dd if=./FreeBSD-13.1-RELEASE-arm64-aarch64-ROCKPRO64.img of=/dev/da0 bs=1M status=progress

ケーブル接続後、5秒くらいは MASK ボタンを押しっぱなしにしておきましょう。

FreeBSD の場合 LAN や SYS の LED が光らないようなので、適当に待つしかありません。2~3分待ちましょう。

その後 SSH で 192.168.1.50 につないでみます。

初回起動時は re0 が認識されない気がするので、つながらないようなら一度電源ブチ切りでもう一度試してみることをオススメします。

ユーザー名、パスワードともに freebsd という非常に安全なワード(?)でログインできるはず。

FreeBSD 13.1-RELEASE-p3 GENERIC

Welcome to FreeBSD!

Release Notes, Errata: https://www.FreeBSD.org/releases/
Security Advisories:   https://www.FreeBSD.org/security/
FreeBSD Handbook:      https://www.FreeBSD.org/handbook/
FreeBSD FAQ:           https://www.FreeBSD.org/faq/
Questions List: https://lists.FreeBSD.org/mailman/listinfo/freebsd-questions/
FreeBSD Forums:        https://forums.FreeBSD.org/

Documents installed with the system are in the /usr/local/share/doc/freebsd/
directory, or can be installed later with:  pkg install en-freebsd-doc
For other languages, replace "en" with a language code like de or fr.

Show the version of FreeBSD installed:  freebsd-version ; uname -a
Please include that output and any error messages when posting questions.
Introduction to manual pages:  man man
FreeBSD directory layout:      man hier

To change this login announcement, see motd(5).
To see the IP addresses currently set on your active interfaces, type
"ifconfig -u".
                -- Dru <genesis@istar.ca>
freebsd@r4se:~ %

ちなみに root ユーザーはパスワードも root という非常に危険なワードなので、早々に変更しておきましょう(sshd の PermitRootLoginno(デフォルト値)なので root ユーザーで直ログインは不可)。

ココまでくればもはや無双状態です。なんでもできますね。

eMMC に FreeBSD を焼いて起動

SD カード起動で無双状態になりましたが、このままでは起動のたびに MASK ボタンを押しっぱなしにしなければならないという致命的な欠点を抱えています(変更することもできますが)。

せっかく eMMC 32GB もあるし、ここはやはり eMMC から FreeBSD を起動したい!

オフィシャルイメージの FriendlyWrt や FriendlyCore の場合は eflasher というツールを使って焼くようですが、FreeBSD はムリでした。

というわけでココもやはり dd で直書きします。

方針としては SD カードでシステムを起動し、そこから eMMC へ dd で書き込む、という形になります。

前節の手順で FreeBSD の SD カードを作ったのであれば、それを使うのが手っ取り早いでしょう。

書き込む対象は先ほど SD カードに焼いたイメージファイルと同じです。

別の FreeBSD マシンに SD カードをマウントして SD カード内に直接 img ファイルをコピーしても良いですし、USB メモリにコピーして NanoPi R4SE の USB スロット経由から読めるようにしても構いません。

SD カードで起動したシステムからイメージファイルにアクセスできるようにしたら、先ほどと同じように dd で書き込みます。

dd if=./FreeBSD-13.1-RELEASE-arm64-aarch64-ROCKPRO64.img of=/dev/mmcsd1 bs=1M status=progress

mmcsd1 は eMMC デバイスです。環境に応じて変更してください。

これで OK!あとは再起動すれば、MASK ボタンを押さずとも FreeBSD 環境が起動するようになります。

root@r4se:~ # df -h
Filesystem          Size    Used   Avail Capacity  Mounted on
/dev/ufs/rootfs      28G    3.3G     23G    13%    /
devfs               1.0K    1.0K      0B   100%    /dev
/dev/msdosfs/EFI     50M    2.7M     47M     5%    /boot/efi
tmpfs               3.3G    4.0K    3.3G     0%    /tmp

ちゃんと Size も 28G になってますね。

疑問・質問

FreeBSD を eMMC に焼いた後、FriendlyWrt に戻せる?

戻せます。

公式サイトから eflasher イメージをダウンロードして焼けば OK です。

手順的には

  1. FriendlyWrt のイメージをダウンロードし、micro SD カードに dd などで書き込む
  2. R4SE に micro SD カードを挿入し、MASK ボタンを押しながら電源 ON
  3. 数秒したら MASK ボタンを離し、しばらく放置
  4. LAN と WAN の LED が点灯(点滅じゃないよ)したら完了、SD カードを抜いて再起動

Debug UART って使える?

使えます。

というか最初はコレ必須じゃないかなぁ。

が、Ubuntu では使えたのですが Windows の Teraterm だとうまく表示できませんでした。

接続については、同一のものではないですが、以下のような PL2303HX のケーブルを使用しています。

KKHMF 2個 USB to UART TTL RS232 PL2303HX ワイヤーアダプタ変換ケーブルRaspberry Pi Arduino用
仕様: もっと関連資料リンク: AUTOコンバータモジュールアダプタに 内蔵TTL COM PC-PL2303HXチップ 標準のUSBタイプ男性とTTL4ピンコネクタ ケーブル長:千ミリメートル(393/8で) に利用可能は、Linux、Mac、ひるみおよびWindows(XP、2003)、Vistaでは、勝つ7(W...
こんな感じでつなげば OK

baudrate は 1500000 です。Ubuntu なら /dev/ttyUSBX で見えるので、例えば

sudo screen /dev/ttyUSB0 1500000

でつながります。

各イメージのデフォルトのユーザー名とパスワード教えて?

なんか割と種類が多いのでまとめてみました。

root パスワード一般ユーザー
(ユーザー名/パスワード)
FreeBSD ROCKPRO64
(13.1-RELEASE)
rootfreebsd/freebsd
(最初の SSH 接続に必要)
FriendlyWrt 22.03password
eflasher FriendlyWrt
(Ubuntu 16.04.3)
fa
(Debug UART 接続時)

この表以外のものは試してません。

で、3つ目の Ubuntu 16.04.3 について補足。

これはイメージファイル名が rk3399-eflasher-friendlywrt-22.03-* となってるヤツです。

eflasher イメージを SD カードに焼いて起動すると、内部的には Ubuntu 16.04.3(古っ)が起動し、そこから eMMC に対して FriendlyWrt を書き込みます。

この状態の Ubuntu 16.04.3 にログインするためのパスワードというわけです。

当然これが使えるのは UART 接続時のみです。

freebsd-update 使える?

少なくとも fetch して install だけなら使えました(upgrade は試してません)。

今回使用した FreeBSD-13.1-RELEASE-arm64-aarch64-ROCKPRO64 の場合、インストール直後は

freebsd-version -ku
13.1-RELEASE
13.1-RELEASE

なのですが、アップデート実施後は

freebsd-version -ku
13.1-RELEASE-p3
13.1-RELEASE-p5

となりました。

ちなみにもちろん pkg コマンドも使えます。

まとめ

というわけで NanoPi R4SE + FreeBSD でした。

当初は「そもそも FreeBSD 起動できる?」ところから始まりましたが、思ったより使えそうです。

ひとまずしばらくテスト運用で様子見てみようと思いますが、ファンレス・超小型・eMMC が使える・dual ethernet ということで、自宅ルーターに最適です。

USB3.0 も2ポートあるので、NAS 用途なんかにも向いてそうです。

なんか R5S とか R6S も買っちゃいそうだなぁ・・・

コメント

タイトルとURLをコピーしました