summaryrefslogtreecommitdiff
path: root/poky/scripts/lib/wic/plugins/source/rootfs.py
diff options
context:
space:
mode:
Diffstat (limited to 'poky/scripts/lib/wic/plugins/source/rootfs.py')
-rw-r--r--poky/scripts/lib/wic/plugins/source/rootfs.py133
1 files changed, 16 insertions, 117 deletions
diff --git a/poky/scripts/lib/wic/plugins/source/rootfs.py b/poky/scripts/lib/wic/plugins/source/rootfs.py
index f1db83f8a1..705aeb5563 100644
--- a/poky/scripts/lib/wic/plugins/source/rootfs.py
+++ b/poky/scripts/lib/wic/plugins/source/rootfs.py
@@ -17,11 +17,10 @@ import shutil
import sys
from oe.path import copyhardlinktree
-from pathlib import Path
from wic import WicError
from wic.pluginbase import SourcePlugin
-from wic.misc import get_bitbake_var, exec_native_cmd
+from wic.misc import get_bitbake_var
logger = logging.getLogger('wic')
@@ -33,22 +32,6 @@ class RootfsPlugin(SourcePlugin):
name = 'rootfs'
@staticmethod
- def __validate_path(cmd, rootfs_dir, path):
- if os.path.isabs(path):
- logger.error("%s: Must be relative: %s" % (cmd, orig_path))
- sys.exit(1)
-
- # Disallow climbing outside of parent directory using '..',
- # because doing so could be quite disastrous (we will delete the
- # directory, or modify a directory outside OpenEmbedded).
- full_path = os.path.realpath(os.path.join(rootfs_dir, path))
- if not full_path.startswith(os.path.realpath(rootfs_dir)):
- logger.error("%s: Must point inside the rootfs:" % (cmd, path))
- sys.exit(1)
-
- return full_path
-
- @staticmethod
def __get_rootfs_dir(rootfs_dir):
if os.path.isdir(rootfs_dir):
return os.path.realpath(rootfs_dir)
@@ -61,15 +44,6 @@ class RootfsPlugin(SourcePlugin):
return os.path.realpath(image_rootfs_dir)
- @staticmethod
- def __get_pseudo(native_sysroot, rootfs, pseudo_dir):
- pseudo = "export PSEUDO_PREFIX=%s/usr;" % native_sysroot
- pseudo += "export PSEUDO_LOCALSTATEDIR=%s;" % pseudo_dir
- pseudo += "export PSEUDO_PASSWD=%s;" % rootfs
- pseudo += "export PSEUDO_NOSYMLINKEXP=1;"
- pseudo += "%s " % get_bitbake_var("FAKEROOTCMD")
- return pseudo
-
@classmethod
def do_prepare_partition(cls, part, source_params, cr, cr_workdir,
oe_builddir, bootimg_dir, kernel_dir,
@@ -94,16 +68,10 @@ class RootfsPlugin(SourcePlugin):
"it is not a valid path, exiting" % part.rootfs_dir)
part.rootfs_dir = cls.__get_rootfs_dir(rootfs_dir)
- pseudo_dir = os.path.join(part.rootfs_dir, "../pseudo")
- if not os.path.lexists(pseudo_dir):
- logger.warn("%s folder does not exist. "
- "Usernames and permissions will be invalid " % pseudo_dir)
- pseudo_dir = None
new_rootfs = None
- new_pseudo = None
# Handle excluded paths.
- if part.exclude_path or part.include_path or part.change_directory:
+ if part.exclude_path or part.include_path:
# We need a new rootfs directory we can delete files from. Copy to
# workdir.
new_rootfs = os.path.realpath(os.path.join(cr_workdir, "rootfs%d" % part.lineno))
@@ -111,93 +79,25 @@ class RootfsPlugin(SourcePlugin):
if os.path.lexists(new_rootfs):
shutil.rmtree(os.path.join(new_rootfs))
- if part.change_directory:
- cd = part.change_directory
- if cd[-1] == '/':
- cd = cd[:-1]
- orig_dir = cls.__validate_path("--change-directory", part.rootfs_dir, cd)
- else:
- orig_dir = part.rootfs_dir
- copyhardlinktree(orig_dir, new_rootfs)
-
- # Convert the pseudo directory to its new location
- if (pseudo_dir):
- new_pseudo = os.path.realpath(
- os.path.join(cr_workdir, "pseudo%d" % part.lineno))
- if os.path.lexists(new_pseudo):
- shutil.rmtree(new_pseudo)
- os.mkdir(new_pseudo)
- shutil.copy(os.path.join(pseudo_dir, "files.db"),
- os.path.join(new_pseudo, "files.db"))
-
- pseudo_cmd = "%s -B -m %s -M %s" % (cls.__get_pseudo(native_sysroot,
- new_rootfs,
- new_pseudo),
- orig_dir, new_rootfs)
- exec_native_cmd(pseudo_cmd, native_sysroot)
-
- for in_path in part.include_path or []:
- #parse arguments
- include_path = in_path[0]
- if len(in_path) > 2:
- logger.error("'Invalid number of arguments for include-path")
- sys.exit(1)
- if len(in_path) == 2:
- path = in_path[1]
- else:
- path = None
-
- # Pack files to be included into a tar file.
- # We need to create a tar file, because that way we can keep the
- # permissions from the files even when they belong to different
- # pseudo enviroments.
- # If we simply copy files using copyhardlinktree/copytree... the
- # copied files will belong to the user running wic.
- tar_file = os.path.realpath(
- os.path.join(cr_workdir, "include-path%d.tar" % part.lineno))
- if os.path.isfile(include_path):
- parent = os.path.dirname(os.path.realpath(include_path))
- tar_cmd = "tar c --owner=root --group=root -f %s -C %s %s" % (
- tar_file, parent, os.path.relpath(include_path, parent))
- exec_native_cmd(tar_cmd, native_sysroot)
- else:
- if include_path in krootfs_dir:
- include_path = krootfs_dir[include_path]
- include_path = cls.__get_rootfs_dir(include_path)
- include_pseudo = os.path.join(include_path, "../pseudo")
- if os.path.lexists(include_pseudo):
- pseudo = cls.__get_pseudo(native_sysroot, include_path,
- include_pseudo)
- tar_cmd = "tar cf %s -C %s ." % (tar_file, include_path)
- else:
- pseudo = None
- tar_cmd = "tar c --owner=root --group=root -f %s -C %s ." % (
- tar_file, include_path)
- exec_native_cmd(tar_cmd, native_sysroot, pseudo)
-
- #create destination
- if path:
- destination = cls.__validate_path("--include-path", new_rootfs, path)
- Path(destination).mkdir(parents=True, exist_ok=True)
- else:
- destination = new_rootfs
+ copyhardlinktree(part.rootfs_dir, new_rootfs)
- #extract destination
- untar_cmd = "tar xf %s -C %s" % (tar_file, destination)
- if new_pseudo:
- pseudo = cls.__get_pseudo(native_sysroot, new_rootfs, new_pseudo)
- else:
- pseudo = None
- exec_native_cmd(untar_cmd, native_sysroot, pseudo)
- os.remove(tar_file)
+ for path in part.include_path or []:
+ copyhardlinktree(path, new_rootfs)
for orig_path in part.exclude_path or []:
path = orig_path
+ if os.path.isabs(path):
+ logger.error("Must be relative: --exclude-path=%s" % orig_path)
+ sys.exit(1)
- full_path = cls.__validate_path("--exclude-path", new_rootfs, path)
+ full_path = os.path.realpath(os.path.join(new_rootfs, path))
- if not os.path.lexists(full_path):
- continue
+ # Disallow climbing outside of parent directory using '..',
+ # because doing so could be quite disastrous (we will delete the
+ # directory).
+ if not full_path.startswith(new_rootfs):
+ logger.error("'%s' points to a path outside the rootfs" % orig_path)
+ sys.exit(1)
if path.endswith(os.sep):
# Delete content only.
@@ -212,5 +112,4 @@ class RootfsPlugin(SourcePlugin):
shutil.rmtree(full_path)
part.prepare_rootfs(cr_workdir, oe_builddir,
- new_rootfs or part.rootfs_dir, native_sysroot,
- pseudo_dir = new_pseudo or pseudo_dir)
+ new_rootfs or part.rootfs_dir, native_sysroot)