太長了;博士Yocto 在我的映像中建立了一個空目錄var/lib
,即使它已被 明確刪除ROOTFS_POSTPROCESS_COMMAND
。為什麼,我怎麼才能擺脫它?
我正在嘗試使用一組精確預先定義的檔案和目錄來建立 yocto 映像,而不使用通常的 rootfs 檔案。首先,我嘗試創建一個完全空的圖像。
出於測試目的,我使用了一個乾淨的 yocto jethro 克隆,MACHINE ??= "qemux86"
其中包含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 +=“刪除目錄”
這應該在 ROOTFS 部分之後運行。