Bad news: the failure this was meant to fix happened again. | tar: ./opt/ltp/testcases/bin/dup01: file changed as we read it | ERROR: Function failed: do_image_tar (log file is located at /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-arm/build/build/tmp/work/beaglebone-poky-linux-gnueabi/core-image-sato-sdk-ptest/1.0-r0/temp/log.do_image_tar.5535)
As before, image_wic was also running. Is there any chance this could still be wic, or should we look at the jffs2 image generator? Ross On 27 June 2017 at 14:28, Ed Bartosh <ed.bart...@linux.intel.com> wrote: > > wic updates /etc/fstab on root partition if there are > valid mount points in .wks > > When wic runs from bitbake this can cause incorrect results > or even breakage of other tasks working with rootfs directory > in parallel with do_image_wic. > > Implemented copying rootfs directory to a temporary location > using copyhardlinktree before updating fstab to avoid conflicts with > other tasks working with rootfs. > > Signed-off-by: Ed Bartosh <ed.bart...@linux.intel.com> > --- > scripts/lib/wic/plugins/imager/direct.py | 22 +++++++++++++--------- > 1 file changed, 13 insertions(+), 9 deletions(-) > > diff --git a/scripts/lib/wic/plugins/imager/direct.py b/scripts/lib/wic/plugins/imager/direct.py > index aa9cc9f..f707365 100644 > --- a/scripts/lib/wic/plugins/imager/direct.py > +++ b/scripts/lib/wic/plugins/imager/direct.py > @@ -32,6 +32,8 @@ import uuid > > from time import strftime > > +from oe.path import copyhardlinktree > + > from wic import WicError > from wic.filemap import sparse_copy > from wic.ksparser import KickStart, KickStartError > @@ -115,12 +117,16 @@ class DirectPlugin(ImagerPlugin): > fstab_lines = fstab.readlines() > > if self._update_fstab(fstab_lines, self.parts): > - shutil.copyfile(fstab_path, fstab_path + ".orig") > + # copy rootfs dir to workdir to update fstab > + # as rootfs can be used by other tasks and can't be modified > + new_rootfs = os.path.realpath(os.path.join(self.workdir, "rootfs_copy")) > + copyhardlinktree(image_rootfs, new_rootfs) > + fstab_path = os.path.join(new_rootfs, 'etc/fstab') > > with open(fstab_path, "w") as fstab: > fstab.writelines(fstab_lines) > > - return fstab_path > + return new_rootfs > > def _update_fstab(self, fstab_lines, parts): > """Assume partition order same as in wks""" > @@ -156,7 +162,10 @@ class DirectPlugin(ImagerPlugin): > filesystems from the artifacts directly and combine them into > a partitioned image. > """ > - fstab_path = self._write_fstab(self.rootfs_dir.get("ROOTFS_DIR")) > + new_rootfs = self._write_fstab(self.rootfs_dir.get("ROOTFS_DIR")) > + if new_rootfs: > + # rootfs was copied to update fstab > + self.rootfs_dir['ROOTFS_DIR'] = new_rootfs > > for part in self.parts: > # get rootfs size from bitbake variable if it's not set in .ks file > @@ -172,12 +181,7 @@ class DirectPlugin(ImagerPlugin): > if rsize_bb: > part.size = int(round(float(rsize_bb))) > > - try: > - self._image.prepare(self) > - finally: > - if fstab_path: > - shutil.move(fstab_path + ".orig", fstab_path) > - > + self._image.prepare(self) > self._image.layout_partitions() > self._image.create() > > -- > 2.1.4 > > -- > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/openembedded-core
-- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core