yocto イメージに ./var/lib を作成するのは何ですか?

yocto イメージに ./var/lib を作成するのは何ですか?

要約var/libYocto は、 によって明示的に削除された後でも、イメージ内に空のディレクトリを作成しますROOTFS_POSTPROCESS_COMMAND。なぜでしょうか。また、どうすればこれを削除できますか。


通常の rootfs ファイルなしで、正確に事前定義されたファイルとディレクトリのセットを持つ yocto イメージを作成しようとしています。まず、完全に空のイメージを作成しようとしています。

MACHINE ??= "qemux86"テスト目的で、クリーンなyocto jethroクローンを使用していますconf/local.conf。このレシピから始めましょう

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

yocto クローンに付属しています。とても簡単です:

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 += "remove_dirs"

これは ROOTFS 部分の後に実行する必要があります。

見るIMAGE_PREPROCESS_COMMAND の Yocto 手動エントリ

関連情報