From e9bd1ed67395fef82a5283e407480229857d448c Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Tue, 24 Jan 2017 15:43:51 +0200 Subject: [PATCH] wic: make workdir a temporary directory Wic used hardcoded path /var/tmp/wic/ as a work directory, which caused conflicts if two wic instances run in parallel. Made work directory unique and temporary. Moved results from work directory to output directory when they're ready. [YOCTO #10783] (From OE-Core rev: 5d948f04823dedfa26a879aa6a5dc23de2bb9354) Signed-off-by: Ed Bartosh Signed-off-by: Richard Purdie --- scripts/lib/wic/imager/direct.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/scripts/lib/wic/imager/direct.py b/scripts/lib/wic/imager/direct.py index 825c9d7f6e..63f1fa1d39 100644 --- a/scripts/lib/wic/imager/direct.py +++ b/scripts/lib/wic/imager/direct.py @@ -27,6 +27,7 @@ import os import shutil import uuid +import tempfile from wic import msger from wic.utils.oe.misc import get_bitbake_var @@ -79,16 +80,11 @@ class DirectImageCreator: This method takes the same arguments as ImageCreator.__init__() """ - self.name = creatoropts['name'] + self.outdir = image_output_dir + self.workdir = tempfile.mktemp(prefix='wic') self.ks = creatoropts['ks'] - self.tmpdir = "/var/tmp/wic" - self.workdir = "/var/tmp/wic/build" - - if not os.path.exists(self.tmpdir): - os.makedirs(self.tmpdir) - self.__image = None self.__disks = {} self.__disk_format = "direct" @@ -96,8 +92,6 @@ class DirectImageCreator: self.ptable_format = self.ks.bootloader.ptable self.oe_builddir = oe_builddir - if image_output_dir: - self.tmpdir = image_output_dir self.rootfs_dir = rootfs_dir self.bootimg_dir = bootimg_dir self.kernel_dir = kernel_dir @@ -270,9 +264,6 @@ class DirectImageCreator: fstab_path = self._write_fstab(self.rootfs_dir.get("ROOTFS_DIR")) - shutil.rmtree(self.workdir) - os.mkdir(self.workdir) - for part in parts: # get rootfs size from bitbake variable if it's not set in .ks file if not part.size: @@ -425,3 +416,15 @@ class DirectImageCreator: except ImageError as err: msger.warning("%s" % err) + # Move results to the output dir + if not os.path.exists(self.outdir): + os.makedirs(self.outdir) + + for fname in os.listdir(self.workdir): + path = os.path.join(self.workdir, fname) + if os.path.isfile(path): + shutil.move(path, os.path.join(self.outdir, fname)) + + # remove work directory + shutil.rmtree(self.workdir, ignore_errors=True) +