今回はYocto Projectのワークフローについて解説します。執筆時点(2017年7月)ではLegacyのSDKとexternal SDK(eSDK)が共存している状態です。従来の使いにくいところを改善しようとして新しいワークフローへ向かって動き出していますので、事前に抑えて準備しておきましょう。
参考文献
主に下記のページ、スライド、動画を参考にしています。Wikiについては執筆時点から内容が変わることがあります。
- Developer Workflow Improvements
- Application Development with Extensible SDK
- Yocto Project Extensible SDK: Simplifying the workflow for application developers – Embedded Linux Conference 2017 (下記動画のスライドPDF)
ワークフローのキー
ワークフローのキーとなるツールが下記の4つが挙げられます。
- devtool:レシピの編集を容易にするツール。過去の記事で紹介済。
- Toaster:bitbakeのフロントエンド。Yocto Project Japan勉強会#3で紹介済。
- eSDK:Extensible SDK。更新可能で必要に応じてパッケージを取得する最小構成で配布可能。従来数百MB〜1GBを超えていたようなSDKが35MB程度に収まる。
- CROPS:Cross-platform development framework。Dockerコンテナを活用し開発環境を容易に構築できるようにする。LinuxにとどまらずWindows/Mac OSも視野に入れる。
devtoolとToasterについては過去の勉強会・ブログ記事で取り上げていますので、主にeSDKについての解説と全体の連携について解説していきます。CROPSはところどころ名前が出てきますのでなんとなく雰囲気はつかめると思います。
2つのワークフロー
ここまで「ワークフロー」という言葉を使ってきましたが、下記2つのワークフローがあります。
- レイヤーメンテナンス
- レシピのバグフィックス、および更新。
- アプリケーション開発
- PokyもしくはToasterで生成したminimal eSDKインストーラーでeSDKをインストール。
- eSDKでiterativeにdevtoolを使ってcreate/modifyする。
- アプリケーションが完成したら、レシピはレイヤに取り込まれる。また、Toasterがイメージを作成する。
ビジョン
いくつかにわけてビジョンが説明されています。上記ワークフローの中でもより詳細に見た場合に当たります。
OSイメージのビルド
- PokyおよびToasterをコンテナとして起動してビルド。
- ビルド後、検証(Validate)、発行(Publish)も行います。
eSDKの作成
- 上記のOSのビルドと同時にeSDKを生成します。
- 発行(Publish)
- eSDK installer / updater
- これにより、新規の場合はインストール、eSDKインストール済みの場合は更新が行えるようになります。
- shared state
- 従来もSSTATEキャッシュはサーバ指定での共有が可能でしたがeSDKに指定を含める形になり、より積極的にキャッシュを活用してアプリケーション開発者側でのビルド時間の短縮が期待できます。
- 上記で紹介の動画の中ではイメージビルド35分→1分に短縮できたと言及がありました。
- eSDK installer / updater
アプリケーション開発
セットアップ
- Docker Volumeの作成
- eSDKコンテナを使用してvolumeにeSDKをインストール
- コマンドラインで開発
- オプショナルでEclipseとCROPS(すなわちWin/Mac環境でも)も使用可能。
開発
- eSDKコンテナでdevtoolかEclipse Plug-inを使用して開発。
- devtool addでURLを指定することで必要なソースコードがダウンロードされる。
- devtool / Eclipse でビルド、ターゲットへのデプロイ、イメージのビルド、検証(validate)を実施。
レイヤーメンテナンス
- devtool modify で更新。
- アプリケーションごとにiterativeに開発。
- 更新完了したレシピを発行(publish)する。
3の部分が少しわかりにくいかもしれませんが、ここが新しいワークフローの肝だと思われます。参考となるスライドと動画は下記です。
- Yocto Project Extensible SDK: Simplifying the workflow for application developers – Embedded Linux Conference 2017 のpp.21-34
- YouTube : Yocto Project Extensible SDK: Simplifying the Workflow for Application Developers – Henry Bruce 25:35〜
ここでは4名の開発者が登場します。レイヤやeSDKのメンテナンスはBubbaが行っています。eSDKサーバは全員が参照していますが更新はこのBubbaだけが行えます。
- Bubba:レシピやeSDKのメンテナ・責任者
- Joe:ライブラリの開発者
- Laurie:アプリケーション開発者
- Betsy:サードパーティのアプリケーション開発者
Joeが開発したライブラリ用のレシピはBubbaがCIで検証後、eSDKサーバにpublishされます。他の開発者(Laurie, Betsy)はeSDKを更新することでJoeの開発したライブラリを利用できるようになります。
Joeがライブラリ向けのレシピを開発する際にも必要なパッケージが足りない場合は、SDKの管理者に依頼して入れてもらうことを待たずに、手元で好きなパッケージを追加することができます。
また、Laurie, Betsyについてもアプリケーションをレシピとして完成したあとはBubbaにレシピを渡すことでeSDKに含めてもらうことができるようになります。
devtoolとeSDKの組み合わせでうまく分散して開発ができるようになりました。
現状
OSのビルドについて
- Pokyコンテナ(コマンドラインベース):とりあえずはこちらを使用する。
- Toasterコンテナ(Web I/F):まだ未熟。eSDKの生成などがまだできない。
ビルドと発行(publish)について
eSDKを生成する場合の設定は下記のようにするようです。SSTATE_MIRRORについて注意事項があるので、原文を参照してください。ここでは雰囲気がわかるように簡単に記載しておきます。eSDKのタイプをminimalに、eSDKとSSTATEキャッシュのパスを指定しています。
SDK_EXT_TYPE = "minimal" SDK_UPDATE_URL = "http://my.server.com/path/to/esdk-update" SDK_INCLUDE_PKGDATA = "1" SSTATE_MIRRORS = "file://.* http://my.server.com/path/to/sstate-cache/PATH
eSDKのビルドとPublishは下記です。普通にコピーしていたりするので、このあたりはもう少しコマンドで簡単になりそうな気がします。
bitbake my-image -c populate_sdk_ext oe-publish-sdk tmp/deploy/sdk/distro-image-toolchain-ext-ver.sh /var/www/html/path/to/esdk-update cp -r build/sstate-cache /var/www/html/path/to/sstate-cache cp tmp/deploy/sdk/distro-image-toolchain-ext-ver.sh /var/www/html/path/to/sdk-installer.sh
アプリケーション開発について
eSDKのインストール方法は下記のようになります。
mkdir /path/to/esdk/workdir docker run --rm -it -v /path/to/esdk-workdir:/workdir crops/extsdk-container --url https://downloads.yoctoproject.org/tools/support/workflow/poky-glibc-x86_64-core-image-minimal-i586-toolchain-ext-2.2.sh
まだない機能
新しいワークフローはまだ発展途上でまだ実現できていない部分もあるようです。Wikiを参照して書いていますが、すでに実現されているものもあるかもしれません。
- Toaster関連:いくつかありますが、eSDKの生成やレイヤのPublishあたりが大きそうです。一旦はToasterの活用は様子見、もしくは使えるようになるようにコントリビュートしていくことになります。
- CROPS:Application Builder(なにものか不明)が未実装。eSDKコンテナは動くっぽい?
- CROPS:Eclipse関連が未実装。in progress。
まとめ
eSDKを中心に新しいワークフローについて確認しました。まだ完成はしていないようですが、このようにワークフローが変わることを見越して、準備を進めていくと良いのではないでしょうか。eSDKの使い方については Yocto Project cookbook が公開されていますので次回は実際にeSDKを触ってみようと思います。