ハードウェアからサーバ・アプリまでワンストップで開発

Cassette Server

  SBC

ogochan

去年社内サーバが死んでしまった後、いろいろな環境を試してみました。

一番お手軽にはAWSの社内システム用インスタンスを流用すること、またWindowsのWSL(2)を使うこと、そしてラズパイを使うことです。

AWSは快適です。リソースが不足すれば一瞬(ってこともないけど)で増やすことが出来ます。でも、リモートで使っているため、何かの転みでパケットが詰まったりします。基本的に快適に使えているがために、この「時々詰まる」がとても気になっていました。

WSLは2になっていろいろ良くなりました。そうですね、ちょうどVirtualBoxでLinuxを使っていた時の感じに近いです。これ自体は悪くないのですが、ホスト側のリソースをそのために割くことになり、リソース配分が微妙です。また、結局VMであるが故の制約があって、その辺を超えるのも面倒臭いので、あまり使いたいとは思えませんでした。マイコンの開発のためにUSBを結構使うので、まぁ何と言うか...

ラズパイは以前は結構馬鹿にしていましたけど、他の2つよりも良いのは「ベアメタル」で使えることです。USBが自由に使えるし、トラブルシュートも割と直接的。昔は「ARMでLinuxってちっちゃい機器用だよね」と思っていたのですが、よく考えればAWSのAのつくインスタンスはARMです。ラズパイ4だと8GBまで使えるとか思うと、結構大き目のインスタンスと同じですね。最初に挙げたAWSのインスタンス(まさにAのついたインスタンスです)よりも大きい! とか考えると、これはこれで悪くないなと思えました。その時の経験が、

ESP-IDFをRaspberry Pi 4で使う方法

です。

私(生越)のラズパイ環境

リンク先のようにしてラズパイ4を開発用環境として使っていると、結構便利です。今やそれが当たり前のような気持ちになっています。

それ故、今の私の開発環境は、

Windows上でVS Codeを動かして
sshを使ってラズパイ上のファイルを編集する

というスタイルになっています。こうしておくと、ラズパイが落ちても(初期は結構落ちてた)編集が消えることもありません。本来Emacs使いの私がVS Codeを使っているのは、「今さらEmacsに固執することもないだろう」「WindowsにEmacs入れたら負け」みたいなごく個人的な考えであって、同様のことはEmacsのssh-modeを使えば出来ます。以前はそうしていましたし。

最初はこれで良かったのですが、やっぱり文書管理と言うか気軽なメモやデータシートをサーバ上に置いて気軽に参照したいなと思って、

情報共有システム(1) 背景と概要

のシステムを作りました。作りましたと言うか、件のエントリにあるようにサルベージして再スタートさせました。

それよりも先に先ず絶対に必要だったものが、会計システムだったので

会計システム hieronymus(1)

を作りました。これは最初はAWS上で作っていて、最初に書いたような事情からラズパイ上での開発にしました。

社内でのファイル共有がないと不便なので、Sambaを入れました。Sambaの環境は情報共有システムでも見えるようになっていて、いろいろ便利になりました。

サーバ環境としてのラズパイのメリットデメリット

こんなわけで去年の春以降に開発するものは全てラズパイ(4)上で行っています。

使っていると、メリットデメリットが見えて来ます。

メリット

  • とにかく使える
    たいていのものがそのまま動きます。
  • ベアメタルである
    USB使う時の悩みが少ない
  • 小さい
    場所取らないのはとても良いです

デメリット

  • すぐ壊れる
    はっきり言ってSDカードでは使いものになりません。今は外付けUSBディスクにつないでいます
  • 軽過ぎる
    ケーブルを引っぱっただけで動いてしまうのはちょっと困ります
  • 電源が不安
    USB-Cで差してるだけですからねぇ

この他に、ARMにうまく対応できてないソフトがあったりするのでそれはちょっと困るのですが、今のところ諦めてしまえば良い範囲なので良いかなと思ってます。

こんなわけでとても便利に使えるのですが、不満もちょっとあるので何とかしたいところです。

ちょうど折良くPiunoraのクラウドファンディングがありました。詳しくはリンク先を見てもらえればいいのですが、「顧客の本当に欲しかったもの」がここにあります。

CM4を使ったArduinoみたいなもの。裏にはM.2コネクタがあります。つまり、SSDが使えるわけです。

このクラウドファンディング中にSD以外からもブートできるファームになったりしていますから、信頼性の一番のネックであったSDカードなしで運用できるようになります。1枚買ってあります。

ハードウェアとしての改良

CM4の応用を見ていると、このようなボードは結構あることがわかります。AliExpressにも結構あります。

実は「M.2コネクタのついたマイコンボード」は前から興味があって、いろいろ探していました。ラズパイ以外でも探すと結構出て来ます。ただ、CM4を使ったもの以上のコスパの良いものはないようです。

そんなわけでラズパイ(みたいなもの)でも十分サーバにできるという機運が高まって来ました。

こんなのとかも、「いいところ突いてるな」と思いますね。もちろん裏側にはM.2コネクタがついています。おそらくEthernetはUSBの先についている(ラズパイ3までと同様)とは思いますが、M.2が出ていればそこまでI/Oが高速である必要もなりません。それに何が一番良いって、カードの横にコネクタが出てないのが一番良いです。次に良いのは、HDMIがフルサイズであること。作った人は良くわかってますね。CSIが2つあるって、StereoPiがいらなくなったりしません?

電源が不安定だという問題は、UPSと言うか電源を内蔵してしまえば良いわけです。

実は既にこのようなボードは結構あって、

こんな感じのものが結構出ています。このボードだと裏側に18650がつくようになっていますね。

こういったものを1つ買って試してみたのですが、結構いい感じでした。使い方の問題もあるのでしょうが、結構長い時間無給電状態になっても使えます。稼動中に電源抜いて家に持って帰っても、余裕で使うことができます。私程度の使い方だと、4時間とか使えます。

問題は、いい感じの筐体がないし、この形状だとあってもゴロゴロした形になってしまうので、無骨だなというくらいです。

そこでまぁ、「ないなら作ってしまえよ」という気持ちもあって、UPSを内蔵したもっと薄い感じになるボードを設計しました。筐体サイズもやたらに大きくても困るので、「3.5" HDDと同じサイズ」ということにしました。設計してみると厚さの問題が一番厳しかったですね。ラズパイをファンレスで使うのはいろいろ危険なので、ファンとヒートシンクの組み合わせとか、なかなか難しいです。また、金属筐体にするといろいろ楽なんですが、WiFiが動かなくなっても困るので、試作としては木製です。木は削ることは簡単ですが、薄くなると割れてしまって厄介です。そういった意味でこの2つ上の写真のキャリーボードは良くできているなと思います。

設計自体はいい感じに出来ました。部品もちょうどなくなる寸前くらいにそこそこの量を確保したので、あとは製造に出せば試作くらいは出来るようになっています。

サーバ管理ソリューション

そこまで行くと、商品にする方向とかも考えられなくもないのですが、昨今の半導体やコネクタ不足のこともあって、ちょっとそこまでは考え辛いところです。欲しいなって声があれば作らないこともないですけど、お店で売る程作れそうにはないですね。

そういったこととは別に、私は昔から「サーバはもっとコモディティになればいい」と思っていました。これはいろんな理由があって詳しくは個人ブログの方でも書こうと思うのですが、とにかくもっと手軽に誰でも持つくらいのものになればいいなと思っています。WSL(2)やAWSでも良さそうに思えますが、独立した個人所有のサーバはそれ以上にメリットがあります。同じ理由で、サービスの分散化には強い関心があります。また、GUN.jsやXMPPとかも興味の対象です。いわゆるGAFA的な「でっかいウェブサービス」みたいなものよりは、P2P的なものとかGitHub的なものの方が将来性を感じます。その方がインターネットらしいですし。

サーバがコモティディ化した時に必要なのは、「手軽にサーバを管理すること」です。まさか1万そこそこで購入できるラズパイに、月○万円かけてサーバ管理を委託するのは馬鹿げています。でも、サーバがサーバとして威力を発揮するためにはインターネットにつながる必要があって、そうなると「ラズパイ」と言えども「ちゃんとしたサーバ」として管理してやらないといけない、そこを怠るとロクなことにならないですし、現にシャレにならない状況もあったりします。世の中に踏み台にされているラズパイは結構存在しているようです。

そこで、サーバをコモディティーにするためには、「ハイコストパフォーマンスなサーバ管理ソリューション」が必要になります。要するに、安く安全に使えなきゃいけないわけです。

ということで、去年の夏過ぎたあたりから、そういったものを書き始めました。「いろいろすぐに商品にならないものを作ってて暇なのか」と言われそうですが、実案件(=金になる仕事)が少ないのと、受けている案件も「待ち」が多いので、実際暇なのです。

これはいわゆる「WebAdmin(Webmin)」の延長上にあるものですが、

  • Node.js製
    今時リアクティブに動くなんて当然ですね
  • API装備
    外部アプリから操作したり、複数サーバを一括管理するといったことが可能
  • モジュール機能
    管理対象が増えたら必要でしょう

といった特徴を持ったものを作っています。もちろん現代なので、IoT的な方向性も当然考えています。ソフトと書かずに「ソリューション」と書いたのは、そういったことです。

これも使いものになるレベルになった時点で、AGPL 3くらいのライセンスで公開したいと考えています。これ自体は、「ラズパイ」に限らずどこでも需要はあるでしょうし。

最近のエントリー

会計システム「Hieronymus」の現状

OrangePi5にZabbixをインストールする

レビュー等の依頼について

オープンソースのノートアプリ「SiYuan」 - CasaOS AppStoreレビュー

お気に入りの色さがし1

創立記念日

現在の営業品目(2)

現在の営業品目(1)

SPDX License Listをデータ化した

Orange Pi5でC3TR-Adapterを試す

CasaOS上で会計システム「Hieronymus」を動かす

会計システム「Hieronymus」v1.0.0 リリースしました

CasaOSでファイル同期アプリSyncthingをセットアップする

第11回 Freshmeat

オープンソースノーコード「Activepieces」でワークフローを作る

RaspberryPiにパーソナルクラウドOS「CasaOS」を導入する

sequelize-cliでdb:migrateすると「SyntaxError: Unexpected token ':'」が出る

LED行燈の試作(2)

CMSの社内向けサービスのリニューアル

LED行燈の試作(1)