내 yocto 이미지에 ./var/lib를 생성하는 것은 무엇입니까?

내 yocto 이미지에 ./var/lib를 생성하는 것은 무엇입니까?

tl;drYocto 는 var/lib. ROOTFS_POSTPROCESS_COMMAND왜, 어떻게 제거할 수 있나요?


일반적인 rootfs 파일 없이 미리 정의된 정확한 파일 및 디렉터리 세트를 사용하여 yocto 이미지를 만들려고 합니다. 우선, 완전히 비어 있는 이미지를 만들려고 합니다.

테스트 목적으로 MACHINE ??= "qemux86"in 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 수동 입력

관련 정보