tl;drYocto erstellt ein leeres Verzeichnis var/lib
in meinem Image, selbst nachdem es explizit gelöscht wurde ROOTFS_POSTPROCESS_COMMAND
. Warum und wie kann ich es loswerden?
Ich versuche, ein Yocto-Image mit einem genau vordefinierten Satz von Dateien und Verzeichnissen zu erstellen, ohne die üblichen Root-FS-Dateien. Zunächst versuche ich, ein völlig leeres Image zu erstellen.
Zu Testzwecken verwende ich einen sauberen Yocto Jethro-Klon mit MACHINE ??= "qemux86"
in conf/local.conf
. Beginnen wir mit diesem Rezept
meta-selftest/recipes-test/images/test-empty-image.bb
das mit dem Yocto-Klon geliefert wird. Es ist ganz einfach:
SUMMARY = "An empty image."
IMAGE_INSTALL = ""
IMAGE_LINGUAS = ""
PACKAGE_INSTALL = ""
inherit image
Beim Erstellen bitbake test-empty-image
erhalte ich folgende Dateien im 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/
Versuchen wir, die verbleibenden Dateien und Ordner zu löschen, indem wir Folgendes an das Rezept anhängen:
remove_dirs () {
rm -rf ${IMAGE_ROOTFS}/etc
rm -rf ${IMAGE_ROOTFS}/var
}
ROOTFS_POSTPROCESS_COMMAND += "remove_dirs ; "
Dies funktioniert für etc
, aber nicht für var
:
$ tar tf tmp/deploy/images/qemux86/test-empty-image-qemux86.tar.bz2
./
./var/
./var/lib/
Für weitere Fehlerbehebungen füge ich der Bereinigungsfunktion Protokollierungsanweisungen hinzu:
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
}
Das Ergebnis ist die Datei listing.txt
:
################# Listing before rm -rf:
etc
listing.txt
oe_install
var
################# Listing after rm -rf:
listing.txt
oe_install
Das Verzeichnis var/lib
wird also definitiv gelöscht ROOTFS_POSTPROCESS_COMMAND
, später aber anscheinend neu erstellt. Wie kann ich dieses Verzeichnis loswerden?
Antwort1
Das ist ziemlich ärgerlich und ich hatte in der Vergangenheit das gleiche Problem. Gehen Sie in Ihrem Bildrezept wie folgt vor:
IMAGE_PREPROCESS_COMMAND += "remove_dirs"
Dies sollte nach dem ROOTFS-Teil ausgeführt werden.