(えっと、久々の更新ですが、Buildのお話は皆さんブログとか書いているようなのでお任せして、デバイス系のネタです)
かなり長期に渡って運用していたRaspberry Pi 1が気になっていて、特に異常は発生していなかったのですが、そろそろ更新しようかなと思いました。
RS componentsのケースに入れていました。RPiなので、GPIO繋いでIoTっぽい何かをするみたいな有用な使い方ではなく、完全にUnixマシンとしてDHCPとDNSサーバーの運用をしていました。RPiで運用していた理由として:
- 入手が容易であること(壊れたりしたときにサクッと入れ替えられる)
- 低消費電力
- 有線LAN
- USB(UPSのプライマリ受信)
- 扱いが堅牢である(ファンNG、つまり発熱があまりないこと。また、ボードむき出しとか不可)
という辺りで丁度ミートしていました。もちろん、動かす用途がDHCPとDNSサーバーなので、スペックもそれほど高い必要はないです。DHCPとDNSは他のマシンと兼用させることも不可能ではない(例えばNASにやらせる)のですが、経験的にそれらがあぼーんした時に面倒な事態に陥りがちだったので、独立して堅牢に動作することを求めています。
(もう少しいうと、static A recordの管理と、DHCPによる自動レコード更新をやりたいというのが背景にあります。それがなければルーターの代理応答だけでいい。ところで最初の1年ぐらいは、今は亡きcallweaver入れて、SIPサーバーとしてフレッツ光回線の電話側を収容していました。パフォーマンス的にはギリギリ、ちょっとプツプツノイズが入る感じでした)
しかし、もう忘れていましたが、RPi 1もそろそろ10年選手になるわけで、流石にちょっと心配です。不安の最大要因は、意外と発熱があることでした。写真にあるようにヒートシンクを付けておきましたが、長期間の運用では温度が高いとコンデンサーの寿命を削っていきます。そんなわけで、壊れていないけどもう入れ替えようと言うわけです。
そうそう、Unix、とお茶を濁す書き方をしましたが、これはRaspbianではなくNetBSDを動かしていました。NetBSD、管理系はシンプルで扱いやすいんですよね。私の出自もBSD系ではあるので。しかし新興ハードに対して選択肢が厳しいのも事実なので、Linux系への移行も前提とすることにしました。
VoCore2 Ultimate
で、最近だとRPi4が出ているわけですが、上記の点でもう選択肢から外れました。RPi ZeroシリーズにはLANがないのでやっぱりダメ。それで、他の選択肢を探す事にしました。ググって初めに目についたのは、VoCoreのVoCore2 Ultimateです。
しかし、小さすぎるのも扱いにくい要因になるので、一応ざっと仕様を眺めたのですが、CPUはMediaTekのMT7628でMIPS系、クロックは580MHzとかなり低いので、消費電力は期待できそうです。WiFiも載っているようですが、今回は使わない(&TELなんとか)ので問題はない。有線LAN 100MとUSBがあるので、I/Oの問題はなさそう。
あとはOSですが、LinuxベースのOpenWRTのようです。OpenWRTは使う機会がなかなか訪れないためまだ試していませんが、DHCP&DNSの運用なら却って面倒がないのかもしれません。但し、RPiのDebianやUbuntuのように、既存知識は活かせない可能性があります。
まあ、考えてても分からない、そこまで高くない、実際に来るとなると時間が掛かると思われたので、それ以上悶々とせずにポチりました。
NanoPi NEO
おい、VoCoreはどうなったんだとツッコまれそうですが、実はaliexpressを眺めていたら、こういう写真に出くわしたのです:
そういえば、昔見たことあるな、と。で、改めて調べてみると、FriendlyELECのNanoPiシリーズでした。このシリーズは結構沢山出していて、RPiっぽいフォームファクタやら、豪華なインターフェイスがついているものや、VoCoreのように最小限に絞ったものまで色々ありました。
その中で写真のデバイスは、NanoPi NEO2にOLEDディスプレイとボタンを付けた、NanoPi NEO2 Metal Complete Kitという物のようです。
(なお、最初にaliexpressの写真上げましたが、劣化コピー品掴まされてトラブルに合わないように、本家から買いましょう)
このOLEDとボタンというのは、微妙にCobalt Qubeを思い出してちょっと欲しくなるんですが、どうせ今回の用途で使うことはないので、破損箇所を減らす意味でももっとミニマムなやつでいいと、探したのがこのNanoPi NEOです:
これも大きさという点ではVoCoreに毛が生えたぐらいの小ささですが、堅牢なアルミケースに入っているというのが気に入りました。なお、アルミケースということもあり、WiFiは使えません。他のラインナップではWiFiを内蔵しているものもあるので、気になったら探してみると良いと思います(RPiとの差別化が難しいかもしれませんが)。
あと、基本的な仕様としては、CPUがAllwinner H3 512MB 最大1.2GHz、armhfアーキテクチャのQuad coreなので、消費電力や発熱はちょっと心配です。VoCoreよりはRPiに近いんですかね。OSはFriendlyWRT(要するにOpenWRT)、FriendlyCore(Ubuntu Core)、DietPiなどが使用できるようです。あと、NanoPi NEOはNEO2というシリーズがあり、そちらは更にパワーアップ(arm64)しているようですが、先日見たところでは在庫切れでした。興味はありましたが、今回の目的には合わないと考えて、素直に上のNEO Metal Basic Kitにしました。
とにかく安い(VoCoreより安いってどうなってんの)ですが、今の時期にChina Postだとどこかに行ってしまう不安があったので、EMSを選択しました。それだとちょっと高くなってしまうため、予備と遊び用とで、合わせて3台注文。一週間ぐらいで届きました(この時点でVoCoreはまだ届かず…):
(ところで見直してたら気が付いたのですが、ZeroPiの方がよさそうですね。GPIOは全く付いてないですが、Gigabit Ether使えてNEOより安いです。こうも安いとどんぐりの背比べですが。買いなおそうかな…)
もう本当にセットトップボックスとか完成されたかのようなBox linuxマシンなので、あえて蓋も開けていません。実際に電源を入れてみましたが、熱くなるというよりは、ほんのり温かみを感じる、ぐらい(apt upgrade実行中)なので、熱的な心配はRPi 1よりも良さそうです。また、消費電力を測ってみましたが、最大目視で0.45A、アイドル時は0.14Aと、もうこれで良いのでは?という感じです。
Linuxディストリビューションの選択
さて、公式ドキュメントによると、いくつかのファームウェアからインストールしたいOSを選択できるようなんですが… ファイル名にxenialだとかjessieとかで不安しかない。2020年ですよ今。
で、もう少しリサーチしてみると、どうやらArmbianというディストリビューションでDebianかUbuntuライクな実装がコミュニティベースで配布されているようなので、こちらで行くことにしました(一応公式ファームウェアのうち、friendlycoreはユーザー名とパスワードがドキュメント通りではないのでログインも出来ず、jessieはログイン出来たものの、古すぎる上にaptのシグネチャファイル弄ったあとがあるので速攻で破棄…)
Ubuntuに一番慣れているので、Armbian Bionicを選択してwin32diskimagerでSDカードに書き込んで、サクッと起動しました。
(2020/05/20執筆時、ダウンロードしたイメージのバージョンは5.4.20.7でした)
LANを繋いでおいてください。初回起動で30秒かそれ以上待ってから、angryipか何かを使ってIPアドレスを調べます。又は、自動的にDHCPでIPアドレスを取得しているはずで、名前はnanopineoなので、DNS自動レコード更新をやっている環境なら、単にssh nanopineoで繋がると思います。
初回はユーザーroot、パスワード1234で、ログイン時にパスワード更新を求められます。
You are required to change your password immediately (root enforced)
_ _ ____ _ _ _
| \ | | _ \(_) | \ | | ___ ___
| \| | |_) | | | \| |/ _ \/ _ \
| |\ | __/| | | |\ | __/ (_) |
|_| \_|_| |_| |_| \_|\___|\___/
Welcome to Armbian Bionic with Linux 5.4.20-sunxi
System load: 0.00 0.06 0.05 Up time: 7 min
Memory usage: 12 % of 491MB IP: 192.168.***.***
CPU temp: 32°C
Usage of /: 3% of 29G
[ General system configuration (beta): armbian-config ]
Last login: Sat May 23 11:59:19 2020 from 192.168.***.***
Changing password for root.
(current) UNIX password:
ディスクの状態(SANDISK Extreme PRO 32GB V3A1、ファイルシステムの拡張は勝手に行われます)
root@nanopineo:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 181392 0 181392 0% /dev
tmpfs 50336 2928 47408 6% /run
/dev/mmcblk0p1 30391004 778512 29278964 3% /
tmpfs 251680 0 251680 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 251680 0 251680 0% /sys/fs/cgroup
tmpfs 251680 4 251676 1% /tmp
/dev/zram0 49584 884 45116 2% /var/log
tmpfs 50336 0 50336 0% /run/user/0
root@nanopineo:~#
あとは、apt update, apt upgradeで更新。実にスムーズで、ファーストステップまでに何かにハマるところはないと思います。ドキュメント不要でここまで完成度高いと、人に勧めやすい。良くわかってるじゃん(公式配布じゃないけど)。
ArmbianはVoCoreに対応していないのが惜しいな…(MIPSだから仕方がない)
DHCPとDNSの構成はもとのRPi 1からconfig類を持ってきて細部を修正して、isc-dhcp-serverとbind9を入れて、無事に差し替えを完了しました。このconfigは昔自力で作ったんですが、公開しようと思うと色々マスクしなければならず… もしDHCP-DNS自動連携に興味があるなら、この記事を参照すると良いと思います。記事の公開日や想定している環境は古いですが、configの構成のところはほぼ同じです。
UPSの監視もする必要があるのですが、後日やることにします。
おまけ
root@dhcpdns:/home/kouji/test# apt install mono-devel
Reading package lists… Done
Building dependency tree
Reading state information… Done
mono-devel is already the newest version (4.6.2.7+dfsg-1ubuntu1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
root@dhcpdns:/home/kouji/test# cat Program.cs
using System;
public static class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello mono on NanoPi NEO!");
}
}
root@dhcpdns:/home/kouji/test# mcs Program.cs
root@dhcpdns:/home/kouji/test# mono Program.exe
Hello mono on NanoPi NEO!
root@dhcpdns:/home/kouji/test#
特に意味はなく、上がNanoPi NEOのWindows Forms、下がRPi 1のWindows Forms #mono pic.twitter.com/N1G4bCsLhT
— Kouji Matsui (@kekyo2) May 26, 2020
詳しくはビデオで: Windows Formsでマルチプラットフォーム?