dr.Yocto cria um diretório vazio var/lib
na minha imagem, mesmo depois de ter sido explicitamente excluído por ROOTFS_POSTPROCESS_COMMAND
. Por que e como posso me livrar disso?
Estou tentando criar uma imagem yocto com um conjunto exato de arquivos e diretórios predefinidos, sem os arquivos rootfs usuais. Para começar, estou tentando criar uma imagem completamente vazia.
Para fins de teste, estou usando um clone limpo do yocto jethro com MACHINE ??= "qemux86"
in conf/local.conf
. Vamos começar com esta receita
meta-selftest/recipes-test/images/test-empty-image.bb
que vem com o clone yocto. É muito simples:
SUMMARY = "An empty image."
IMAGE_INSTALL = ""
IMAGE_LINGUAS = ""
PACKAGE_INSTALL = ""
inherit image
Building bitbake test-empty-image
me dá os seguintes arquivos na imagem:
$ 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/
Vamos tentar excluir os arquivos e pastas restantes anexando isto à receita:
remove_dirs () {
rm -rf ${IMAGE_ROOTFS}/etc
rm -rf ${IMAGE_ROOTFS}/var
}
ROOTFS_POSTPROCESS_COMMAND += "remove_dirs ; "
Isso funciona para etc
, mas não para var
:
$ tar tf tmp/deploy/images/qemux86/test-empty-image-qemux86.tar.bz2
./
./var/
./var/lib/
Para mais depuração, adiciono instruções de registro à função de limpeza:
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
}
o que resulta no arquivo listing.txt
:
################# Listing before rm -rf:
etc
listing.txt
oe_install
var
################# Listing after rm -rf:
listing.txt
oe_install
Portanto, o diretório var/lib
é definitivamente excluído pelo ROOTFS_POSTPROCESS_COMMAND
, mas aparentemente recriado mais tarde. Como posso me livrar deste diretório?
Responder1
Isso é muito chato e no passado tive o mesmo problema. Faça o seguinte em sua receita de imagem:
IMAGE_PREPROCESS_COMMAND += "remove_dirs"
Isso deve ser executado após a parte ROOTFS.