私のyoctoイメージに./var/libが生成されるのはなぜですか?

私のyoctoイメージに./var/libが生成されるのはなぜですか?

長すぎます。var/libYoctoは明示的に削除されたにもかかわらず、私のイメージに空のディレクトリを作成しましたROOTFS_POSTPROCESS_COMMAND。なぜそしてどのように削除できますか?


一般的なrootfsファイルを使用せずに、事前定義されたファイルとディレクトリの正確なセットでyoctoイメージを作成しようとしています。まず、完全に空の画像を作ってみました。

テスト目的MACHINE ??= "qemux86"conf/local.conf

meta-selftest/recipes-test/images/test-empty-image.bb

ヨクトクローンが付属しています。これはとても簡単です。

SUMMARY = "An empty image."
IMAGE_INSTALL = ""
IMAGE_LINGUAS = ""
PACKAGE_INSTALL = ""

inherit image

ビルドはbitbake test-empty-image画像に次のファイルを提供します。

$ tar tf tmp/deploy/images/qemux86/test-empty-image-qemux86.tar.bz2 
./
./etc/
./etc/version
./etc/default/
./etc/default/postinst
./etc/ld.so.cache
./etc/rpm/
./etc/rpm/platform
./etc/rpm/sysinfo/
./etc/rpm/sysinfo/Dirnames
./etc/timestamp
./var/
./var/lib/

以下をレシピに追加して、残りのファイルとフォルダを削除してみましょう。

remove_dirs () {
        rm -rf ${IMAGE_ROOTFS}/etc
        rm -rf ${IMAGE_ROOTFS}/var 
}
ROOTFS_POSTPROCESS_COMMAND += "remove_dirs ; "

これは機能しますetcが、次の場合は機能しませんvar

$ tar tf tmp/deploy/images/qemux86/test-empty-image-qemux86.tar.bz2
./
./var/
./var/lib/

より多くのデバッグのために、クリーンアップ関数にロギングステートメントを追加しました。

remove_dirs () {
        echo "################# Listing before rm -rf:" >> ${IMAGE_ROOTFS}/listing.txt
        ls ${IMAGE_ROOTFS} >> ${IMAGE_ROOTFS}/listing.txt
        rm -rf ${IMAGE_ROOTFS}/etc
        rm -rf ${IMAGE_ROOTFS}/var 
        echo "################# Listing after rm -rf:" >> ${IMAGE_ROOTFS}/listing.txt
        ls ${IMAGE_ROOTFS} >> ${IMAGE_ROOTFS}/listing.txt
}

結果は次のとおりですlisting.txt

################# Listing before rm -rf:
etc
listing.txt
oe_install
var
################# Listing after rm -rf:
listing.txt
oe_install

したがって、そのディレクトリはvar/lib削除されましたが、ROOTFS_POSTPROCESS_COMMAND後で再作成されたようです。このディレクトリをどのように削除できますか?

答え1

これは非常に迷惑なことであり、過去にも同じ問題がありました。画像レシピで次のことを行います。

IMAGE_PREPROCESS_COMMAND +=「ディレクトリの削除」

これはROOTFSセクションの後に実行する必要があります。

バラよりIMAGE_PREPROCESS_COMMANDのYocto手動入力

関連情報