This service is available only in Japanese-language.

イメージ間で使用するパッケージバージョンを変更することはできるでしょうか。

【質問】
・イメージ間で使用するパッケージバージョンを変更することはできるでしょうか。

【具体例】
・core-image-xxxでは、readline 5.2を使用する
・core-image-yyyでは、readline 8.2を使用する
※5.2と8.2のレシピは既に存在するものとします。

【余談】
・以下のような対応を行っても、効果がありませんでした。
・レイヤの優先度が高い5.2が両イメージで採用されてしまいます。
 ・core-image-xxx.bbに、PREFERRED_VERSION_readline = "5.2"を記載する
 ・core-image-yyy.bbに、PREFERRED_VERSION_readline = "8.2"を記載する
・もちろん、distroのconfやlocal.confのPREFERRED_VERSION_readline = "x.x"を書き換えれば、バージョンを変更できるのですが、イメージのビルドの度に書き換えることをあまりしたくありません。

本件いくつか確認させてください。

* core-image-xxx.bbとcore-image-yyy.bbは別のレイヤに格納されている想定でしょうか?
* readline_5.2.bbはどこに格納されているでしょうか?(自作レイヤ?)
* YPのバージョンはScarthgapという認識でよろしいでしょうか?

core-image-xxx.bbとcore-image-yyy.bbは別のレイヤに格納されている想定でしょうか?
> 同じレイヤです。

readline_5.2.bbはどこに格納されているでしょうか?(自作レイヤ?)
> 自作レイヤです。
  core-image-xxx.bb、core-image-yyy.bb、readline_5.2.bbは同じレイヤです。
  現在、自作レイヤの優先度は最も高い状態です。
  したがって、PREFERRED_VERSION_readline = "8.2"を記載しなければ、5.2が自動的に使用される状況です。
  (余談:5.2を導入した背景ですが、製品イメージでは5.2(GPLv2)、デバッグイメージでは8.2(GPLv3)を使用したいからです)

* YPのバージョンはScarthgapという認識でよろしいでしょうか?
> YESです。

P.S みつきんさんのyoctoブログは楽しく拝見させていただいております。とても参考になります。ありがとうございます。

本件回答します。
結論から申しますとイメージレシピによる切り替えは不可能です。

PREFERRED_VERSION変数は、どのレシピを処理するかを決定するための変数でレシピで記述されても効果がありません。
イメージの切り替えはそれぞれのイメージレシピでの定義となるため、今回は要件を満たすことができません。

BitBakeの実行フェーズは基本的に以下のようになっています。

1. confのパース
2. レシピのパース
3. inline pythonの処理
4. override処理
5. 各タスクの実行

PREFERRED_VERSIONはこの内1のフェーズで処理されます。
2の時点ではどのレシピがパースされるか決定してしまっているので、レシピの中にPREFERRED_VERSIONがあっても効果がありません。

コマンドの切り替えでreadlineバージョンを切り替えたい場合、
以下のような方法が考えられます。

* DISTROによる切り替え

具体的には以下のような手順となります。

1. デバッグ用DISTROを作成
2. bitbake実行時にDISTROを指定

■デバッグ用DISTROの作成

自作のレイヤ(meta-workとする)に任意のデバッグ用DISTROのconfを作成します。

$ mkdir -p meta-work/conf/distro
$ touch meta-work/conf/distro/debug-distro.conf

debug-distro.confを以下の内容で作成します。

====
require conf/distro/poky.conf
PREFERRED_VERSION_readline = "8.2%"
====

■bitbake実行時にDISTROを指定

$ DISTRO=debug-distro bitbake core-image-xxx
これでreadline=8.2が使用される

$ bitbake core-image-xxx
これでreadline=5.2が使用される

しばらくデバッグバージョンで継続的に作業する場合は以下のようにすることも可能です。

$ export DISTRO=debug-distro
$ bitbake core-image-xxx
readline=
...
$ unset DISTRO ★これで解除

以上となります。

>P.S みつきんさんのyoctoブログは楽しく拝見させていただいております。とても参考になります。ありがとうございます。
ブログの方もご覧頂きありがとうございます。これからも精進いたします。