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 <ed.bartosh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ed Bartosh 2017-01-24 15:43:51 +02:00 committed by Richard Purdie
parent 75318c7b0c
commit e9bd1ed673
1 changed files with 15 additions and 12 deletions

View File

@ -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)