著者:コーリー・ミニヤード、モンタビスタ・ソフトウェア
MontaVistaでは、組み込みシステム構築のベースとしてUbuntuやCentOSを使用している多くのエンジニアや開発者と話をしてきました。これらのOSには多くの利点がある一方で、最初から明らかではないいくつかの欠点も存在します。
念のため申し添えますが、MontaVistaはYocto、CentOS、Rocky、Ubuntuをはじめとする様々なLinuxディストリビューションをサポートしています。そのため、特定のソリューションに偏った利害関係はありません。しかし、お客様が短期的な判断によって長期的に苦しむような事態も避けたいと考えています。このブログでは、YoctoとLinuxディストリビューションの両方について解説し、組み込みLinuxプロジェクトに最適なビルドシステムを選択するための情報を提供します。
ディストリビューションを使う理由とは?
Linuxを使い慣れているエンジニアにとって、ディストリビューションは簡単に使い始めることができます。システムにインストールし、作業中にシステム上でコンパイルするだけで、すべてがスムーズに動作します。その後、プロジェクトに必要なパッケージを必要に応じてインストールすればよいのです。
一方で、Yoctoを初めて使う人にとっては、多少戸惑うこともあるかもしれません。例えば、必要なものを具体的に指定したり、パッケージングや作業方法を理解したりする必要があるからです。難しいわけではありませんが、慣れるまでには時間がかかります。学習曲線の急峻さが、特に初心者にとってYoctoを使いたがらない理由の一つとなっていることが多いのです。
では、ディストリビューションの何が問題なのでしょうか?
システム開発や試行錯誤を始めると、オペレーティングシステム(OS)の管理にはある程度の規律が必要だと気づくでしょう。開発者はそれぞれ独自のディストリビューションを使用しており、それらは互いに異なります。すべてを連携させようとすると、必ず問題が発生します。
OSを規律正しく管理するためには、管理担当者を任命した「ゴールドイメージ」を作成します。そして、真に規律正しく管理を行うのであれば、そのゴールドイメージを作成するための手順を定めます。例えば、製品にパッケージを追加したい人は、ゴールドイメージに追加するための手順を踏む必要があります。
ビルドシステムは、ゴールドイメージを受け取り、ターゲットシステムにインストールするためのすべての要素をそのイメージに組み込むことができなければなりません。
その後、システムを現場にリリースし、次のリリースに取り掛かります。この場合、新しいゴールドイメージとともに古いゴールドイメージも管理する必要があります。さらに、保守チームは元のリリースのバグ修正とセキュリティアップデートを管理しなければなりません。こうして、ゴールドイメージの連鎖が突然発生します。顧客が古いバージョンを使用している場合、再現と修正のためにこれらのゴールドイメージに戻る必要があります。このように、イメージの保守は非常に複雑な作業になる可能性があることは容易に想像できます。
ソフトウェアが大規模化するにつれて、ターゲット上でのコンパイル処理がボトルネックになります。ビルド専用のハードウェアが必要になるため、ビルド環境の管理が複雑になります。例えば、ARMアーキテクチャをターゲットとする場合、ビルド専用の高速なハードウェアが必要になるかもしれません。
そして最後に、設計者はデバッグやテストのために、ターゲット上に開発用ソフトウェア(デバッガー、strace、valgrindなど)をインストールしたいと考えることがよくあります。しかし、最終ターゲット上にこれらのソフトウェアをインストールすると、肥大化やセキュリティ上の問題が発生する可能性があります。そのため、開発用とリリース用の2つのゴールドイメージを用意し、常に同期させておく必要があります。もし何かを見落としてしまったらどうなるでしょうか?それは、さらに複雑になることを意味します。
では、Yoctoはどのように役立つのでしょうか?
以下の表は、Yoctoとディストリビューションベースのシステムを比較したものです。次のセクションでは、さらに詳しく説明します。
| ヨクト | ディストリビューション |
| 簡単に組み立てられるターンキー方式 | 複雑な構造 |
| 標準的なPCハードウェアをベースに構築する | ターゲットアーキテクチャに基づいて構築する必要がある |
| ビルドにrootアクセスは不要です | インストールにはroot権限が必要です |
| ビルド出力は直接インストールできます | インストールプロセスが必要です。 |
| アップデートプロセスの一部を管理する必要があります | アップデートは自動的に処理されます |
| IT担当者が管理するのはそれほど簡単ではない | IT関係者には馴染み深い |
| 設定はgitで管理できます | 設定は複雑で自動化が難しい。 |
ビルドの複雑さの管理
Yoctoを使えば、たった一つの小さなパッケージ記述に基づいて、誰でもゼロからシステムを構築できます。特定のバージョンに基づいて、Gitリポジトリ、tarball、Mercurialなど、あらゆるソースから必要なファイルを取得できます。Yoctoには、ファイルをローカルに自動的に保存する機能があるため、インターネット上でファイルが失われる心配もありません。
Yoctoからはファイルシステムとして完全な起動可能なイメージが得られるため、ほとんどの組み込みターゲットへの展開が容易になります。
さらに、Gitなどのバージョン管理ツールを使用してシステムの説明を管理できます。ユーザーはブランチを作成して作業を行い、通常のソフトウェア開発と同様にそれらをマージできます。また、リリースにタグを付けることで、再現性を高めることも可能です。
一般的に、Yoctoは複雑なビルド環境の管理を容易にします。ビルド構成は標準的なバージョン管理ツールで管理されます。ビルドは市販の標準ハードウェア、またはオンデマンドのクラウド上で実行されるため、ビルドシステムの管理が簡素化されます。ターゲットはテストと開発のために解放されます。さらに、ビルドは高速ハードウェアで実行できるため、ビルド時間を短縮できます。
Yoctoを習得すれば、最終的には開発が容易になるでしょう。
カスタマイズと完全機能ビルド
独自のカーネルを使用している場合、Yocto を使うと作業が楽になります。カーネルの設定変更をシステム記述の一部として指定できるからです。
実際、Yoctoは、設定ファイルの変更、コンポーネントの調整、パッケージの不要な部分の削除など、ほぼあらゆるものを簡単にカスタマイズできるように設計されています。また、調整なしで完全に機能するものをビルドすることも可能です。
Yoctoには、ビルドの種類に応じてビルド内容を指定する方法があります。同じ構成ファイルから開発ビルドと最終ビルドを作成し、フラグを設定するだけで切り替えることができます。
もちろん、YoctoはRPMのようなパッケージングシステムを使用できます。Yoctoはそれらを自動的に生成できるため、ターゲット上のソフトウェアを管理できます。
Yoctoを使用するその他の理由
ターゲットシステムが(ストレージ容量、メモリ、処理能力など)単純に小さすぎて構築が困難な場合は、別のシステム上で構築する必要があります。Yoctoを使えば、これをより簡単に、間違いなく自分で構築するよりもはるかに簡単にできます。
Yoctoを使えば、root権限がなくてもターゲットシステムを構築できます。これにより、イメージを作成するためにroot権限を持つシステムが必要なくなるため、ビルドのセキュリティが向上します。
ディストリビューションを使用する理由
とはいえ、Yoctoにもいくつかの欠点があります。システムがIT担当者によって保守される環境で使用される場合、彼らは標準的なディストリビューション形式の構成の方がはるかに使いやすいと感じるでしょう。半組み込み型のシステムであれば、ディストリビューションの方が理にかなっているかもしれません。
場合によっては、特定のディストリビューションでしかサポートされていないソフトウェアを使用していることがあります。そうなると、当然ながら行き詰まってしまいます。
迅速なプロトタイピングの場合、Yocto を知らないと開発速度が遅くなります。しかし、cmake、ninja、autotools などの標準ツールを使用してソフトウェアを構築している場合は、Yocto がこれらのツールを適切に処理してくれるので安心です。また、パッケージングシステム (RPM、Debian など) を使用して構築している場合は、すべての依存関係を把握しておく必要があります。移行は簡単です。怠けて、Makefile だけを用意し (Yocto はそれも処理できますが)、ターゲット上でビルドし、パッケージングシステムを使用しないという罠に陥らないようにしましょう。移行が早ければ早いほど、より良い結果が得られます。
さらに、ディストリビューションはアップデートプロセスを管理してくれます。「yum install」または「apt install」を実行するだけでアップデートできます。もちろん、アップデート後にテストが必要な場合は、自分でテストを行う必要があります。Yoctoでは、このプロセスにユーザー自身が参加する必要があります。アップデートはパッケージアップデートとして取得され、その後、システムを構築してアップデートを配布する必要があります。この作業を支援し、データの配布を管理する企業やツールはいくつかあり、サーバー管理を行うものもありますが、それらはユーザーにとって負担となる可能性があります。
結論
では、ディストリビューションとYoctoは、それぞれどのような場合に使い分けるべきでしょうか?
YoctoとLinuxディストリビューションの間には、多くの点で違いはありません。標準的なOTA(Over-the-Air)アップデートオプションが利用できます。どちらでもsystemdを使用できます(Yoctoではinitも使用できます)。ターンキー方式の部品表(BOM)を取得できます(ディストリビューションがどのようにこれを実現しているかは不明ですが、Yoctoではビルドから自動的に除外されます)。ビルド方法以外にも、Yoctoは、完全な開発ソフトウェアやその他あらゆるものを含む、かなり一般的なLinuxインストールを生成できます。Yoctoは、非常に小さな組み込みイメージやその中間のあらゆるものを生成できます。さらに、YoctoとLinuxディストリビューションの両方でコンテナを使用し、通常のRPMリポジトリを使用できます。
通常のIT担当者が管理しない、完全組み込みシステムを構築していますか?(IoT向けのリモート管理ではなく、サーバー室のような環境での管理を想定しています。)インストーラーを経由せず、直接インストールできるビルドを簡単に自動化および再作成できる機能が必要ですか?誰でも簡単に「ボタンを1つ押すだけでビルドが完成する」ようなシステムを求めていますか?もしそうなら、Yoctoの使用を強くお勧めします。長期的に見れば、きっとあなたの作業効率が向上するでしょう。
現場で使われることのない、手っ取り早いハックをしようとしているのですか?それとも、よりIT環境向けのシステムを構築しようとしているのですか?ソフトウェアに制約があり、ディストリビューションの使用が必須ですか?もしそうなら、ディストリビューションの方が適しているかもしれません。
さらに、Yoctoを使用する場合は、事前に少し時間を取って学習する必要があります。Yoctoには習得に時間がかかりますが、それは最終的にビルドとサポートを管理するために必要となる作業に比べれば、取るに足らないものです。
MontaVistaの専門家にお任せください!
Linuxの商用化におけるリーダーとして、20年以上にわたり数百社もの企業や組み込みアプリケーションに携わってきた実績を持つMontaVistaは、Linuxのサポートと長期メンテナンスにおいて信頼できるパートナーです。当社は、多様な市場における様々な組み込みLinuxシステムプロジェクトや課題に関する専門知識を有しています。MontaVista LinuxからCentOS、Rocky Linux、Yocto、その他の組み込みLinuxディストリビューションまで、MVXpertとして知られるMontaVistaのプロフェッショナルサービスは、汎用技術とお客様固有のユースケースとのギャップを埋め、プロジェクト要件を満たすことを保証します。
Please reach out to discuss your particular scenario today.