Orange Piの内、今夏デビューしたてのOrange Pi Zero 3 RAM4GBとOrange Pi Zero 3用オプションセットを買ってみたので早速レビューとちょっとした検証をしてみました。
技適対応ではないので内蔵Wi-FiとBluetoothは使わず、付属のWi-Fiアンテナを外し、LANケーブルで有線接続します。
結論から言うとUSBが2.0のみとは言え、Orange Pi Zero 3は、パソコンとしても十分対応でき、なんでも来いな感じ。
内容について1つだけ先に触れておくとOrange Pi Zero 3でオンボードのSPI FlashメモリからのUSBブートが可能かはともかく、後述の通り、ラズパイ2Bのように起動用としてmicroSDカードを使い、システム用としてUSBデバイスをブートすることはできましたよ。
ただ、気になることもあって各ボードリリース時は同時期の最新である模様のOrange Pi OS、ベースとなるディストロ同様にマイナーバージョンのアップデート等もなされるのか、そしてOrange Pi専用リポジトリ内のパッケージ群も、何れもどのくらいの期間、更新され続け、フレッシュなものなのか、LTS版とそうじゃないボードの違いとか。
なんなら、Armbian等サードパーティ製という話もあれど、Armbianも中華っぽく、また、Orange Pi Zero 3が新しいからか、RAM4GB用に対処しても尚、今日時点、起動できなかったので。
アルミケースに入れた(アルミプレートでサンドイッチにした)Orange Pi Zero 3。
さすがにアルミプレートがあるかないかで結構、触った時の温度の違いを感じます。
ケースに隠れて見えませんが、オプションセットにあったシリコンパッドもSoCとLPDDR4 RAMに貼ってます。
一般的なサイズと思われるUSBメモリと並べてみるとUSBメモリの長手方向の方がアルミケース入りのOrange Pi Zero 3の一辺より大きいことがわかります。
ちなみにOrange Pi Zero 3 H618ユーザーマニュアルにもありますが、micro HDMIポートとType C電源ポートの位置と距離からして100均で売ってるような幅広のmicro HDMI-HDMIアダプタだと思いっきり干渉して使えないので要注意。
アルミケースに入ったOrange Pi Zero 3に13ピン拡張ボードを装着。
熱くなるUSBドングルとか使わなければ、拡張ボード込みのファン付きケースじゃなくても良いよねと思っての本体用アルミケースと拡張ボード。
とは言え、筐体兼放熱板でもあるアルミプレート上にあり、温かい熱は上昇することもあって電源投入しているだけで拡張ボードもほんの少し生温かい感じ。
電源投入後、数時間経過、室内気温33度ほどで日差しの当たる日中の窓を開放した窓際で拡張ボードを装着したOrange Pi Zero 3ボードを手持ちの非接触温度計で計測してみると拡張ボード上が約41度、裏面のアルミプレートが約38度。
ちなみにsensorsコマンドの出力結果は、CPU:48.9度、GPU:49.1度、DDR(RAM):49.5度、VE:48.1度。
Orange Pi Zero 3用に買ったセットは、次の通り。
Orange Pi Zero 3用でもあるとは言え、Zero 3については、接点が他の機能に使われているとかで拡張ボード上のマイクは使用不可とのこと。
尚、microSDカードは、パッケージやカード上の印字からするとSanDisk製でした。
ビス、ナット、スペーサーは、各1個おまけ付き。
SoCは、Allwinner H618、CPUは、ARM Quad-core Cortex-A53 1.5GHz。
GPUとしては、Mali G31 MP2搭載。
が、ユーザーマニュアルによれば、現在対応中のLinuxカーネル 5.4|6.1では、Mali GPU、Video codec、TV-outについてはドライバ未対応?不適合?なようです。
RAMは、LPDDR4 1GB/1.5GB/2GB/4GBのラインナップ中、今回は、4GBをチョイス。
オンボードストレージとして16MB SPI Flashがあり、HDMI対応ディスプレイさえ接続してあれば、電源投入だけでブート確認できるようにとデフォルトでミニマムなLinuxが書き込み済み(ネットワーク接続機能はない模様)。
仮にこれを書き換えたところでSPIからUSBブートというのは、できるとしてもかなり険しい道のりな気配(前・後述の通り、microSDからUSBデバイスのチェーンブートは可)。
microSDカードインタフェース。
10M/100M/1000M有線ギガビットイーサネットと技適なしの無線オンボードWi-Fi 5/Bluetooth 5.0。
GPIO26ピン、13ピン、デバッグ用UART 3ピン。
CPU、GPU、RAM、VE用に温度センサー4つ搭載。
本体にmicro HDMIポート、拡張ボードに3.5mmオーディオジャック、(Zero 3では使えない)マイク。
本体にUSBポート x1、拡張ボードにUSBポート x2(拡張ボードを使用しない場合、13ピンからUSB出力可)。
拡張ボードには他に主にAndroid用とされる赤外線受信センサーもあり。
電源ポートは、5V3A Type-C、PCB(基板)サイズは、50mm x 55mm。
対応OSは、公式Orange Pi OSとしては、Android 12 TV/Debian11/Debian12/Ubuntu22.04/Ubuntu20.04、他にサードパーティ製もある可能性あり(リリースしたてホヤホヤのZero 3には、まだ対応できていないケースもありそう)。
スペックリストのあるページとは少し異なり、http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-Zero-3.htmlによると、今日時点、公式Orange Pi OSとしては、Orange Pi OS(Arch)、Ubuntu、Debian、Androidの各イメージとAndroidソースコード、Linuxソースコードがあります。
この記述の仕方からしてArch Linuxベースこそが、公式の中の第一候補という印象を受けます。
が、別途、サードパーティ製としてArmbian、kali、raspberry-pi-osがあります(が、サードパーティ製への質問は各サードパーティへとのこと)。
これらは、公式・サードパーティ製共にOrange Piサイドで作ったイメージのようです。
筆者は、この中から、Debian bookwormのサーバイメージを選択、インストールしました。
と言うか当初、Armbianのサーバイメージを選択、githubに飛び、RAM1GB|2GB兼用イメージを取得、1.5GBと4GBはブートローダ(ブート手順)が異なるらしく、記述通りに追加作業をして対処するとマウントできなくなり、GPartedなどで修復を図ると成功するも起動に至らず、いち早い起動確認を優先すべく、続いてDebianを選択したという経緯があります。
公式・サードパーティ共に各OSも同様でリンク先からRAM別に対応するものを選んでダウンロード・展開する必要があります。
また、全ては確認していませんが、たぶん、それぞれにLinuxカーネル5.4版と6.1版、少なくともDebian/Ubuntuについては、各OSバージョン2通り、更にサーバ版とデスクトップ版(Xfce)などもあるでしょう。
Debian bookwormのサーバイメージをとダウンロードしてみたところ、[The image of the linux6.1 kernel version-20230915T003125Z-001]から002/003/004/005と5つのzipファイルがダウンロードされました。
更にその中に2つずつ程度、7z圧縮されたものがあります。
アーカイバで確認すると筆者が必要とするイメージは、[The image of the linux6.1 kernel version-20230915T003125Z-005]にありそう、RAM1GB|2GB用と4GB用があり、それらは更に7z圧縮されており、常用しているEngrampaでは未対応なのでFlatpakで入れてあったPeaZipで4GB用の7zを展開、伸長。
当該OSイメージをオプションセットにあったSandisk 64GBのmicroSDカードにdd。
この時、イメージサイズのパーティションとして書き込まれるわけですが、便利なようなそうでもないような、仮に事前にサイズ変更しておいたとしても初回起動時にデバイス容量いっぱいまでファイルシステム共々パーティション自体をも自動で拡張してくれちゃいます。
ただ、その後、電源OFFしてGPartedなどで縮小することはでき、次回起動時からは、縮小したサイズにはなります。
ちなみに当初、何度かやったArmbianイメージ書き込みでRaspberry Pi Imagerで[カスタムイメージ]を選択してやってみましたが、簡単で快適でした。
ユーザーマニュアルにある通り、Orange Pi Zero 3起動前にイメージを焼いたmicroSDをマウント、boot/orangepi_first_run.txt.templateをorangepi_first_run.txtとしてコピー、中身を編集することにより、事前に初回起動時のみ有効なネットワーク設定をすることができるようになっています。
マウントではなくOrange Pi Zero 3起動後に/boot/orangepi_first_run.txt.templateを...もできますが、その場合は、編集保存後、一度、microSDカードを抜いて、再度、microSDカードを挿入して起動させる必要があると明示されています。
設定可能な内容は、初回起動後、orangepi_first_run.txtファイルを削除するか否か、デフォルトのネットワーク設定を変更するか否か(このファイルを使う時点で設定は1必須)、有線・無線何れを有効にするか、無線を有効にする場合、SSID/PASSPHRASE設定、静的(固定)IPにするか否か、する場合、IPアドレス、ゲートウェイ設定。
ただ、「初回起動」というのが、最初の1回だけなのか、このファイルを配置した都度1回ということなのか曖昧ですが...と思いましたが、前述のように当該ファイル編集後、明示されていたmicroSDカードの挿抜からしてmicroSDカード挿入都度1回ってことっぽいですね、きっと。
また、この時、有線・無線の設定については、何れか一択とのこと、理由は、「だって両方使う必要ないもんね...」と書いてあります。
ちなみに他のページを読むと有線LAN接続していないと配線を噛ましたシリアルデバグはできる一方、HDMIケーブルを介したディスプレイを利用できないとかなんとか。
仮にそうでもIPアドレスを調べて他のマシンからssh、GUIなデスクトップ環境なら他にもVNCサーバをインストール、サーバをポートを指定して起動しておいて他マシンのVNCクライアントからアクセスという方法もありますが。
この後、HDMIディスプレイやsshで他マシンのディスプレイでログインできるようになります。
が、bashユーザーで端末を使う場合、上下矢印キーで履歴を移動できるのは当たり前、それが上下キーを押したら[[A...みたいに文字化けした!なんてことがないように予めchsh(chANGE shELL)コマンドを実行、再ログインしておきましょう。
当該ユーザー自身のshellを変更する際は、sudoは不要です。
これは、Orange Piなのか、Orange Pi Zeroなのか、他でもそうだったか?/bin/shは、bashではなく、dashにシンボリックリンクが張られており、履歴機能がない為です。
一度、ログアウトして改めてログインしないと変更が反映されないので要注意。
ユーザーマニュアルによれば、Orange Pi Zero 3のrootのデフォルトのパスワード、そして既に作成されているユーザー名及びパスワードは、[orangepi]です。
事前設定することなく、デフォルトの状態では、適切で起動可能なイメージが焼かれたmicroSDカードを挿入、電源投入、起動した時点で有線LANが有効になっており、DHCPで配布されたIPアドレスが割り当てられます。
HDMIケーブルを介したディスプレイ+USBハブ or 拡張ボード+USBキーボード+USBマウスに接続していない場合は、他のマシンがあれば、起動前後にnmapなどでLAN内に増えたIPアドレスを見つけることで確認できます。
LANケーブルを介して有線接続した状態で起動するとデフォルトでsshが有効となっているとのことで他のマシンから即、ssh USER@IP_ADDRESSやユーザーが同一なら、ssh IP_ADDRESSでssh接続できます。
後々のことを考えるとorangepi-configからもインストールでき、基本、接続先IPアドレスを気にせずに済むavahi(ホスト名.local等でアクセスできるbonjour的なもの)を使ったり、IPを固定したりすると便利でしょう。
ただ、初回、ssh接続する場合、sshした方の~/.ssh/known_hostsにホストが登録されてないよエラーが出ると思うので、その時は、そこにある通り、ssh-keygen -f ...した後、ssh接続します。
デフォルトのログインパスワードは、Orange Pi Zero 3の起動と有線LANの通り。
今回使用したLinuxカーネルとOS(Orange Pi公式OSの1つDebian)であるOrange Pi 1.0.0 Bookworm with Linux 6.1.31-sun50iw9の表記もあります。
Memory usageに[of 3.84GB]とあるのでRAM4GBバージョンであることがわかります。
尚、df -hしてみるとイメージ書き込み済みのmicroSDカードは、/dev/mmcblk0p1となっています。
ここまででHDMIケーブルを介したディスプレイとUSBキーボード・マウスか、ssh接続で他マシンからアクセスできるようになったところでセキュリティ対策の一貫として次の作業を行っておくのが賢明でしょう。
ただ、新規ユーザーがsudoersファイルに登録されず、新規ユーザーではsuやsudoすら使えない可能性があるのでsudoも使えるorangepiユーザーでという手もありますが、最小限の作業だけは注意しつつ、rootでログインして行なうのが良いでしょう。
rootでログインした前提でrootパスワードの変更と新規ユーザーの追加とsudo設定、orangepiユーザーの登録グループをNEW_USER_NAMEに引き継ぎ設定。
usermod -aGの引数の[...]は、もちろんそのままではなく、該当するグループをカンマ区切りで列挙します。
ただ、後述のように直接/etc/groupを編集、orangepiユーザーの所属グループを新規ユーザーに引き継げば、ログアウト/ログオンでid結果も反映されるのでusermod -aGする必要はありません。
これで新規ユーザーNEW_USER_NAMEでログインしても作業できるでしょう。
新規ユーザーを作成した後、当時のラズパイだと新規ユーザー作成とユーザーorangepi削除と後始末のようにuserdelから始められました。
が、今どきは、どうやら、systemd --userの関係でそれだとエラーになるので念の為、これらファイルのバックアップをとりつつ、/etc/group、/etc/passwdを直接編集します。
内容としては、orangepiユーザー/グループのuid=1000/gid=1000をそれぞれ新規ユーザーに割当てつつ、orangepiグループ及び所属グループのorangepi|ユーザーを削除、/home/orangepiを削除。
新規ユーザーNEW_USER_NAMEのホームディレクトリ内ファイルの所有権としてgid/uidが1001となっていたら、1000とすべく、chown。
前段の/etc/passwdや/etc/group設定が合っていれば、gid/uidでなくNEW_USER_GROUP:NEW_USER_NAMEでいけます。
orangepiユーザーでしばらく運用した後に新規ユーザーを作成、移行しようと思うと、結構、面倒なので最初にやっておくのが吉。
orangepi-configは、一部システム設定やソフトウェア設定ができるキャラクタベースのグラフィカルツールです。
起動方法の変更やUART設定、ネットワーク設定、タイムゾーンや言語やhostname設定、一部ソフトウェアのインストールなどができます。
Orange Pi Zero/Zero 2/Zero 3用の13ピン拡張ボードには、USBポートが2つ、3.5mmオーディオジャック、赤外線受信センサーと(Zero 3では使えない)マイクが1つずつ搭載されています。
黒い部分は、やや見づらいですが、写真左からマイク、オーディオジャック、USBポート、USBポートの写真右奥にあるのが、赤外線受信センサ。
拡張ボードに更になんとなく3ポートドングルタイプUSBハブを介してUSBポートとオーディオジャックに3.5mmオーディオプラグ付きのUSBスピーカー(キャンドゥの500円スピーカー)を接続してみたところ、何ら設定することなく、音源を再生できました。
ちなみに再生してみた音源は、サンプルとしてよく使う/usr/share/sounds/alsa/Front_Center.wav。
Orange Pi Zero 3に未フォーマットながらSSD 1TBを接続してみました。
SSDケースは、Groovy model.SSDCASE-U31G1-GM。
結果、lsusbでは、[152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp. JMS578 SATA 6Gb/s]として、dmesgではsdaとして認識されました。
中身の入ったUSBメモリなども挿してみたところ、lsusb、dmesg、fdiskに相応の結果が表示されました。
当然ながら、ストレージとしてUSB接続のHDDやSSDは使えるようです。
Orange Pi Zero 3でmicroSDカードからUSBメモリやバスパワーの2.5インチHDDをチェインロードしてUSBブート(要はラズパイ2Bみたいに)してみました。
ちなみに今回使ってみた2.5インチHDDは、なんと16年前に買った先代dynabookに標準搭載されていたTOSHIBA製80GB、HDDケースは、ストレージとして使った際と同様のGroovy製。
当然、SSDもいけるでしょう(未フォーマットのSSDも持ってるのに手抜きで試してませんが)。
microSDカードにシステムまで入れて運用というのは避けたい、せめて、購入から7年以上経過、常時起動じゃないながら各種サーバとして今尚、利用中で、microSDカード共々健在なラズパイ2B v1.1同様にシステムはUSBデバイス(SSD)に入れたいと思ったので。
そもそも原理的には容易にできるはずなのにOPi Zero 3に限らず、ZeroやZero 2ですら情報がないのが不思議と思いつつ、やってみると想定通り、簡単にできました。
尚、この場合、orangepi-configなどでブート方法の変更などする必要はありません。
要はイメージを書き込んだmicroSDカードの/boot/orangepiEnv.txtとUSBデバイス側の/etc/fstabのUUIDを書き換えるだけです。
まず、USBメモリ(やSSD、HDD)にddなどでOrange Pi OS(ここではdebian bookworm server)を書き込みます。
すると先に焼いたmicroSDカードとUSBメモリでUUIDが重複するので(同一イメージだとどれでもそうなるっけ?)USBメモリ側のUUIDを新たに生成すべく、[tune2fs -U random デバイス]。
ラズパイのように起動用とシステム用とパーティションが2つならmicroSDのシステムパーティションを削除すれば、UUIDが同一なのは好都合なのですが、OPi Zero 3ではパーティションが1つで、そうはいかないので。
尚、tune2fs前後でblkidしておくと変化を比較できます。
ちなみにLinuxでは、microSDなどは/dev/mmcblk0p1のようになる一方、1つめのUSB機器は、/dev/sda、2つめは、/dev/sdb、3つめは/dev/sdc、添字の[1]は1つめのパーティションのようになります。
よって例示の/dev/sda1は、Orange Pi Zero 3で1つめのUSB機器と認識されているケースを想定してsda、少なくとも今日時点でOrange Pi Zero 3のOSイメージにおいてはパーティションは1つのみなので添字は1としています。
もし、環境が異なるのであれば、それに合わせる必要があります。
続いて、今、microSDカードのみで起動していると想定すると/bootにorangepiEnv.txtがあるので[rootdev=UUID=...]行のUUIDを先ほど生成したUSBメモリのUUIDに書き換えて保存します。
更にUSBメモリをマウントして起動ファイル/etc/fstabのUUIDも同様に変更、保存します。
そしてOrange Pi Zero 3を一度、poweroffするなどし、電源を落とします。
これでバッチリ、Orange Pi Zero 3にmicroSDカードとUSBメモリを挿し、電源を入れるとmicroSDカードが起動すると同時にボードの赤いLEDが点灯、USBメモリが起動すると赤のLEDが消灯しつつ、緑のLEDが点滅、USBメモリにもアクセスランプがあれば、同様に点滅し、USB 2.0ポート(とUSBデバイスの性能や劣化があればその具合等)に相応な時間でUSBメモリやUSB接続のHDD、SSDから起動します。
他マシンから初めてsshする場合は、ssh接続の項で説明した通り、ssh-keygen -f...した後、ssh接続することになるでしょう。
ここまでの手順を踏んだなら、USBメモリから初めて起動した場合、ユーザーは、rootかorangepiのみ、パスワードは何れもorangepiでないとログインできないデフォルトの状態なのでUSBメモリから起動したことの確認にもなります。
現時点でOrange Pi Zero 3の使いみちは決まっていない、使うとしても検証くらいということでデスクトップ環境でも入れてみようかと。
公式Orange Pi OSのデスクトップと言えばXfceですが、デスクトップ環境を一通り入れる癖のある筆者でも利用となると、ご無沙汰感がハンパないので入れるにしてもサーバ版Bookwormから他のデスクトップ環境をと思っていました。
というわけで4コアCPUでRAMも4GBあることですし、今回は、最もお気に入りのCinnamonを入れてみることにしました。
と思いきや、インストール後、VNC接続してみるとデスクトップもメニュー等も表示されるも~/.xsession_errorsによれば、dbus-launchを起動できないという理由で[you are currently running in fallback mode]とポップアップ表示されるので、とりあえず、MATEに変更。
Debianでは、task-*-desktopの書式で指定すると当該デスクトップ環境一式をインストールしてくれるのでOrange Pi OS版もいけるでしょうと踏んで。
併せて日本語入力についてはともかく、日本語表示できるように任意の日本語対応フォントをインストール。
環境変数LANGの設定や必要ならVNC接続された時に表示するデスクトップを指定すべく、.vnc/xstartupを編集するなどして対処します。
例では、MATEを指定しています。
日本語入力関連についても、このファイルで設定できるはずです。
デスクトップ環境と併せてVNCサーバをインストール、vncserverを1度起動すれば存在するはずですが、ない場合など雛形として/etc/X11/xinit/xinitrcを~/.vncディレクトリにコピーするのもありでしょう。
端末上でのインストール状況や/etc/apt/sources.listを見るとbookwormのリポジトリは、かのファーウェイ、huaweicloud.com上、dockerは、かのアリババ系クラウドサービスaliyun.comにある(huaweicloud.comやaliyun.comのサーバを利用している)ようです。
今回、HDMIディスプレイは使っておらず、ssh接続しているのでデスクトップは、VNCでというわけで任意のVNCサーバからtightvncserverをインストール。
Orange Pi OSでは、ディスプレイマネージャはlightdmのようなので次回起動時有効になるようにsystemctl enable。
でOrange Pi Zero 3を再起動。
Orange Pi Zero 3を再起動したら、このようにしてVNCサーバを起動。
VNCサーバ側マシンでAvahiをインストール済みでかつ、LAN内の別のマシンにVNCクライアントがある前提で、このようにしてVNCサーバに接続。
もちろん、*.localでなくともIPアドレスでも可、VNCクライアント側のユーザーが同名ならANY_USER@は省略可。
これで他のマシンからVNC越しに文字化けすることもなく、Orange Pi Zero 3上のMATEデスクトップが表示されました。
が、なぜか、[システムポリシーにより全ユーザーでネットワーク設定できません]とか、[システムポリシーによりWi-Fiスキャンは阻止されます]などと表示され、rootパスワードを要求されます。
bullseyeまでは、[/etc/polkit-1/localauthority/50-local.d/*.pkla]と適切に設定された.pklaファイルをおけば、bookwormからはpolkitに変更があり、[/usr/share/polkit-1/rules.d/*.rules]や[/etc/polkit-1/rules.d/*.rules]のように.rulesファイルを置いてaddRuleやaddAdminRuleなどの適切な関数を書けば、対処できる模様。
ただ、このbookwormにおいては、より参照優先度が高いと思われる[/usr/share/polkit-1/rules.d/]に既に[org.freedesktop.NetworkManager.rules]ファイルがあるのに、こうなる謎に、どハマり。
というか、その設定は、当該マシン上のユーザーの話で、VNC越しについては、他に設定が必要なんじゃないかと思っていますが、これ如何に。
さておき、ポップアップが邪魔ながらも操作はできるので適当にいじってみると、さすがCPU4コア/RAM4GB、デスクトップ操作もサクサク、快適です。
raspi-configよろしく、orangepi-configは、また、orangepiEnv.txtは、Armbianではarmbian-config、armbianEnv.txtです。
性能もよく、コスパも良いから残念ではあるけど、ハードはもとより、(複数あるリポジトリがどれも中国のクラウドサービスとか、サードパーティ製も結局中華製とか)ソフトも情報を吸い上げる強制力をもつ隣の大国に依存したOrange Pi系、もう買うことはないかな。