English

お問い合わせ

BLOG

セミナーレポート

組込みOS最前線 #3 継続的なアップデートのための方法

組込みOS最前線 #3 セミナーに参加した記者による各セッションのレポートをお届けします。

継続的なアップデートのための方法

サイバートラストでは、IoTや組込みLinuxの最新動向を紹介するセミナーを開催しています。組込み機器におけるLinux OSの利用を推進するために、組込みOSや関連技術、コミュニティの動向などを共有することを目的にしたものです。

ここでは、6月21に開催されたセミナー「IoTデバイス保守編」から、市川正美氏のセッション「継続的なアップデートのための方法」の模様をレポートします。

市川氏のセッションでは、組込みLinuxでのCI(Continuous Integration:継続的インテグレーション)の意義やツール、そしてLAVAを使ったCIの例について解説されました。

サイバートラスト株式会社 市川正美

CIでビルドやテストを自動化

市川氏はまず、継続的な開発を進めるにあたって難しい点として、パッケージが更新されたときに、それをテストしなくてはならないため、パッケージの更新に追いつけないことを挙げました。

継続的な開発には、コーディング、ビルド、テストのサイクルを早く回すのが重要です。テストに時間がかかると、問題となった箇所のコードをまた思い出さなくてはならないことにもなります。そのため、ビルドやテストの自動化が必須になります。

CIとは、基本的にはこの自動化のことです。CIによって問題点の早期発見・修正が可能になります。

実行するタイミングは、プルリクエストがマージされたときや、毎日深夜など、いろいろあります。ただし、待ち時間が長いと問題となるため、スモークテストはすぐ、インテグレーションテストは夜中など、テスト内容によって使い分けることを市川氏は勧めました。

組込みLinuxのテストで必要なこと

続いて、組込みLinuxでのテストについて市川氏は説明しました。

まず、動作するための土台をテストする必要があります。サーバーLinuxなどとは違い、便利なディストリビューションがないからです。そのうえで、アプリケーションをテストします。

組込みLinuxの場合には、実デバイスでテストしなくてはならないこともあります。そのためには、そのデバイスがシリアルなどでアクセスできること、カーネルやアプリケーションを手動で書き込まずに利用できること、電源のオン・オフを遠隔操f作できることが必要です。

組込みLinuxの重要なテストとして、ビルドのテストとブートのテストがあります。これらが成功して、はじめてアプリケーションのテストができます。

そのため、テストは基本的なところから始めます。ビルドのテストとブートのテストのうえで、実デバイスの前にQEMU(オープンソースのプロセッサエミュレーター)でテストします。それが成功したら、実際のデバイスでテストなど、次のステップに進めます。

さまざまなCIツールとテストツール

次に、CIによるテストのためのツールを市川氏は紹介しました。大きく分けて、CIツールと、その下でテストを実行するツールがあります。

まず、CIツールのJenkins。Javaで作られ、簡単に動かせ、プラグインが豊富です。マスタースレーブ機能があり、スケールしやすいのも特徴です。「ただし、なんでもできるが、シリアル接続などちょっと変わったことをしようとすると難しいこともある」と市川氏は説明しました。

次に、CIツールのLAVA。Linaroが開発したLinux独自のCIシステムです。Jenkinsと違い、テストの実行に注力し、ビルドは別システムに任せているのが特徴です。QEMUや実デバイスでのテストの実行もサポートしています。テストシナリオはYAML形式で、lava-test-shellコマンドで実行できます。

CIツールのKernelCIもあります。Linuxカーネルのテストにフォーカスしたもので、LAVAとJenkinsをバックエンドに利用しています。

テストツールとしては、まずLTP(Linux Test Project)です。Linuxカーネルのテストのツールで、メジャーなCVEに対するテストケースも入っています。

次にテストツールのptest。Yoctoプロジェクトによるもので、ビルドシステムにYoctoを利用している場合に使います。テストコードのビルドイメージへのインストールや実行をサポートし、ターゲットマシンで実行できるようにしてくれます。

そのほかのテストツールとして、ktestもあります。Linuxカーネルに含まれるテスト実行ツールで、「どちらかというとLAVAに近い」と市川氏。実デバイスとエミュレータでの実行をサポートしています。

さらにテストツールとして、kselftestもあります。これもLinuxカーネルに含まれ、カーネルの機能ごとにテストが用意されています。たとえば、カーネルメンテナーに取り込んでもらうときに使うものです。

LAVAのテストシナリオの例を紹介

最後に市川氏は、LAVAテストシナリオの書き方を簡単に解説しました。

主な設定は、deploy、boot、testの3つ。deployでは、カーネルやrootfsをどうやってテスト環境に持っていくかを指定します。bootでは、ログイン時のアカウント情報などを指定します。testでは、実際のテストの内容を指定します。

市川氏は、実際のLAVAのYAMLファイルを見せながら、「ブートまわりであれば簡単にテストが書ける」と説明しました。

まとめとして市川氏は、一連の話を要約しつつ、「簡単なところから始めていけばいいと思う」とし、簡単かつ重要なものとして、まずはビルドのテストやブートのテストを自動化することを勧めました。

組み込みLinuxのテスト方法については、プロジェクトに関わった人以外は、普段、話を聞く機会がないことも多いのではないでしょうか。今回は、エンタープライズ向けアプリケーション開発にもよく利用される Jenkinsを利用した方法ということもあり、興味深い内容になったと思います。

6月21にに実施されたセミナーからのレポートもこれで終了となります。これからも、組み込みLinux関連の役に立つ情報を提供してまります。次回をご期待ください。