サーバーのダウンサイジング(物理的)
前回退職のエントリを書きましたが、今後の環境変化(引っ越しなど検討中)に備えて、身の回りの物をいろいろ捨てるとかダウンサイジングしていかねばならんな・・・と考えています。
というわけで AliExpress で NanoPi R4SE(以降 R4SE)を購入しました。
飛躍しすぎてなんのこっちゃわからないと思いますが、
引っ越しに備えて周りの物を減らそう・捨てよう
→でもサーバーは捨てられんなぁ
→じゃあ小さくしよう
→現状でも nano ITX でそれなりに小さいけど?
→そうだ SBC があるじゃないか
というリクツです。自宅の x86_64 FreeBSD マシンを置き換えられないかなぁ、と(ただ買いたいだけとも言う)。
用途的には本当は R5S の方が良さそうだったけど、FreeBSD を起動できるか確証が持てなかったため、まずは R4SE から攻めてみることにしました。
価格は 13,666 円。ちょっと高いかなぁ。円安だから仕方ないか。
でも1週間くらいで到着したので満足。
予想通りではあるものの、本体以外一切付属しない、とても男らしい仕様。
初期確認
まずは観察。
サイズはやはりコンパクト。SBC はこうでなきゃという感じですが、作りもかなりしっかりしています。さすが専用品。
底面4か所に薄いゴム足みたいなものがあり、これをはがすとネジがあります。
ネジ4か所をはがして底面パネルを外すと基板とご対面。
基板は小さなネジ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 は触ったことないので詳しくないのですが、バージョンは以下のようです。
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-RELEASE の FreeBSD-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
の設定も入れておくと認識されやすいような気がします。
これでデバイスとしては認識するようになりますが、そのままではどういうわけか MAC アドレスが設定されません。
というわけでシステム起動時に 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 につないでみます。
ユーザー名、パスワードともに 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 の PermitRootLogin
が no
(デフォルト値)なので 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 です。
手順的には
- FriendlyWrt のイメージをダウンロードし、micro SD カードに
dd
などで書き込む - R4SE に micro SD カードを挿入し、MASK ボタンを押しながら電源 ON
- 数秒したら MASK ボタンを離し、しばらく放置
- LAN と WAN の LED が点灯(点滅じゃないよ)したら完了、SD カードを抜いて再起動
Debug UART って使える?
使えます。
というか最初はコレ必須じゃないかなぁ。
が、Ubuntu では使えたのですが Windows の Teraterm だとうまく表示できませんでした。
接続については、同一のものではないですが、以下のような PL2303HX のケーブルを使用しています。
baudrate は 1500000 です。Ubuntu なら /dev/ttyUSBX
で見えるので、例えば
sudo screen /dev/ttyUSB0 1500000
でつながります。
各イメージのデフォルトのユーザー名とパスワード教えて?
なんか割と種類が多いのでまとめてみました。
root パスワード | 一般ユーザー (ユーザー名/パスワード) | |
FreeBSD ROCKPRO64 (13.1-RELEASE) | root | freebsd/freebsd (最初の SSH 接続に必要) |
FriendlyWrt 22.03 | password | |
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 も買っちゃいそうだなぁ・・・
コメント