Isso é muito chato e no passado eu tive o mesmo problema. Faça o seguinte na receita da sua imagem:
IMAGE_PREPROCESS_COMMAND +="remove_dirs"
Isso deve ser executado após a parte ROOTFS.
tl; dr O 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 predefinido de arquivos e diretórios, sem os arquivos rootfs usuais. Para começar, estou tentando criar uma imagem completamente vazia.
Para fins de teste, estou usando um clone yocto jethro limpo com MACHINE ??= "qemux86"
em conf/local.conf
. Vamos começar com essa 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
A criação de bitbake test-empty-image
fornece 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, acrescentando isso à 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 alguma 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
}
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 posteriormente. Como posso me livrar desse diretório?
Isso é muito chato e no passado eu tive o mesmo problema. Faça o seguinte na receita da sua imagem:
IMAGE_PREPROCESS_COMMAND +="remove_dirs"
Isso deve ser executado após a parte ROOTFS.
Tags yocto