LinuxをNanoPi NEO2にインストールしたときに謎のkernel panicが発生し、理由が見当がつかずハードウェア本体を疑ったので、秋月で本体をもう一台購入した。その後kernel panicはイーサーネットを100BASEのHUBに接続することで、解消したのだが、本体が一台余ってしまった。ちょうどFreeBSD-12がリリースされて、ARM64がそこそこサポートされているようなので、余ったNanoiI NEO2にFreeBSDをインストールしてみた。まず、NanoPi NEO2用にFreeBSDのインストールイメージを作らなければならないのだが、常時稼働させられれマシンは15~16年前に組み立てたデスクトップPCしかない。以下のようなマシンだ。
---<<BOOT>>--- Copyright (c) 1992-2018 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 12.0-RELEASE r341666 GENERIC i386 FreeBSD clang version 6.0.1 (tags/RELEASE_601/final 335540) (based on LLVM 6.0.1) VT(vga): resolution 640x480 CPU: Intel Pentium III (997.48-MHz 686-class CPU) Origin="GenuineIntel" Id=0x686 Family=0x6 Model=0x8 Stepping=6 Features=0x387f9ff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,PN,MMX,FXSR,SSE> real memory = 268435456 (256 MB) avail memory = 225263616 (214 MB)
このマシンが未だに稼働することに驚きを感じるている。だが、もう十年ぐらい前から年に一~二回電源を入れるぐらいだ。本体のみでインストールできないので、ハードディスクをノートPCにUSB経由で接続して、インストールした。
NanoPi NEO2のFreeBSDのインストールについて参考にしたのはrixwwdさんのページ。
基本的にはそこに書かれている通りなのだが、FreeBSD-12をインストールしたときにソースもインストールしておいたので、ソースのチェックアウトは割愛した。それと、FreeBSD-12ではデフォルトでntpdのユーザーが追加されているので、ntpdユーザの作成も割愛した。
まず、u-bootをportsからインストールしたのだが、ここで数時間かかってしまった。最近のインストールしたてのFreeBSDではperlとかpythonもインストールされていないようで、これらのportsからのビルド・インストールで結構時間がかかった。後で思えば、u-bootはpkgでインストールできたではないかと想像している。
次にNanoPi NEO2用のビルドだが、最初、
./crochet.sh -b nanopi-neo2
と実行したのだが、その直後、これではまずいと気が付いた。というのもNanoiI NEO2にシリアルコンソールをつないでいないので、このままではsshでログインできないのだ。それと、SDカードイメージの作成にはrootでなければならないので、そこで失敗してしまうだろう。とりあえずスタートしたので、終わるまで待とうと思って放置しておいたのだが、カーネルとユーザーランドのコンパイルに約二日半かかってしまった。SDカードイメージの作成に失敗したところで、config.shのファイルを以下のように作成した。
board_setup nanopi-neo2 option User user_name
こうすると、user_nameという名前のユーザーが作成されて、パスワードもuser_nameになる。そして、次に
sudo ./crochet.sh -c config.sh
を実行した。既にカーネルとユーザーランドはできているのだが、この処理も結構かかった。そして最終的にworkディレクトリの下に出来上がったFreeBSD-aarch64-12-GENERIC-nanopi-neo2.imgをSDカードの書きこんで、本体に接続すると無事にFreeBSDが起動してきた。
次に、NanoPi NEO2にハードディスクを接続し、SDカードからシステムをコピーして、ハードディスクから起動できるようにした。FreeBSDもU-BOOTを使っているのだが、U-BOOTがどこにあるのか見えなく、どのように設定ファイルを書けばハードディスから起動できるようになるのかさっぱりわからないので、SDカード上のloaderとカーネルを起動し、カーネル起動後のルートデバイスがハードディスクになるようにした。そのために、SDカード上に/boot/loader.confを作成し、
vfs.root.mountfrom="ufs:da0p1"
と書いておいた。HD側の/etc/fstabは以下のような記述にしている。
/dev/da0p1 / ufs rw,noatime 1 1 /dev/da0p2 none swap sw 0 0 /dev/da0p3 /mnt/disk1 ufs rw,noatime 1 1 /dev/mmcsd0s2a /mnt/sdcard ufs rw,noatime 1 1 /mnt/sdcard/boot /boot nullfs rw 0 0 /dev/mmcsd0s1 /boot/efi msdosfs rw,noatime 1 1
nullfsをマウントするために、SDカード上のloader.confには
nullfs_load="YES"
を追加している。
さて、このFreeBSDは1000BASEのハブに接続しているのだが、これにtinyproxyをインストールして、動作を見てみた。Linuxとはインプリが違うので、当たり前と言えば当たり前だが、FreeBSDではカーネルパニックも起きず快適に動いている。もう少し様子を見て、問題がないようだったら、もう一台の方もLinuxからFreeBSDに移行しようかとも考えている。
関連ページ
秋月電子にNanoPi NEO NAS kitを買いに行くも、買えず - 隠居日録
NanoPi NEO2+NAS kitがようやく届いた - 隠居日録
armbianのインストールで盛大にはまる - 隠居日録
NanoPi NEO2+NAS kit (Linux 4.14)は安定稼働させられなかった - 隠居日録
FreeBSD u-boot-nanopi-neo2-2019.04はNanoPi NEO2 NAS kitではブートしない? - 隠居日録
FreeBSD 12.1をNaoPi NEO2上でセルフビルドするのは大変 - 隠居日録
FreeBSDとu-boot再び - 隠居日録
FreeBSD NanoPi NEO2上で全てのUSBを有効にし、無事にNAS Kitでブートできるようになった - 隠居日録
FreeBSD NanoPi NEO2上でpowerdが使えるようになった - 隠居日録
FreeBSD 13.0がリリースされた - 隠居日録