This service is available only in Japanese-language.
以前別トピックにて,PRServerについてご教授いただき,導入しようとしています。
セットアップはでき,local.confのPRSERVERへの記載によりクライアントからのアクセスもできているのですが,
ワークスペースの再作成などしていないことから,
変化のないパッケージについては,以前のローカルでインクリメントしていたリビジョンが適用されています。
これを全てPRServerのリビジョンに置き換えるには,おそらく全てのパッケージに対する強制リビルドが必要なのではないかと考えるのですが,
強制リビルド方法はございますでしょうか。
あるいはbuild-xxxを削除し最初からビルドし直す方法しかないのでしょうか。
yakuhito
2021/9/29 (水) 12:08
bitbake world -c cleansstate -k で構築の生成物は削除可能です
bitbake は $TMPDIR 以下に構築時のファイルを出力します。
$TMPDIR/work 以下には構築時の中間生成物,、$TMPDIR/deploy 以下に各レシピの最終生成物
(イメージレシピの場合はイメージファイル、ソフトウェアレシピの場合は、パッケージ)が出力
されます。
また、do_fetch タスクで取得したファイルは、$DL_DIR 以下に、各レシピ実行時のタスクの実行状態
及び出力ファイルは$SSTATE_DIR に保存されます。
$SSTATE_DIR に保存されたファイルは、タスク実行時の環境を元に生成されるシグネチャ及び出力結果
となり、タスク再実行時に計算されたシグネチャが前回のタスク実行時と同じで有れば前回の出力結果を
再利用するメカニズムで使用されています。
どのレベルの再構築が必要かに依りますが、各レシピでは以下のタスクが用意されています。
・ダウンロードしたファイルも含めて消去する場合は do_cleanall
・ダウンロードしたファイルを残し、最初から構築する場合は、do_cleansstate
・ダウンロードしたファイルを残し、過去の構築履歴を再使用する場合は do_clean
全レシピを対象して実行する場合は、通常レシピ名を指定する箇所で world を指定することで、構築対象と
なりうるレシピ全てが対象となります。
特定のタスクを実行する場合は、 -c に続けて タスク名を指定します。(do_ は不要です)
但し、作法に則っていないレシピが含まれている場合はエラーが発生する場合もありますので、
-k オプションを付加することで、エラー発生によるbitbakeの新規タスクの時実行中止を抑止します。
上記手順により、中間生成物は消去されますので、その後 bitbake イメージレシピ名 を実行することで
イメージに含まれるパッケージの再構築が行われ、生成されたパッケージを元にイメージが再作成されます。
なお、ビルドディレクトリ以下の、conf・$DL_DIR以外の他のディレクトリ及びファイルを
消去することで、 -c cleassstate の実行と同様の効果となります。
mackey
2021/10/5 (火) 15:59
ご回答いただきありがとうございます。
ご回答いただきありがとうございます
bitbake world cleansstate -kで目的の動作が確認できました。
別の質問としたほうが良いかもしれませんが,
-cleansstateを行うことで(ソースを全く編集せずとも)次回ビルド時リビジョンがインクリメントされてしまいます。
(openstlinuxにて,bitbake linux-stm32mpとkernel-5.4.56_5.4.56-r0.25_armhf.debのリビジョンを確認して本現象を確認しています)
おそらくPRSERVERがなくとも同様の現象になると思われるのですが,cleansstate等,ソースコードを編集しない只のクリーン後のビルドではリビジョン番号を動かさないようにすることは可能なのでしょうか。
それとも本質的に,そのようなことはbitbakeの動作に反すること(バージョン/リビジョン番号を変えずにリビルドすることはできない?)なのでしょうか。
yakuhito
2021/10/5 (火) 20:38
リビジョン番号が動く原因は、BUILDHIISTORY_COMMIT が有効になっているためと推測します。
openstlinux の提供するlocal.conf では、以下の設定が行われていると思います。
# Nice debug data
INHERIT += "buildhistory"
BUILDHISTORY_COMMIT = "1"
BUILDHISTORY_COMMIT = "0"
に変更することで、リビジョンが変更されることは無くなると思いますが、
PRSERVERを使用したリビジョンの管理が機能しなくなる可能性があるかと。
mackey
2021/10/6 (水) 10:52
ご回答いただきありがとうございます
ご回答いただきました内容について,承知いたしました。
諸々試行したところ,一部のパッケージのみ(具体的には,openstlinuxのlinux-stm32mp)がclean時インクリメントされるようなので,そのパッケージのみPRを固定・随時更新し対応しようと思います。
ご対応いただきありがとうございました。