]> code.ossystems Code Review - openembedded-core.git/commitdiff
image.bbclass: Empty /var/volatile if it is a mount point
authorRandy Witt <randy.e.witt@linux.intel.com>
Tue, 24 Mar 2015 17:26:36 +0000 (10:26 -0700)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Tue, 24 Mar 2015 17:52:43 +0000 (17:52 +0000)
If /var/volatile is a mount point it shouldn't contain any files before
mount time. If files are there, they will no longer be able to be accessed
once the tmpfs gets mounted at /var/volatile.

This problem can be seen for instance when systemd creates
/var/volatile/log/journal as part of its package installation. It then
assumes the journal is persistent even though /var/volatile/log/journal
goes away shortly thereafter.

This change makes sure that there are no files in /var/volatile if it is
to be used as a mount point.

[Yocto #7388]

Signed-off-by: Randy Witt <randy.e.witt@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes/image.bbclass

index cd1783770b43b78ba4959c7765d0c7e0f560bbb2..03cbbf7a9115cd1eeb25abe1ef56bb6c9aae5183 100644 (file)
@@ -181,6 +181,8 @@ POSTINST_LOGFILE ?= "${localstatedir}/log/postinstall.log"
 SYSTEMD_DEFAULT_TARGET ?= '${@bb.utils.contains("IMAGE_FEATURES", "x11-base", "graphical.target", "multi-user.target", d)}'
 ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains("DISTRO_FEATURES", "systemd", "set_systemd_default_target; ", "", d)}'
 
+ROOTFS_POSTPROCESS_COMMAND += 'empty_var_volatile;'
+
 # some default locales
 IMAGE_LINGUAS ?= "de-de fr-fr en-gb"
 
@@ -377,6 +379,22 @@ set_systemd_default_target () {
        fi
 }
 
+# If /var/volatile is not empty, we have seen problems where programs such as the
+# journal make assumptions based on the contents of /var/volatile. The journal
+# would then write to /var/volatile before it was mounted, thus hiding the
+# items previously written.
+#
+# This change is to attempt to fix those types of issues in a way that doesn't
+# affect users that may not be using /var/volatile.
+empty_var_volatile () {
+       if [ -e ${IMAGE_ROOTFS}/etc/fstab ]; then
+               match=`awk '$1 !~ "#" && $2 ~ /\/var\/volatile/{print $2}' ${IMAGE_ROOTFS}/etc/fstab 2> /dev/null`
+               if [ -n "$match" ]; then
+                       find ${IMAGE_ROOTFS}/var/volatile -mindepth 1 -delete
+               fi
+       fi
+}
+
 # Turn any symbolic /sbin/init link into a file
 remove_init_link () {
        if [ -h ${IMAGE_ROOTFS}/sbin/init ]; then