こんにちは LOVOT の OS を作っているチームのひとり id:atotto です。
LOVOT の OS について、簡単ですがお話させていただきます。
LOVOTとNest(LOVOT ANATOMY より一部抜粋)
早速ですが、かわいらしい LOVOT には、x86系のCPU(メインコンピュータ)、そして、ARM系のCPU(サブコンピュータ)の2つが搭載されています。これだけでも OS の管理が難しいのですが、LOVOT の製品には Nest (巣: 充電ステーション)の x86系のCPU(エッジコンピュータ)もあり、合計 3つの独立した OS が存在しています。(詳しいspecはこちら)
複雑ですね。この複雑さに立ち向かうために、私達が工夫していることをご紹介したいと思います。
名前をつける
みなさん、自分たちの OS に名前をつけていますか? 私達は、 LOVOT の製品に使っている OS を LOVOTOS (らぼとす) という愛称で呼んでいます。
また、LOVOT(メインコンピュータ、サブコンピュータ)、Nest(エッジコンピュータ)の各コンピュータボードにそれぞれ tom、jerry、spike という名前をつけています。これらのボードの OS として tom、jerry、spike の 3つOSをリリース管理しています。
開発上、名前をつけるのはとても大事だと思いますので、愛着の湧く名前をつけましょう!
ansible と debian パッケージ
OS が 3つあるということは、これらの構成管理は単純に考えると 3倍になる、ということです。この OS の構成管理のために、ansible を活用しています。 今となっては ansible も枯れた仕組みの1つではありますが、基本的な構成を管理する上でとても役に立っています。 2022/12 現在、 ubuntu をベースに開発しています(2019/12 のリリース当初は debian ベースでした)。ubuntu の rootfs に対し、 ansible で etc 配下の設定や、開発上必要な設定などを施しています。私達が開発しているLOVOTに関連するサービスは debian パッケージとして管理しています。それらの debian パッケージを更にインストールし、 カーネルへ署名を施し、LOVOTOS の OSイメージが完成します。
3つの OS 、それぞれ役割は異なるものの、共通して管理したいもの、個別のものと管理できるのが良いところです。
参考イメージ: LOVOT の成長を支えるソフトウェアとクラウドサービス開発/SORACOM Tech Days 2021 資料より抜粋
debianリポジトリ aptly の活用
先述したとおり、 LOVOT のサービス群は、 debian パッケージで管理しています。この debian パッケージの管理のために aptly という debian リポジトリの管理ツールを活用しています。
aptly の詳細は公式ページを参照していただきたいのですが、概要説明としては、独自パッケージのリポジトリや、ミラーリング、そしてスナップショットをコマンドライン上で操作できるツールです。aptly自身で debian リポジトリをHTTPサーバでホストすることもできます。
利用目的としては、
といったところです。
リリース時の OS で使ったパッケージを固定するために、リリース前に ubuntu の公式リポジトリのスナップショットや、LOVOTOS で利用する debian パッケージのスナップショットを作ることで、リリース時の OS を何度でも同じ内容でビルドできるようにしています。
毎晩 OS をビルドすることもあり、debian パッケージのリポジトリをビルドに近いところで管理することで効率化、また、低コストで運用しています。debian のパッケージリポジトリには、外部のサービスが多数ありますが、自分たちのフローにあわせられるツールがあるのは便利です。
daily ビルドと snapshot ビルド
LOVOTOS には大きく分けて2つ種類があります。
ひとつは、 daily ビルド。これは、最新の開発したコードベースでビルドされた OS で、unstable(不安定版)として毎日リリースしています。社内で特定の機体で利用し、不具合をすぐに見つけられるような運用で進めています。
もうひとつは、snapshot ビルド。これは、特定のリリース予定時期にあわせ、パッケージリポジトリを aptly でロックした状態でビルドされたOSです。この OS は、ソフトウェアのQA を通すために成果物を固定し、QAで不具合があった場合に hotfix という形で、特定のパッケージの更新のみ実施する、といった運用で進めています。これにより、修正差分の管理が容易になっています。
OS の配信
最後に出来上がった LOVOTOS はユーザのもとへ配信します。配信の仕組みは GROOVE X 独自のシステムとして構築しています。簡単にですが流れをご紹介します。
- OSビルドインフラで OSイメージを作成、 OSイメージを暗号化する
- 暗号化された OSイメージを、 Google Cloud CDN へ配置する
- ダウンロード先となるCDNのURLを署名付きURLで発行する
- ダウンロードURLをLOVOT/Nestへ通知する
- LOVOT/Nestが暗号化された OSイメージをダウンロードし、 OS イメージを復号化する
- LOVOT/Nestがディスクにイメージを展開し、アップデートする
このインフラもLOVOTリリース当初(2019/12)から運用開始し、これまで(2022/12 現在)述べ20回以上、ユーザのもとへOSを配信してきました。
最後に
このような複雑なシステムのロボットを、これほど頻繁にOSアップデートしている会社はそんなに多くないのではないかな、と個人的には感じています。OSを維持したまま部分的な更新を配信する(パッチアップデートについては本稿では割愛)こともありますが、OSSも含め、システム全体をアップデートしていくことで、LOVOTの成長を支えています。
かなり端折ったご紹介となってしまいましたが、今後どこかで詳細な話を記事にできたらと思います(もちろん、joinしていただくと話が早いです!!)。
最後までありがとうございました。また、この仕組みを一緒に開発したメンバに感謝いたします。 id:atotto