Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH v7 00/10] Fix permissions and embed-rotofs
@ 2020-04-19  6:35 Ricardo Ribalda
  2020-04-19  6:35 ` [PATCH v7 01/10] wic: Fix permissions when using exclude or include path Ricardo Ribalda
                   ` (11 more replies)
  0 siblings, 12 replies; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-19  6:35 UTC (permalink / raw)
  To: openembedded-core, Paul Barker; +Cc: Ricardo Ribalda Delgado

Today wic behaves differently if we run it from bitbake of directly from the
commandline.

When it is run from bitbake, the permissions/usersnames are handled by the
pseudo database of the main image.

When it is run from the comandline ,it is run outside the main image database.

This results on permissions/usernames not working ok on some usecases on both
bitbake and wic.


This is an attempt to fix all the permission bugs that I am aware from wic.
Using the following usecases:


#exclude-path
part / --source rootfs --fstype=ext4 --exclude-path=home

#split_partition
part / --source rootfs --ondisk sda --fstype=ext4 --exclude-path=etc/
part /etc --source rootfs --rootfs-dir=tmp/work/qt5222-poky-linux/core-image-minimal/1.0-r0/rootfs/etc/ --fstype=ext4

#multi_partition
part / --source rootfs --ondisk sda --fstype=ext4
part /export --source rootfs --rootfs=core-image-minimal-mtdutils --fstype=ext4


With the current master:
-------------------------
#exclude-path
From Bitbake: OK
wic cmdline: FAIL

#split_partition
From Bitbake: OK
wic cmdline: FAIL, permissions invalid on both partitions

#multi_partition
From Bitbake: FAIL second partition
wic cmdline: OK


After:  wic: Fix permissions when using exclude or include path
--------------------------------------------------------------------
#exclude-path
From Bitbake: OK
wic cmdline: OK

#split_partition
From Bitbake: OK
wic cmdline: FAIL, permissions invalid on second partition

#multi_partition
From Bitbake: FAIL second partition
wic cmdline: OK


After: wic: Fix multi images .wks with bitbake
----------------------------------------------
#exclude-path
From Bitbake: OK
wic cmdline: OK

#split_partition
From Bitbake: FAIL, permissions invalid on second partition
wic cmdline: FAIL, permissions invalid on second partition

#multi_partition
From Bitbake: OK
wic cmdline: OK



After: wic: Add --change-directory argument
--------------------------------------------

we can have a .wks like:
part / --source rootfs --ondisk sda --fstype=ext4 --exclude-path=etc/
part /etc --source rootfs --fstype=ext4 --change-directory=etc


Wich works fine from bitbake and from cmdline, and has the same functionality as
split_partition.


Changelog v6->v7 (Thanks Paul):
  - Use passwd instead of shadow for oetests
  - For pseudo folder inside workdir
  - Improve comments on tar
  - Use line number on tar name
  - Allow include-files of files in workdir

Changelog v5->v6:
  - Allow two arguments to include-path
  - Fix permission on include-path
  - exec_native with ASSUME_PROVIDED
  - More unittesting

Changelog v4->v5:
  - Add unittesting
  - wic: Avoid creating invalid pseudo directory

Ricardo Ribalda Delgado (10):
  wic: Fix permissions when using exclude or include path
  wic: Fix multi images .wks with bitbake
  wic: Add --change-directory argument
  wic: Continue if excluded_path does not exist
  wic: Avoid creating invalid pseudo directory
  oeqa: wic: Add tests for permissions and change-directory
  wic: misc: Do not find for executables in ALREADY_PROVIDED
  wic: root: Add an opt. destination on include-path
  wic: rootfs: Combine path_validation in one function
  oeqa: wic: Add more tests for include_path

 meta/classes/image_types_wic.bbclass     |   8 +-
 meta/lib/oeqa/selftest/cases/wic.py      | 153 ++++++++++++++++++++++-
 meta/recipes-core/meta/wic-tools.bb      |   2 +-
 scripts/lib/wic/help.py                  |  26 ++--
 scripts/lib/wic/ksparser.py              |   3 +-
 scripts/lib/wic/misc.py                  |  14 ++-
 scripts/lib/wic/partition.py             |  20 +--
 scripts/lib/wic/plugins/source/rootfs.py | 133 +++++++++++++++++---
 8 files changed, 318 insertions(+), 41 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH v7 01/10] wic: Fix permissions when using exclude or include path
  2020-04-19  6:35 [PATCH v7 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
@ 2020-04-19  6:35 ` Ricardo Ribalda
  2020-04-19  6:35 ` [PATCH v7 02/10] wic: Fix multi images .wks with bitbake Ricardo Ribalda
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-19  6:35 UTC (permalink / raw)
  To: openembedded-core, Paul Barker
  Cc: Ricardo Ribalda Delgado, Ricardo Ribalda Delgado

From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>

When parameters include_path or exclude_path are passed to the rootfs
plugin, it will copy the partition content into a folder and make all
the modifications there.

This is done using copyhardlinktree(), which does not take into
consideration the content of the pseudo folder, which contains the
information about the right permissions and ownership of the folders.

This results in a rootfs owned by the user that is running the wic
command (usually UID 1000), which makes some rootfs unbootable.

This bug can be easily triggerd with the following .wks

part / --source rootfs --fstype=ext4 --exclude-path=home

And this sequence:

$ wic create test-permissions -e core-image-minimal -o test/
$ sudo mount test/test-permissions-202004080823-sda.direct.p1 /mnt
$ ls -la /mnt/etc/shadow

To fix this we copy the content of the pseudo folders to the new folder
and modify the pseudo database using the "pseudo -B" command.

If the rootfs is not a rootfs generated by bitbake a warning is shown
making the user aware that the permissions on the target might not match
what he expects.

WARNING: /tmp/test/../pseudo folder does not exist. Usernames and permissions will be invalid

Cc: Paul Barker <pbarker@konsulko.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
---
 scripts/lib/wic/partition.py             |  7 +++--
 scripts/lib/wic/plugins/source/rootfs.py | 37 ++++++++++++++++++++++--
 2 files changed, 38 insertions(+), 6 deletions(-)

diff --git a/scripts/lib/wic/partition.py b/scripts/lib/wic/partition.py
index 2d95f78439..b02711be37 100644
--- a/scripts/lib/wic/partition.py
+++ b/scripts/lib/wic/partition.py
@@ -190,7 +190,7 @@ class Partition():
                            (self.mountpoint, self.size, self.fixed_size))
 
     def prepare_rootfs(self, cr_workdir, oe_builddir, rootfs_dir,
-                       native_sysroot, real_rootfs = True):
+                       native_sysroot, real_rootfs = True, pseudo_dir = None):
         """
         Prepare content for a rootfs partition i.e. create a partition
         and fill it from a /rootfs dir.
@@ -198,8 +198,9 @@ class Partition():
         Currently handles ext2/3/4, btrfs, vfat and squashfs.
         """
         p_prefix = os.environ.get("PSEUDO_PREFIX", "%s/usr" % native_sysroot)
-        p_localstatedir = os.environ.get("PSEUDO_LOCALSTATEDIR",
-                                         "%s/../pseudo" %  rootfs_dir)
+        if (pseudo_dir == None):
+            pseudo_dir = "%s/../pseudo" %  rootfs_dir
+        p_localstatedir = os.environ.get("PSEUDO_LOCALSTATEDIR", pseudo_dir)
         p_passwd = os.environ.get("PSEUDO_PASSWD", rootfs_dir)
         p_nosymlinkexp = os.environ.get("PSEUDO_NOSYMLINKEXP", "1")
         pseudo = "export PSEUDO_PREFIX=%s;" % p_prefix
diff --git a/scripts/lib/wic/plugins/source/rootfs.py b/scripts/lib/wic/plugins/source/rootfs.py
index 705aeb5563..8b2a067385 100644
--- a/scripts/lib/wic/plugins/source/rootfs.py
+++ b/scripts/lib/wic/plugins/source/rootfs.py
@@ -20,7 +20,7 @@ from oe.path import copyhardlinktree
 
 from wic import WicError
 from wic.pluginbase import SourcePlugin
-from wic.misc import get_bitbake_var
+from wic.misc import get_bitbake_var, exec_native_cmd
 
 logger = logging.getLogger('wic')
 
@@ -44,6 +44,15 @@ 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,
@@ -68,8 +77,14 @@ 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:
             # We need a new rootfs directory we can delete files from. Copy to
@@ -78,9 +93,24 @@ class RootfsPlugin(SourcePlugin):
 
             if os.path.lexists(new_rootfs):
                 shutil.rmtree(os.path.join(new_rootfs))
-
             copyhardlinktree(part.rootfs_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),
+                                                    part.rootfs_dir, new_rootfs)
+                exec_native_cmd(pseudo_cmd, native_sysroot)
+
             for path in part.include_path or []:
                 copyhardlinktree(path, new_rootfs)
 
@@ -112,4 +142,5 @@ class RootfsPlugin(SourcePlugin):
                     shutil.rmtree(full_path)
 
         part.prepare_rootfs(cr_workdir, oe_builddir,
-                            new_rootfs or part.rootfs_dir, native_sysroot)
+                            new_rootfs or part.rootfs_dir, native_sysroot,
+                            pseudo_dir = new_pseudo or pseudo_dir)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH v7 02/10] wic: Fix multi images .wks with bitbake
  2020-04-19  6:35 [PATCH v7 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
  2020-04-19  6:35 ` [PATCH v7 01/10] wic: Fix permissions when using exclude or include path Ricardo Ribalda
@ 2020-04-19  6:35 ` Ricardo Ribalda
  2020-04-19  6:35 ` [PATCH v7 03/10] wic: Add --change-directory argument Ricardo Ribalda
                   ` (9 subsequent siblings)
  11 siblings, 0 replies; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-19  6:35 UTC (permalink / raw)
  To: openembedded-core, Paul Barker
  Cc: Ricardo Ribalda Delgado, Ricardo Ribalda Delgado

From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>

In order to support .wks files with multiple images inside bitbake we
need to explicitly set the pseudo database in use.

Eg: If we try this .mks:
part / --source rootfs --ondisk sda --fstype=ext4
part /export --source rootfs --rootfs=core-image-minimal-mtdutils --fstype=ext4

The username for all the files under /export will be set to the runner
of bitbake (usually UID 1000).

Before we run wic, we need to make sure that the pseudo database will be
flushed, and contains all the data needed.

Cc: Paul Barker <pbarker@konsulko.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
---
 meta/classes/image_types_wic.bbclass | 8 ++++++--
 scripts/lib/wic/partition.py         | 9 +++------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/meta/classes/image_types_wic.bbclass b/meta/classes/image_types_wic.bbclass
index b83308b45c..96ed0473ee 100644
--- a/meta/classes/image_types_wic.bbclass
+++ b/meta/classes/image_types_wic.bbclass
@@ -32,8 +32,7 @@ IMAGE_CMD_wic () {
 	if [ -z "$wks" ]; then
 		bbfatal "No kickstart files from WKS_FILES were found: ${WKS_FILES}. Please set WKS_FILE or WKS_FILES appropriately."
 	fi
-
-	BUILDDIR="${TOPDIR}" wic create "$wks" --vars "${STAGING_DIR}/${MACHINE}/imgdata/" -e "${IMAGE_BASENAME}" -o "$build_wic/" ${WIC_CREATE_EXTRA_ARGS}
+	BUILDDIR="${TOPDIR}" PSEUDO_UNLOAD=1 wic create "$wks" --vars "${STAGING_DIR}/${MACHINE}/imgdata/" -e "${IMAGE_BASENAME}" -o "$build_wic/" ${WIC_CREATE_EXTRA_ARGS}
 	mv "$build_wic/$(basename "${wks%.wks}")"*.direct "$out${IMAGE_NAME_SUFFIX}.wic"
 }
 IMAGE_CMD_wic[vardepsexclude] = "WKS_FULL_PATH WKS_FILES TOPDIR"
@@ -86,6 +85,10 @@ python do_write_wks_template () {
     bb.utils.copyfile(wks_file, "%s/%s" % (depdir, basename + '-' + os.path.basename(wks_file)))
 }
 
+do_flush_pseudodb() {
+	${FAKEROOTENV} ${FAKEROOTCMD} -S
+}
+
 python () {
     if d.getVar('USING_WIC'):
         wks_file_u = d.getVar('WKS_FULL_PATH', False)
@@ -139,6 +142,7 @@ python do_rootfs_wicenv () {
     depdir = d.getVar('IMGDEPLOYDIR')
     bb.utils.copyfile(os.path.join(outdir, basename) + '.env', os.path.join(depdir, basename) + '.env')
 }
+addtask do_flush_pseudodb after do_image before do_image_wic
 addtask do_rootfs_wicenv after do_image before do_image_wic
 do_rootfs_wicenv[vardeps] += "${WICVARS}"
 do_rootfs_wicenv[prefuncs] = 'set_image_size'
diff --git a/scripts/lib/wic/partition.py b/scripts/lib/wic/partition.py
index b02711be37..d850fbd1b1 100644
--- a/scripts/lib/wic/partition.py
+++ b/scripts/lib/wic/partition.py
@@ -200,13 +200,10 @@ class Partition():
         p_prefix = os.environ.get("PSEUDO_PREFIX", "%s/usr" % native_sysroot)
         if (pseudo_dir == None):
             pseudo_dir = "%s/../pseudo" %  rootfs_dir
-        p_localstatedir = os.environ.get("PSEUDO_LOCALSTATEDIR", pseudo_dir)
-        p_passwd = os.environ.get("PSEUDO_PASSWD", rootfs_dir)
-        p_nosymlinkexp = os.environ.get("PSEUDO_NOSYMLINKEXP", "1")
         pseudo = "export PSEUDO_PREFIX=%s;" % p_prefix
-        pseudo += "export PSEUDO_LOCALSTATEDIR=%s;" % p_localstatedir
-        pseudo += "export PSEUDO_PASSWD=%s;" % p_passwd
-        pseudo += "export PSEUDO_NOSYMLINKEXP=%s;" % p_nosymlinkexp
+        pseudo += "export PSEUDO_LOCALSTATEDIR=%s;" % pseudo_dir
+        pseudo += "export PSEUDO_PASSWD=%s;" % rootfs_dir
+        pseudo += "export PSEUDO_NOSYMLINKEXP=1;"
         pseudo += "%s " % get_bitbake_var("FAKEROOTCMD")
 
         rootfs = "%s/rootfs_%s.%s.%s" % (cr_workdir, self.label,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH v7 03/10] wic: Add --change-directory argument
  2020-04-19  6:35 [PATCH v7 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
  2020-04-19  6:35 ` [PATCH v7 01/10] wic: Fix permissions when using exclude or include path Ricardo Ribalda
  2020-04-19  6:35 ` [PATCH v7 02/10] wic: Fix multi images .wks with bitbake Ricardo Ribalda
@ 2020-04-19  6:35 ` Ricardo Ribalda
  2020-04-19  6:35 ` [PATCH v7 04/10] wic: Continue if excluded_path does not exist Ricardo Ribalda
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-19  6:35 UTC (permalink / raw)
  To: openembedded-core, Paul Barker
  Cc: Ricardo Ribalda Delgado, Ricardo Ribalda Delgado

From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>

This option allows to specify which part of a rootfs is going to be
included, the same way the -C argument on tar.

Thanks to this option we can make sure the permissions and usernames
on the target partition are respected, and also simplify the creation of
splitted partitons, not neeting to invoke external vars or using .wks.in
files. Eg:

part / --source rootfs --ondisk sda --fstype=ext4 --exclude-path=etc/   
part /etc --source rootfs --fstype=ext4 --change-directory=etc

Cc: Paul Barker <pbarker@konsulko.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
---
 scripts/lib/wic/help.py                  |  6 ++++++
 scripts/lib/wic/ksparser.py              |  1 +
 scripts/lib/wic/partition.py             |  1 +
 scripts/lib/wic/plugins/source/rootfs.py | 21 ++++++++++++++++++---
 4 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/scripts/lib/wic/help.py b/scripts/lib/wic/help.py
index 1e3d06a87b..62a2a90e79 100644
--- a/scripts/lib/wic/help.py
+++ b/scripts/lib/wic/help.py
@@ -980,6 +980,12 @@ DESCRIPTION
                          copies. This option only has an effect with the rootfs
                          source plugin.
 
+         --change-directory: This option is specific to wic. It changes to the
+                             given directory before copying the files. This
+                             option is useful when we want to split a rootfs in
+                             multiple partitions and we want to keep the right
+                             permissions and usernames in all the partitions.
+
          --extra-space: This option is specific to wic. It adds extra
                         space after the space filled by the content
                         of the partition. The final size can go
diff --git a/scripts/lib/wic/ksparser.py b/scripts/lib/wic/ksparser.py
index 650b976223..c60869d397 100644
--- a/scripts/lib/wic/ksparser.py
+++ b/scripts/lib/wic/ksparser.py
@@ -138,6 +138,7 @@ class KickStart():
         part.add_argument('--align', type=int)
         part.add_argument('--exclude-path', nargs='+')
         part.add_argument('--include-path', nargs='+')
+        part.add_argument('--change-directory')
         part.add_argument("--extra-space", type=sizetype)
         part.add_argument('--fsoptions', dest='fsopts')
         part.add_argument('--fstype', default='vfat',
diff --git a/scripts/lib/wic/partition.py b/scripts/lib/wic/partition.py
index d850fbd1b1..3240be072a 100644
--- a/scripts/lib/wic/partition.py
+++ b/scripts/lib/wic/partition.py
@@ -31,6 +31,7 @@ class Partition():
         self.extra_space = args.extra_space
         self.exclude_path = args.exclude_path
         self.include_path = args.include_path
+        self.change_directory = args.change_directory
         self.fsopts = args.fsopts
         self.fstype = args.fstype
         self.label = args.label
diff --git a/scripts/lib/wic/plugins/source/rootfs.py b/scripts/lib/wic/plugins/source/rootfs.py
index 8b2a067385..85c634f8a1 100644
--- a/scripts/lib/wic/plugins/source/rootfs.py
+++ b/scripts/lib/wic/plugins/source/rootfs.py
@@ -86,14 +86,29 @@ class RootfsPlugin(SourcePlugin):
         new_rootfs = None
         new_pseudo = None
         # Handle excluded paths.
-        if part.exclude_path or part.include_path:
+        if part.exclude_path or part.include_path or part.change_directory:
             # 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))
 
             if os.path.lexists(new_rootfs):
                 shutil.rmtree(os.path.join(new_rootfs))
-            copyhardlinktree(part.rootfs_dir, new_rootfs)
+
+            if part.change_directory:
+                cd = part.change_directory
+                if cd[-1] == '/':
+                    cd = cd[:-1]
+                if os.path.isabs(cd):
+                    logger.error("Must be relative: --change-directory=%s" % cd)
+                    sys.exit(1)
+                orig_dir = os.path.realpath(os.path.join(part.rootfs_dir, cd))
+                if not orig_dir.startswith(part.rootfs_dir):
+                    logger.error("'%s' points to a path outside the rootfs" % orig_dir)
+                    sys.exit(1)
+
+            else:
+                orig_dir = part.rootfs_dir
+            copyhardlinktree(orig_dir, new_rootfs)
 
             # Convert the pseudo directory to its new location
             if (pseudo_dir):
@@ -108,7 +123,7 @@ class RootfsPlugin(SourcePlugin):
                 pseudo_cmd = "%s -B -m %s -M %s" % (cls.__get_pseudo(native_sysroot,
                                                                      new_rootfs,
                                                                      new_pseudo),
-                                                    part.rootfs_dir, new_rootfs)
+                                                    orig_dir, new_rootfs)
                 exec_native_cmd(pseudo_cmd, native_sysroot)
 
             for path in part.include_path or []:
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH v7 04/10] wic: Continue if excluded_path does not exist
  2020-04-19  6:35 [PATCH v7 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
                   ` (2 preceding siblings ...)
  2020-04-19  6:35 ` [PATCH v7 03/10] wic: Add --change-directory argument Ricardo Ribalda
@ 2020-04-19  6:35 ` Ricardo Ribalda
  2020-04-19  6:35 ` [PATCH v7 05/10] wic: Avoid creating invalid pseudo directory Ricardo Ribalda
                   ` (7 subsequent siblings)
  11 siblings, 0 replies; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-19  6:35 UTC (permalink / raw)
  To: openembedded-core, Paul Barker
  Cc: Ricardo Ribalda Delgado, Ricardo Ribalda Delgado

From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>

If an excuded path does not exist, continue without an error.
This allows to seamleasly reuse .wks among different projects.

Eg:

part / --source rootfs --fstype=ext4 --exclude-path=opt/private_keys

Where /opt/private_keys in only populated by some of the image.bb files.

Cc: Paul Barker <pbarker@konsulko.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
---
 scripts/lib/wic/plugins/source/rootfs.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/scripts/lib/wic/plugins/source/rootfs.py b/scripts/lib/wic/plugins/source/rootfs.py
index 85c634f8a1..247f61ff7c 100644
--- a/scripts/lib/wic/plugins/source/rootfs.py
+++ b/scripts/lib/wic/plugins/source/rootfs.py
@@ -136,7 +136,6 @@ class RootfsPlugin(SourcePlugin):
                     sys.exit(1)
 
                 full_path = os.path.realpath(os.path.join(new_rootfs, path))
-
                 # Disallow climbing outside of parent directory using '..',
                 # because doing so could be quite disastrous (we will delete the
                 # directory).
@@ -144,6 +143,9 @@ class RootfsPlugin(SourcePlugin):
                     logger.error("'%s' points to a path outside the rootfs" % orig_path)
                     sys.exit(1)
 
+                if not os.path.lexists(full_path):
+                    continue
+
                 if path.endswith(os.sep):
                     # Delete content only.
                     for entry in os.listdir(full_path):
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH v7 05/10] wic: Avoid creating invalid pseudo directory
  2020-04-19  6:35 [PATCH v7 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
                   ` (3 preceding siblings ...)
  2020-04-19  6:35 ` [PATCH v7 04/10] wic: Continue if excluded_path does not exist Ricardo Ribalda
@ 2020-04-19  6:35 ` Ricardo Ribalda
  2020-04-19  6:35 ` [PATCH v7 06/10] oeqa: wic: Add tests for permissions and change-directory Ricardo Ribalda
                   ` (6 subsequent siblings)
  11 siblings, 0 replies; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-19  6:35 UTC (permalink / raw)
  To: openembedded-core, Paul Barker
  Cc: Ricardo Ribalda Delgado, Ricardo Ribalda Delgado

From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>

If the source of the rootfs is not a bitbake cooked image, or it is not
pointing to the root of one, we call pseudo again, which will produce
a new pseudo folder at rootfs/../pseudo

Eg:

part /etc --source rootfs --rootfs-dir=${IMAGE_ROOTFS}/home --fstype=ext4

Cc: Paul Barker <pbarker@konsulko.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
---
 scripts/lib/wic/partition.py | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/scripts/lib/wic/partition.py b/scripts/lib/wic/partition.py
index 3240be072a..7d9dd616a6 100644
--- a/scripts/lib/wic/partition.py
+++ b/scripts/lib/wic/partition.py
@@ -199,13 +199,14 @@ class Partition():
         Currently handles ext2/3/4, btrfs, vfat and squashfs.
         """
         p_prefix = os.environ.get("PSEUDO_PREFIX", "%s/usr" % native_sysroot)
-        if (pseudo_dir == None):
-            pseudo_dir = "%s/../pseudo" %  rootfs_dir
-        pseudo = "export PSEUDO_PREFIX=%s;" % p_prefix
-        pseudo += "export PSEUDO_LOCALSTATEDIR=%s;" % pseudo_dir
-        pseudo += "export PSEUDO_PASSWD=%s;" % rootfs_dir
-        pseudo += "export PSEUDO_NOSYMLINKEXP=1;"
-        pseudo += "%s " % get_bitbake_var("FAKEROOTCMD")
+        if (pseudo_dir):
+            pseudo = "export PSEUDO_PREFIX=%s;" % p_prefix
+            pseudo += "export PSEUDO_LOCALSTATEDIR=%s;" % pseudo_dir
+            pseudo += "export PSEUDO_PASSWD=%s;" % rootfs_dir
+            pseudo += "export PSEUDO_NOSYMLINKEXP=1;"
+            pseudo += "%s " % get_bitbake_var("FAKEROOTCMD")
+        else:
+            pseudo = None
 
         rootfs = "%s/rootfs_%s.%s.%s" % (cr_workdir, self.label,
                                          self.lineno, self.fstype)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH v7 06/10] oeqa: wic: Add tests for permissions and change-directory
  2020-04-19  6:35 [PATCH v7 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
                   ` (4 preceding siblings ...)
  2020-04-19  6:35 ` [PATCH v7 05/10] wic: Avoid creating invalid pseudo directory Ricardo Ribalda
@ 2020-04-19  6:35 ` Ricardo Ribalda
  2020-04-19  6:35 ` [PATCH v7 07/10] wic: misc: Do not find for executables in ALREADY_PROVIDED Ricardo Ribalda
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-19  6:35 UTC (permalink / raw)
  To: openembedded-core, Paul Barker
  Cc: Ricardo Ribalda Delgado, Ricardo Ribalda Delgado

From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>

Make sure that the permissions and username are respected when using all
the rootfs modifiers.

Add tests for change-directory command

Cc: Paul Barker <pbarker@konsulko.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
---
 meta/lib/oeqa/selftest/cases/wic.py | 90 +++++++++++++++++++++++++++++
 1 file changed, 90 insertions(+)

diff --git a/meta/lib/oeqa/selftest/cases/wic.py b/meta/lib/oeqa/selftest/cases/wic.py
index 626a217e69..41cf23f778 100644
--- a/meta/lib/oeqa/selftest/cases/wic.py
+++ b/meta/lib/oeqa/selftest/cases/wic.py
@@ -62,6 +62,12 @@ def extract_files(debugfs_output):
     return [line.split('/')[5].strip() for line in \
             debugfs_output.strip().split('/\n')]
 
+def files_own_by_root(debugfs_output):
+    for line in debugfs_output.strip().split('/\n'):
+        if line.split('/')[3:5] != ['0', '0']:
+            print(debugfs_output)
+            return False
+    return True
 
 class WicTestCase(OESelftestTestCase):
     """Wic test class."""
@@ -84,6 +90,7 @@ class WicTestCase(OESelftestTestCase):
                 self.skipTest('wic-tools cannot be built due its (intltool|gettext)-native dependency and NLS disable')
 
             bitbake('core-image-minimal')
+            bitbake('core-image-minimal-mtdutils')
             WicTestCase.image_is_ready = True
 
         rmtree(self.resultdir, ignore_errors=True)
@@ -506,6 +513,89 @@ part /part2 --source rootfs --ondisk mmcblk0 --fstype=ext4 --include-path %s"""
                                       % (wks_file, self.resultdir), ignore_status=True).status)
         os.remove(wks_file)
 
+    def test_permissions(self):
+        """Test permissions are respected"""
+
+        oldpath = os.environ['PATH']
+        os.environ['PATH'] = get_bb_var("PATH", "wic-tools")
+
+        t_normal = """
+part / --source rootfs --fstype=ext4
+"""
+        t_exclude = """
+part / --source rootfs --fstype=ext4 --exclude-path=home
+"""
+        t_multi = """
+part / --source rootfs --ondisk sda --fstype=ext4
+part /export --source rootfs --rootfs=core-image-minimal-mtdutils --fstype=ext4
+"""
+        t_change = """
+part / --source rootfs --ondisk sda --fstype=ext4 --exclude-path=etc/   
+part /etc --source rootfs --fstype=ext4 --change-directory=etc
+"""
+        tests = [t_normal, t_exclude, t_multi, t_change]
+
+        try:
+            for test in tests:
+                include_path = os.path.join(self.resultdir, 'test-include')
+                os.makedirs(include_path)
+                wks_file = os.path.join(include_path, 'temp.wks')
+                with open(wks_file, 'w') as wks:
+                    wks.write(test)
+                runCmd("wic create %s -e core-image-minimal -o %s" \
+                                       % (wks_file, self.resultdir))
+
+                for part in glob(os.path.join(self.resultdir, 'temp-*.direct.p*')):
+                    res = runCmd("debugfs -R 'ls -p' %s 2>/dev/null" % (part))
+                    self.assertEqual(True, files_own_by_root(res.output))
+
+                rmtree(self.resultdir, ignore_errors=True)
+
+        finally:
+            os.environ['PATH'] = oldpath
+
+    def test_change_directory(self):
+        """Test --change-directory wks option."""
+
+        oldpath = os.environ['PATH']
+        os.environ['PATH'] = get_bb_var("PATH", "wic-tools")
+
+        try:
+            include_path = os.path.join(self.resultdir, 'test-include')
+            os.makedirs(include_path)
+            wks_file = os.path.join(include_path, 'temp.wks')
+            with open(wks_file, 'w') as wks:
+                wks.write("part /etc --source rootfs --fstype=ext4 --change-directory=etc")
+            runCmd("wic create %s -e core-image-minimal -o %s" \
+                                       % (wks_file, self.resultdir))
+
+            part1 = glob(os.path.join(self.resultdir, 'temp-*.direct.p1'))[0]
+
+            res = runCmd("debugfs -R 'ls -p' %s 2>/dev/null" % (part1))
+            files = extract_files(res.output)
+            self.assertIn('passwd', files)
+
+        finally:
+            os.environ['PATH'] = oldpath
+
+    def test_change_directory_errors(self):
+        """Test --change-directory wks option error handling."""
+        wks_file = 'temp.wks'
+
+        # Absolute argument.
+        with open(wks_file, 'w') as wks:
+            wks.write("part / --source rootfs --fstype=ext4 --change-directory /usr")
+        self.assertNotEqual(0, runCmd("wic create %s -e core-image-minimal -o %s" \
+                                      % (wks_file, self.resultdir), ignore_status=True).status)
+        os.remove(wks_file)
+
+        # Argument pointing to parent directory.
+        with open(wks_file, 'w') as wks:
+            wks.write("part / --source rootfs --fstype=ext4 --change-directory ././..")
+        self.assertNotEqual(0, runCmd("wic create %s -e core-image-minimal -o %s" \
+                                      % (wks_file, self.resultdir), ignore_status=True).status)
+        os.remove(wks_file)
+
 class Wic2(WicTestCase):
 
     def test_bmap_short(self):
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH v7 07/10] wic: misc: Do not find for executables in ALREADY_PROVIDED
  2020-04-19  6:35 [PATCH v7 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
                   ` (5 preceding siblings ...)
  2020-04-19  6:35 ` [PATCH v7 06/10] oeqa: wic: Add tests for permissions and change-directory Ricardo Ribalda
@ 2020-04-19  6:35 ` Ricardo Ribalda
  2020-04-26 12:59   ` [OE-core] " Richard Purdie
  2020-04-19  6:35 ` [PATCH v7 08/10] wic: root: Add an opt. destination on include-path Ricardo Ribalda
                   ` (4 subsequent siblings)
  11 siblings, 1 reply; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-19  6:35 UTC (permalink / raw)
  To: openembedded-core, Paul Barker
  Cc: Ricardo Ribalda Delgado, Ricardo Ribalda Delgado

From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>

Executables like tar won't be available on the native sysroot, as they
are part of the ALREADY_PROVIDED variable.

Cc: Paul Barker <pbarker@konsulko.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
---
 scripts/lib/wic/misc.py | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/scripts/lib/wic/misc.py b/scripts/lib/wic/misc.py
index 1f199b9f23..91975ba151 100644
--- a/scripts/lib/wic/misc.py
+++ b/scripts/lib/wic/misc.py
@@ -45,7 +45,8 @@ NATIVE_RECIPES = {"bmaptool": "bmap-tools",
                   "parted": "parted",
                   "sfdisk": "util-linux",
                   "sgdisk": "gptfdisk",
-                  "syslinux": "syslinux"
+                  "syslinux": "syslinux",
+                  "tar": "tar"
                  }
 
 def runtool(cmdln_or_args):
@@ -112,6 +113,15 @@ def exec_cmd(cmd_and_args, as_shell=False):
     """
     return _exec_cmd(cmd_and_args, as_shell)[1]
 
+def find_executable(cmd, paths):
+    recipe = cmd
+    if recipe in NATIVE_RECIPES:
+        recipe =  NATIVE_RECIPES[recipe]
+    provided = get_bitbake_var("ASSUME_PROVIDED")
+    if provided and "%s-native" % recipe in provided:
+        return True
+
+    return spawn.find_executable(cmd, paths)
 
 def exec_native_cmd(cmd_and_args, native_sysroot, pseudo=""):
     """
@@ -136,7 +146,7 @@ def exec_native_cmd(cmd_and_args, native_sysroot, pseudo=""):
     logger.debug("exec_native_cmd: %s", native_cmd_and_args)
 
     # If the command isn't in the native sysroot say we failed.
-    if spawn.find_executable(args[0], native_paths):
+    if find_executable(args[0], native_paths):
         ret, out = _exec_cmd(native_cmd_and_args, True)
     else:
         ret = 127
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH v7 08/10] wic: root: Add an opt. destination on include-path
  2020-04-19  6:35 [PATCH v7 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
                   ` (6 preceding siblings ...)
  2020-04-19  6:35 ` [PATCH v7 07/10] wic: misc: Do not find for executables in ALREADY_PROVIDED Ricardo Ribalda
@ 2020-04-19  6:35 ` Ricardo Ribalda
  2020-04-19  6:35 ` [PATCH v7 09/10] wic: rootfs: Combine path_validation in one function Ricardo Ribalda
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-19  6:35 UTC (permalink / raw)
  To: openembedded-core, Paul Barker
  Cc: Ricardo Ribalda Delgado, Ricardo Ribalda Delgado

From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>

Allow specifying an optional destination to include-path and make the
option aware of permissions and owners.

It is very useful for making a partition that contains the rootfs for a
host and a target Eg:

/ -> Roofs for the host
/export/ -> Rootfs for the target (which will netboot)

Although today we support making a partition for "/export" this might
not be compatible with some upgrade systems, or we might be limited by
the number of partitions.

With this patch we can use something like:

part / --source rootfs --fstype=ext4 --include-path core-image-minimal-mtdutils export/ --include-path hello

on the .wks file.

Cc: Paul Barker <pbarker@konsulko.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
---
 meta/recipes-core/meta/wic-tools.bb      |  2 +-
 scripts/lib/wic/help.py                  | 20 ++++----
 scripts/lib/wic/ksparser.py              |  2 +-
 scripts/lib/wic/plugins/source/rootfs.py | 60 +++++++++++++++++++++++-
 4 files changed, 72 insertions(+), 12 deletions(-)

diff --git a/meta/recipes-core/meta/wic-tools.bb b/meta/recipes-core/meta/wic-tools.bb
index 09eb409e87..8aeb942ed2 100644
--- a/meta/recipes-core/meta/wic-tools.bb
+++ b/meta/recipes-core/meta/wic-tools.bb
@@ -6,7 +6,7 @@ DEPENDS = "\
            parted-native syslinux-native gptfdisk-native dosfstools-native \
            mtools-native bmap-tools-native grub-efi-native cdrtools-native \
            btrfs-tools-native squashfs-tools-native pseudo-native \
-           e2fsprogs-native util-linux-native \
+           e2fsprogs-native util-linux-native tar-native\
            "
 DEPENDS_append_x86 = " syslinux grub-efi systemd-boot"
 DEPENDS_append_x86-64 = " syslinux grub-efi systemd-boot"
diff --git a/scripts/lib/wic/help.py b/scripts/lib/wic/help.py
index 62a2a90e79..bd3a2b97df 100644
--- a/scripts/lib/wic/help.py
+++ b/scripts/lib/wic/help.py
@@ -971,14 +971,18 @@ DESCRIPTION
                          has an effect with the rootfs source plugin.
 
          --include-path: This option is specific to wic. It adds the contents
-                         of the given path to the resulting image. The path is
-                         relative to the directory in which wic is running not
-                         the rootfs itself so use of an absolute path is
-                         recommended. This option is most useful when multiple
-                         copies of the rootfs are added to an image and it is
-                         required to add extra content to only one of these
-                         copies. This option only has an effect with the rootfs
-                         source plugin.
+                         of the given path or a rootfs to the resulting image.
+                         The option contains two fields, the origin and the
+                         destination. When the origin is a rootfs, it follows
+                         the same logic as the rootfs-dir argument and the
+                         permissions and owners are kept. When the origin is a
+                         path, it is relative to the directory in which wic is
+                         running not the rootfs itself so use of an absolute
+                         path is recommended, and the owner and group is set to
+                         root:root. If no destination is given it is
+                         automatically set to the root of the rootfs. This
+                         option only has an effect with the rootfs source
+                         plugin.
 
          --change-directory: This option is specific to wic. It changes to the
                              given directory before copying the files. This
diff --git a/scripts/lib/wic/ksparser.py b/scripts/lib/wic/ksparser.py
index c60869d397..b8befe78e3 100644
--- a/scripts/lib/wic/ksparser.py
+++ b/scripts/lib/wic/ksparser.py
@@ -137,7 +137,7 @@ class KickStart():
         part.add_argument('--active', action='store_true')
         part.add_argument('--align', type=int)
         part.add_argument('--exclude-path', nargs='+')
-        part.add_argument('--include-path', nargs='+')
+        part.add_argument('--include-path', nargs='+', action='append')
         part.add_argument('--change-directory')
         part.add_argument("--extra-space", type=sizetype)
         part.add_argument('--fsoptions', dest='fsopts')
diff --git a/scripts/lib/wic/plugins/source/rootfs.py b/scripts/lib/wic/plugins/source/rootfs.py
index 247f61ff7c..544e868b5e 100644
--- a/scripts/lib/wic/plugins/source/rootfs.py
+++ b/scripts/lib/wic/plugins/source/rootfs.py
@@ -17,6 +17,7 @@ import shutil
 import sys
 
 from oe.path import copyhardlinktree
+from pathlib import Path
 
 from wic import WicError
 from wic.pluginbase import SourcePlugin
@@ -126,8 +127,63 @@ class RootfsPlugin(SourcePlugin):
                                                     orig_dir, new_rootfs)
                 exec_native_cmd(pseudo_cmd, native_sysroot)
 
-            for path in part.include_path or []:
-                copyhardlinktree(path, new_rootfs)
+            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 = os.path.realpath(os.path.join(new_rootfs, path))
+                    if not destination.startswith(new_rootfs):
+                        logger.error("%s %s" % (destination, new_rootfs))
+                        sys.exit(1)
+                    Path(destination).mkdir(parents=True, exist_ok=True)
+                else:
+                    destination = 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 orig_path in part.exclude_path or []:
                 path = orig_path
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH v7 09/10] wic: rootfs: Combine path_validation in one function
  2020-04-19  6:35 [PATCH v7 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
                   ` (7 preceding siblings ...)
  2020-04-19  6:35 ` [PATCH v7 08/10] wic: root: Add an opt. destination on include-path Ricardo Ribalda
@ 2020-04-19  6:35 ` Ricardo Ribalda
  2020-04-19  6:35 ` [PATCH v7 10/10] oeqa: wic: Add more tests for include_path Ricardo Ribalda
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-19  6:35 UTC (permalink / raw)
  To: openembedded-core, Paul Barker
  Cc: Ricardo Ribalda Delgado, Ricardo Ribalda Delgado

From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>

Combine all the common path validation in a function to avoid code
duplication.

Cc: Paul Barker <pbarker@konsulko.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
---
 scripts/lib/wic/plugins/source/rootfs.py | 41 +++++++++++-------------
 1 file changed, 19 insertions(+), 22 deletions(-)

diff --git a/scripts/lib/wic/plugins/source/rootfs.py b/scripts/lib/wic/plugins/source/rootfs.py
index 544e868b5e..f1db83f8a1 100644
--- a/scripts/lib/wic/plugins/source/rootfs.py
+++ b/scripts/lib/wic/plugins/source/rootfs.py
@@ -32,6 +32,22 @@ 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):
@@ -99,14 +115,7 @@ class RootfsPlugin(SourcePlugin):
                 cd = part.change_directory
                 if cd[-1] == '/':
                     cd = cd[:-1]
-                if os.path.isabs(cd):
-                    logger.error("Must be relative: --change-directory=%s" % cd)
-                    sys.exit(1)
-                orig_dir = os.path.realpath(os.path.join(part.rootfs_dir, cd))
-                if not orig_dir.startswith(part.rootfs_dir):
-                    logger.error("'%s' points to a path outside the rootfs" % orig_dir)
-                    sys.exit(1)
-
+                orig_dir = cls.__validate_path("--change-directory", part.rootfs_dir, cd)
             else:
                 orig_dir = part.rootfs_dir
             copyhardlinktree(orig_dir, new_rootfs)
@@ -168,10 +177,7 @@ class RootfsPlugin(SourcePlugin):
 
                 #create destination
                 if path:
-                    destination = os.path.realpath(os.path.join(new_rootfs, path))
-                    if not destination.startswith(new_rootfs):
-                        logger.error("%s %s" % (destination, new_rootfs))
-                        sys.exit(1)
+                    destination = cls.__validate_path("--include-path", new_rootfs, path)
                     Path(destination).mkdir(parents=True, exist_ok=True)
                 else:
                     destination = new_rootfs
@@ -187,17 +193,8 @@ class RootfsPlugin(SourcePlugin):
 
             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 = os.path.realpath(os.path.join(new_rootfs, path))
-                # 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)
+                full_path = cls.__validate_path("--exclude-path", new_rootfs, path)
 
                 if not os.path.lexists(full_path):
                     continue
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH v7 10/10] oeqa: wic: Add more tests for include_path
  2020-04-19  6:35 [PATCH v7 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
                   ` (8 preceding siblings ...)
  2020-04-19  6:35 ` [PATCH v7 09/10] wic: rootfs: Combine path_validation in one function Ricardo Ribalda
@ 2020-04-19  6:35 ` Ricardo Ribalda
  2020-04-22 17:39 ` [PATCH v7 00/10] Fix permissions and embed-rotofs Paul Barker
  2020-04-23  8:54 ` [OE-core] " Richard Purdie
  11 siblings, 0 replies; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-19  6:35 UTC (permalink / raw)
  To: openembedded-core, Paul Barker
  Cc: Ricardo Ribalda Delgado, Ricardo Ribalda Delgado

From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>

Make sure permissions are respected.

Add new test for orig/destination option.

Cc: Paul Barker <pbarker@konsulko.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
---
 meta/lib/oeqa/selftest/cases/wic.py | 63 ++++++++++++++++++++++++++++-
 1 file changed, 62 insertions(+), 1 deletion(-)

diff --git a/meta/lib/oeqa/selftest/cases/wic.py b/meta/lib/oeqa/selftest/cases/wic.py
index 41cf23f778..c8765e5330 100644
--- a/meta/lib/oeqa/selftest/cases/wic.py
+++ b/meta/lib/oeqa/selftest/cases/wic.py
@@ -486,15 +486,76 @@ part /part2 --source rootfs --ondisk mmcblk0 --fstype=ext4 --include-path %s"""
             res = runCmd("debugfs -R 'ls -p' %s 2>/dev/null" % (part1))
             files = extract_files(res.output)
             self.assertNotIn('test-file', files)
+            self.assertEqual(True, files_own_by_root(res.output))
 
-            # Test partition 2, should not contain 'test-file'
+            # Test partition 2, should contain 'test-file'
             res = runCmd("debugfs -R 'ls -p' %s 2>/dev/null" % (part2))
             files = extract_files(res.output)
             self.assertIn('test-file', files)
+            self.assertEqual(True, files_own_by_root(res.output))
 
         finally:
             os.environ['PATH'] = oldpath
 
+    def test_include_path_embeded(self):
+        """Test --include-path wks option."""
+
+        oldpath = os.environ['PATH']
+        os.environ['PATH'] = get_bb_var("PATH", "wic-tools")
+
+        try:
+            include_path = os.path.join(self.resultdir, 'test-include')
+            os.makedirs(include_path)
+            with open(os.path.join(include_path, 'test-file'), 'w') as t:
+                t.write("test\n")
+            wks_file = os.path.join(include_path, 'temp.wks')
+            with open(wks_file, 'w') as wks:
+                wks.write("""
+part / --source rootfs  --fstype=ext4 --include-path %s --include-path core-image-minimal-mtdutils export/"""
+                          % (include_path))
+            runCmd("wic create %s -e core-image-minimal -o %s" \
+                                       % (wks_file, self.resultdir))
+
+            part1 = glob(os.path.join(self.resultdir, 'temp-*.direct.p1'))[0]
+
+            res = runCmd("debugfs -R 'ls -p' %s 2>/dev/null" % (part1))
+            files = extract_files(res.output)
+            self.assertIn('test-file', files)
+            self.assertEqual(True, files_own_by_root(res.output))
+
+            res = runCmd("debugfs -R 'ls -p /export/etc/' %s 2>/dev/null" % (part1))
+            files = extract_files(res.output)
+            self.assertIn('passwd', files)
+            self.assertEqual(True, files_own_by_root(res.output))
+
+        finally:
+            os.environ['PATH'] = oldpath
+
+    def test_include_path_errors(self):
+        """Test --include-path wks option error handling."""
+        wks_file = 'temp.wks'
+
+        # Absolute argument.
+        with open(wks_file, 'w') as wks:
+            wks.write("part / --source rootfs --fstype=ext4 --include-path core-image-minimal-mtdutils /export")
+        self.assertNotEqual(0, runCmd("wic create %s -e core-image-minimal -o %s" \
+                                      % (wks_file, self.resultdir), ignore_status=True).status)
+        os.remove(wks_file)
+
+        # Argument pointing to parent directory.
+        with open(wks_file, 'w') as wks:
+            wks.write("part / --source rootfs --fstype=ext4 --include-path core-image-minimal-mtdutils ././..")
+        self.assertNotEqual(0, runCmd("wic create %s -e core-image-minimal -o %s" \
+                                      % (wks_file, self.resultdir), ignore_status=True).status)
+        os.remove(wks_file)
+
+        # 3 Argument pointing to parent directory.
+        with open(wks_file, 'w') as wks:
+            wks.write("part / --source rootfs --fstype=ext4 --include-path core-image-minimal-mtdutils export/ dummy")
+        self.assertNotEqual(0, runCmd("wic create %s -e core-image-minimal -o %s" \
+                                      % (wks_file, self.resultdir), ignore_status=True).status)
+        os.remove(wks_file)
+
     def test_exclude_path_errors(self):
         """Test --exclude-path wks option error handling."""
         wks_file = 'temp.wks'
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* Re: [PATCH v7 00/10] Fix permissions and embed-rotofs
  2020-04-19  6:35 [PATCH v7 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
                   ` (9 preceding siblings ...)
  2020-04-19  6:35 ` [PATCH v7 10/10] oeqa: wic: Add more tests for include_path Ricardo Ribalda
@ 2020-04-22 17:39 ` Paul Barker
  2020-04-23  8:54 ` [OE-core] " Richard Purdie
  11 siblings, 0 replies; 25+ messages in thread
From: Paul Barker @ 2020-04-22 17:39 UTC (permalink / raw)
  To: Ricardo Ribalda Delgado; +Cc: openembedded-core

On Sun, 19 Apr 2020 08:35:28 +0200
Ricardo Ribalda Delgado <ricardo@ribalda.com> wrote:

> Today wic behaves differently if we run it from bitbake of directly from the
> commandline.
> 
> When it is run from bitbake, the permissions/usersnames are handled by the
> pseudo database of the main image.
> 
> When it is run from the comandline ,it is run outside the main image database.
> 
> This results on permissions/usernames not working ok on some usecases on both
> bitbake and wic.
> 
> 
> This is an attempt to fix all the permission bugs that I am aware from wic.
> Using the following usecases:
> 
> 
> #exclude-path
> part / --source rootfs --fstype=ext4 --exclude-path=home
> 
> #split_partition
> part / --source rootfs --ondisk sda --fstype=ext4 --exclude-path=etc/
> part /etc --source rootfs --rootfs-dir=tmp/work/qt5222-poky-linux/core-image-minimal/1.0-r0/rootfs/etc/ --fstype=ext4
> 
> #multi_partition
> part / --source rootfs --ondisk sda --fstype=ext4
> part /export --source rootfs --rootfs=core-image-minimal-mtdutils --fstype=ext4
> 
> 
> With the current master:
> -------------------------
> #exclude-path
> From Bitbake: OK
> wic cmdline: FAIL
> 
> #split_partition
> From Bitbake: OK
> wic cmdline: FAIL, permissions invalid on both partitions
> 
> #multi_partition
> From Bitbake: FAIL second partition
> wic cmdline: OK
> 
> 
> After:  wic: Fix permissions when using exclude or include path
> --------------------------------------------------------------------
> #exclude-path
> From Bitbake: OK
> wic cmdline: OK
> 
> #split_partition
> From Bitbake: OK
> wic cmdline: FAIL, permissions invalid on second partition
> 
> #multi_partition
> From Bitbake: FAIL second partition
> wic cmdline: OK
> 
> 
> After: wic: Fix multi images .wks with bitbake
> ----------------------------------------------
> #exclude-path
> From Bitbake: OK
> wic cmdline: OK
> 
> #split_partition
> From Bitbake: FAIL, permissions invalid on second partition
> wic cmdline: FAIL, permissions invalid on second partition
> 
> #multi_partition
> From Bitbake: OK
> wic cmdline: OK
> 
> 
> 
> After: wic: Add --change-directory argument
> --------------------------------------------
> 
> we can have a .wks like:
> part / --source rootfs --ondisk sda --fstype=ext4 --exclude-path=etc/
> part /etc --source rootfs --fstype=ext4 --change-directory=etc
> 
> 
> Wich works fine from bitbake and from cmdline, and has the same functionality as
> split_partition.
> 
> 
> Changelog v6->v7 (Thanks Paul):
>   - Use passwd instead of shadow for oetests
>   - For pseudo folder inside workdir
>   - Improve comments on tar
>   - Use line number on tar name
>   - Allow include-files of files in workdir
> 
> Changelog v5->v6:
>   - Allow two arguments to include-path
>   - Fix permission on include-path
>   - exec_native with ASSUME_PROVIDED
>   - More unittesting
> 
> Changelog v4->v5:
>   - Add unittesting
>   - wic: Avoid creating invalid pseudo directory
> 
> Ricardo Ribalda Delgado (10):
>   wic: Fix permissions when using exclude or include path
>   wic: Fix multi images .wks with bitbake
>   wic: Add --change-directory argument
>   wic: Continue if excluded_path does not exist
>   wic: Avoid creating invalid pseudo directory
>   oeqa: wic: Add tests for permissions and change-directory
>   wic: misc: Do not find for executables in ALREADY_PROVIDED
>   wic: root: Add an opt. destination on include-path
>   wic: rootfs: Combine path_validation in one function
>   oeqa: wic: Add more tests for include_path
> 
>  meta/classes/image_types_wic.bbclass     |   8 +-
>  meta/lib/oeqa/selftest/cases/wic.py      | 153 ++++++++++++++++++++++-
>  meta/recipes-core/meta/wic-tools.bb      |   2 +-
>  scripts/lib/wic/help.py                  |  26 ++--
>  scripts/lib/wic/ksparser.py              |   3 +-
>  scripts/lib/wic/misc.py                  |  14 ++-
>  scripts/lib/wic/partition.py             |  20 +--
>  scripts/lib/wic/plugins/source/rootfs.py | 133 +++++++++++++++++---
>  8 files changed, 318 insertions(+), 41 deletions(-)
> 

All looks good to me now, thanks for iterating on this :)

My knowledge on pseudo is a little limited so I can't guarantee I've caught
all the implications of these changes on that front. You've included tests
and it's going to go into master at the start of a development cycle so we'll
have time for anything I've missed to get shaken out. I think it's good to
merge now.

-- 
Paul Barker
Konsulko Group

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [OE-core] [PATCH v7 00/10] Fix permissions and embed-rotofs
  2020-04-19  6:35 [PATCH v7 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
                   ` (10 preceding siblings ...)
  2020-04-22 17:39 ` [PATCH v7 00/10] Fix permissions and embed-rotofs Paul Barker
@ 2020-04-23  8:54 ` Richard Purdie
  2020-04-23  9:57   ` Ricardo Ribalda
  11 siblings, 1 reply; 25+ messages in thread
From: Richard Purdie @ 2020-04-23  8:54 UTC (permalink / raw)
  To: Ricardo Ribalda, openembedded-core, Paul Barker; +Cc: Ricardo Ribalda Delgado

On Sun, 2020-04-19 at 08:35 +0200, Ricardo Ribalda wrote:
> 
> Changelog v6->v7 (Thanks Paul):
>   - Use passwd instead of shadow for oetests
>   - For pseudo folder inside workdir
>   - Improve comments on tar
>   - Use line number on tar name
>   - Allow include-files of files in workdir
> 
> Changelog v5->v6:
>   - Allow two arguments to include-path
>   - Fix permission on include-path
>   - exec_native with ASSUME_PROVIDED
>   - More unittesting
> 
> Changelog v4->v5:
>   - Add unittesting
>   - wic: Avoid creating invalid pseudo directory
> 
> Ricardo Ribalda Delgado (10):
>   wic: Fix permissions when using exclude or include path
>   wic: Fix multi images .wks with bitbake
>   wic: Add --change-directory argument
>   wic: Continue if excluded_path does not exist
>   wic: Avoid creating invalid pseudo directory
>   oeqa: wic: Add tests for permissions and change-directory
>   wic: misc: Do not find for executables in ALREADY_PROVIDED
>   wic: root: Add an opt. destination on include-path
>   wic: rootfs: Combine path_validation in one function
>   oeqa: wic: Add more tests for include_path

I did run this through the autobuilder along with other changes and
there were 5 oe-selftest failures for wic:

https://autobuilder.yoctoproject.org/typhoon/#/builders/79/builds/858
https://autobuilder.yoctoproject.org/typhoon/#/builders/80/builds/855
https://autobuilder.yoctoproject.org/typhoon/#/builders/86/builds/861
https://autobuilder.yoctoproject.org/typhoon/#/builders/87/builds/849

Cheers,

Richard


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [OE-core] [PATCH v7 00/10] Fix permissions and embed-rotofs
  2020-04-23  8:54 ` [OE-core] " Richard Purdie
@ 2020-04-23  9:57   ` Ricardo Ribalda
  2020-04-23 10:45     ` Richard Purdie
  0 siblings, 1 reply; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-23  9:57 UTC (permalink / raw)
  To: Richard Purdie; +Cc: openembedded-core, Paul Barker

Hi Richard

Thanks for the test.

All the errors seem to have the same pattern:

FileNotFoundError: [Errno 2] No such file or directory:
'/home/pokybuild/yocto-worker/oe-selftest-centos/build/build-st-27135/tmp/work/qemux86_64-poky-linux/oe-selftest-image/1.0-r0/testimage/qemurunner_log.20200423015612'

I do not believe that it is related to my patchset, I have seen that
you are already running the selftest without the patchset
https://autobuilder.yoctoproject.org/typhoon/#/builders/87/builds/850

Lets see if it also crashes or not. I am also trying to replicate locally.

Best regards!

On Thu, Apr 23, 2020 at 10:54 AM Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:
>
> On Sun, 2020-04-19 at 08:35 +0200, Ricardo Ribalda wrote:
> >
> > Changelog v6->v7 (Thanks Paul):
> >   - Use passwd instead of shadow for oetests
> >   - For pseudo folder inside workdir
> >   - Improve comments on tar
> >   - Use line number on tar name
> >   - Allow include-files of files in workdir
> >
> > Changelog v5->v6:
> >   - Allow two arguments to include-path
> >   - Fix permission on include-path
> >   - exec_native with ASSUME_PROVIDED
> >   - More unittesting
> >
> > Changelog v4->v5:
> >   - Add unittesting
> >   - wic: Avoid creating invalid pseudo directory
> >
> > Ricardo Ribalda Delgado (10):
> >   wic: Fix permissions when using exclude or include path
> >   wic: Fix multi images .wks with bitbake
> >   wic: Add --change-directory argument
> >   wic: Continue if excluded_path does not exist
> >   wic: Avoid creating invalid pseudo directory
> >   oeqa: wic: Add tests for permissions and change-directory
> >   wic: misc: Do not find for executables in ALREADY_PROVIDED
> >   wic: root: Add an opt. destination on include-path
> >   wic: rootfs: Combine path_validation in one function
> >   oeqa: wic: Add more tests for include_path
>
> I did run this through the autobuilder along with other changes and
> there were 5 oe-selftest failures for wic:
>
> https://autobuilder.yoctoproject.org/typhoon/#/builders/79/builds/858
> https://autobuilder.yoctoproject.org/typhoon/#/builders/80/builds/855
> https://autobuilder.yoctoproject.org/typhoon/#/builders/86/builds/861
> https://autobuilder.yoctoproject.org/typhoon/#/builders/87/builds/849
>
> Cheers,
>
> Richard
>


-- 
Ricardo Ribalda

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [OE-core] [PATCH v7 00/10] Fix permissions and embed-rotofs
  2020-04-23  9:57   ` Ricardo Ribalda
@ 2020-04-23 10:45     ` Richard Purdie
  2020-04-23 10:47       ` Ricardo Ribalda
       [not found]       ` <16086D1E57B63D5A.14079@lists.openembedded.org>
  0 siblings, 2 replies; 25+ messages in thread
From: Richard Purdie @ 2020-04-23 10:45 UTC (permalink / raw)
  To: Ricardo Ribalda Delgado; +Cc: openembedded-core, Paul Barker

On Thu, 2020-04-23 at 11:57 +0200, Ricardo Ribalda Delgado wrote:
> Hi Richard
> 
> Thanks for the test.
> 
> All the errors seem to have the same pattern:
> 
> FileNotFoundError: [Errno 2] No such file or directory:
> '/home/pokybuild/yocto-worker/oe-selftest-centos/build/build-st-
> 27135/tmp/work/qemux86_64-poky-linux/oe-selftest-image/1.0-
> r0/testimage/qemurunner_log.20200423015612'
> 
> I do not believe that it is related to my patchset, I have seen that
> you are already running the selftest without the patchset
> https://autobuilder.yoctoproject.org/typhoon/#/builders/87/builds/850
> 
> Lets see if it also crashes or not. I am also trying to replicate
> locally.

It did recur:

https://autobuilder.yoctoproject.org/typhoon/#/builders/86/builds/862

so your patches are probably not the cause, sorry! :)

I'll continue to try and track it down.

Cheers,

Richard


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [OE-core] [PATCH v7 00/10] Fix permissions and embed-rotofs
  2020-04-23 10:45     ` Richard Purdie
@ 2020-04-23 10:47       ` Ricardo Ribalda
       [not found]       ` <16086D1E57B63D5A.14079@lists.openembedded.org>
  1 sibling, 0 replies; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-23 10:47 UTC (permalink / raw)
  To: Richard Purdie; +Cc: openembedded-core, Paul Barker

On Thu, Apr 23, 2020 at 12:45 PM Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:
>
> On Thu, 2020-04-23 at 11:57 +0200, Ricardo Ribalda Delgado wrote:
> > Hi Richard
> >
> > Thanks for the test.
> >
> > All the errors seem to have the same pattern:
> >
> > FileNotFoundError: [Errno 2] No such file or directory:
> > '/home/pokybuild/yocto-worker/oe-selftest-centos/build/build-st-
> > 27135/tmp/work/qemux86_64-poky-linux/oe-selftest-image/1.0-
> > r0/testimage/qemurunner_log.20200423015612'
> >
> > I do not believe that it is related to my patchset, I have seen that
> > you are already running the selftest without the patchset
> > https://autobuilder.yoctoproject.org/typhoon/#/builders/87/builds/850
> >
> > Lets see if it also crashes or not. I am also trying to replicate
> > locally.
>
> It did recur:
>
> https://autobuilder.yoctoproject.org/typhoon/#/builders/86/builds/862
>
> so your patches are probably not the cause, sorry! :)

No problem, thanks!

I am trying to replicate it anyway here. If I find a problem I will ping you.

>
> I'll continue to try and track it down.
>
> Cheers,
>
> Richard
>


-- 
Ricardo Ribalda

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [OE-core] [PATCH v7 00/10] Fix permissions and embed-rotofs
       [not found]       ` <16086D1E57B63D5A.14079@lists.openembedded.org>
@ 2020-04-23 13:17         ` Ricardo Ribalda
  2020-04-23 13:23           ` Richard Purdie
  2020-04-25 21:07           ` Richard Purdie
  0 siblings, 2 replies; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-23 13:17 UTC (permalink / raw)
  To: Ricardo Ribalda Delgado; +Cc: Richard Purdie, openembedded-core, Paul Barker

On my setup, using debian crops the error is even different :(

If you want I can keep trying, otherwise I will leave it to the experts ;)


Best regards!

pokyuser@e81a7801004c:/workdir/build$ oe-selftest  -r
wic.Wic2.test_biosplusefi_plugin_qemu wic.Wic2.test_expand_mbr_image
wic.Wic2.test_qemu wic.Wic2.test_qemu_efi
wic.Wic2.test_rawcopy_plugin_qemu
2020-04-23 09:50:45,488 - oe-selftest - WARNING - meta-selftest layer
not found in BBLAYERS, adding it
2020-04-23 09:50:50,587 - oe-selftest - ERROR - Please unset
SANITY_TESTED_DISTROS in order to run oe-selftest
pokyuser@e81a7801004c:/workdir/build$ oe-selftest  -r
wic.Wic2.test_biosplusefi_plugin_qemu wic.Wic2.test_expand_mbr_image
wic.Wic2.test_qemu wic.Wic2.test_qemu_efi
wic.Wic2.test_rawcopy_plugin_qemu
2020-04-23 09:51:46,909 - oe-selftest - INFO - Adding layer libraries:
2020-04-23 09:51:46,910 - oe-selftest - INFO - /workdir/meta/lib
2020-04-23 09:51:46,910 - oe-selftest - INFO - /workdir/meta-yocto-bsp/lib
2020-04-23 09:51:46,910 - oe-selftest - INFO - /workdir/meta-selftest/lib
2020-04-23 09:51:46,912 - oe-selftest - INFO - Running bitbake -e to
test the configuration is valid/parsable
2020-04-23 09:51:50,683 - oe-selftest - INFO - Adding: "include
selftest.inc" in /workdir/build-st/conf/local.conf
2020-04-23 09:51:50,684 - oe-selftest - INFO - Adding: "include
bblayers.inc" in bblayers.conf
2020-04-23 09:51:50,685 - oe-selftest - INFO -
test_biosplusefi_plugin_qemu (wic.Wic2)
2020-04-23 11:15:10,685 - oe-selftest - INFO - Keepalive message
2020-04-23 12:38:30,687 - oe-selftest - INFO - Keepalive message
2020-04-23 12:46:55,356 - oe-selftest - INFO -  ... ERROR

Stdout:
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423124632
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/ssh_target_log.20200423124632
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:57999
Created listening socket for qemu serial console on: 127.0.0.1:45643
launchcmd=runqemu snapshot nographic  qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
tcpserial=57999:45643 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2137514
waiting at most 120 seconds for qemu pid (04/23/20 12:46:35)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231246_qemu
2020-04-23 12:46:55,357 - oe-selftest - INFO - Traceback (most recent
call last):
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 42, in wrapped_f
    return func(*args, **kwargs)
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 732, in
test_biosplusefi_plugin_qemu
    with runqemu('core-image-minimal', ssh=False, image_fstype='wic') as qemu:
  File "/usr/lib/python3.5/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/workdir/meta/lib/oeqa/utils/commands.py", line 342, in runqemu
    qemu.start(params=qemuparams, ssh=ssh,
runqemuparams=runqemuparams, launch_cmd=launch_cmd,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/targetcontrol.py", line 167, in start
    start = self.runner.start(params, get_ip=ssh,
extra_bootparams=extra_bootparams, runqemuparams=runqemuparams,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 166, in start
    return self.launch(launch_cmd, qemuparams=qemuparams,
get_ip=get_ip, extra_bootparams=extra_bootparams, env=env)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 245, in launch
    time.sleep(0.5)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 128, in handleSIGCHLD
    raise SystemExit
SystemExit

Stdout:
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423124632
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/ssh_target_log.20200423124632
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:57999
Created listening socket for qemu serial console on: 127.0.0.1:45643
launchcmd=runqemu snapshot nographic  qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
tcpserial=57999:45643 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2137514
waiting at most 120 seconds for qemu pid (04/23/20 12:46:35)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231246_qemu

2020-04-23 12:46:55,357 - oe-selftest - INFO - test_expand_mbr_image (wic.Wic2)
2020-04-23 12:48:53,064 - oe-selftest - INFO -  ... ERROR

Stdout:
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.ext4
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423124830
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/ssh_target_log.20200423124830
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:39485
Created listening socket for qemu serial console on: 127.0.0.1:51903
launchcmd=runqemu snapshot nographic  qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.ext4
tcpserial=39485:51903 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2144564
waiting at most 120 seconds for qemu pid (04/23/20 12:48:32)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231248_qemu
2020-04-23 12:48:53,065 - oe-selftest - INFO - Traceback (most recent
call last):
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 1002, in
test_expand_mbr_image
    with runqemu('core-image-minimal', ssh=False) as qemu:
  File "/usr/lib/python3.5/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/workdir/meta/lib/oeqa/utils/commands.py", line 342, in runqemu
    qemu.start(params=qemuparams, ssh=ssh,
runqemuparams=runqemuparams, launch_cmd=launch_cmd,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/targetcontrol.py", line 167, in start
    start = self.runner.start(params, get_ip=ssh,
extra_bootparams=extra_bootparams, runqemuparams=runqemuparams,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 166, in start
    return self.launch(launch_cmd, qemuparams=qemuparams,
get_ip=get_ip, extra_bootparams=extra_bootparams, env=env)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 245, in launch
    time.sleep(0.5)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 128, in handleSIGCHLD
    raise SystemExit
SystemExit

Stdout:
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.ext4
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423124830
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/ssh_target_log.20200423124830
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:39485
Created listening socket for qemu serial console on: 127.0.0.1:51903
launchcmd=runqemu snapshot nographic  qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.ext4
tcpserial=39485:51903 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2144564
waiting at most 120 seconds for qemu pid (04/23/20 12:48:32)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231248_qemu

2020-04-23 12:48:53,065 - oe-selftest - INFO - test_qemu (wic.Wic2)
2020-04-23 12:50:55,372 - oe-selftest - INFO -  ... ERROR

Stdout:
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/wic-image-minimal-qemux86-64.wic
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/wic-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423125032
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/wic-image-minimal/1.0-r0/testimage/ssh_target_log.20200423125032
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:41315
Created listening socket for qemu serial console on: 127.0.0.1:58191
launchcmd=runqemu snapshot nographic  qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/wic-image-minimal-qemux86-64.wic
tcpserial=41315:58191 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2152208
waiting at most 120 seconds for qemu pid (04/23/20 12:50:35)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231250_qemu
2020-04-23 12:50:55,373 - oe-selftest - INFO - Traceback (most recent
call last):
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 42, in wrapped_f
    return func(*args, **kwargs)
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 605, in test_qemu
    with runqemu('wic-image-minimal', ssh=False) as qemu:
  File "/usr/lib/python3.5/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/workdir/meta/lib/oeqa/utils/commands.py", line 342, in runqemu
    qemu.start(params=qemuparams, ssh=ssh,
runqemuparams=runqemuparams, launch_cmd=launch_cmd,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/targetcontrol.py", line 167, in start
    start = self.runner.start(params, get_ip=ssh,
extra_bootparams=extra_bootparams, runqemuparams=runqemuparams,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 166, in start
    return self.launch(launch_cmd, qemuparams=qemuparams,
get_ip=get_ip, extra_bootparams=extra_bootparams, env=env)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 245, in launch
    time.sleep(0.5)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 128, in handleSIGCHLD
    raise SystemExit
SystemExit

Stdout:
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/wic-image-minimal-qemux86-64.wic
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/wic-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423125032
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/wic-image-minimal/1.0-r0/testimage/ssh_target_log.20200423125032
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:41315
Created listening socket for qemu serial console on: 127.0.0.1:58191
launchcmd=runqemu snapshot nographic  qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/wic-image-minimal-qemux86-64.wic
tcpserial=41315:58191 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2152208
waiting at most 120 seconds for qemu pid (04/23/20 12:50:35)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231250_qemu

2020-04-23 12:50:55,373 - oe-selftest - INFO - test_qemu_efi (wic.Wic2)
2020-04-23 13:03:49,786 - oe-selftest - INFO -  ... ERROR

Stdout:
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423130327
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/ssh_target_log.20200423130327
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:41257
Created listening socket for qemu serial console on: 127.0.0.1:53105
launchcmd=runqemu snapshot nographic ovmf qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
tcpserial=41257:53105 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2168394
waiting at most 120 seconds for qemu pid (04/23/20 13:03:29)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231303_qemu
2020-04-23 13:03:49,787 - oe-selftest - INFO - Traceback (most recent
call last):
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 42, in wrapped_f
    return func(*args, **kwargs)
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 625, in
test_qemu_efi
    runqemuparams='ovmf', image_fstype='wic') as qemu:
  File "/usr/lib/python3.5/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/workdir/meta/lib/oeqa/utils/commands.py", line 342, in runqemu
    qemu.start(params=qemuparams, ssh=ssh,
runqemuparams=runqemuparams, launch_cmd=launch_cmd,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/targetcontrol.py", line 167, in start
    start = self.runner.start(params, get_ip=ssh,
extra_bootparams=extra_bootparams, runqemuparams=runqemuparams,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 166, in start
    return self.launch(launch_cmd, qemuparams=qemuparams,
get_ip=get_ip, extra_bootparams=extra_bootparams, env=env)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 245, in launch
    time.sleep(0.5)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 128, in handleSIGCHLD
    raise SystemExit
SystemExit

Stdout:
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423130327
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/ssh_target_log.20200423130327
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:41257
Created listening socket for qemu serial console on: 127.0.0.1:53105
launchcmd=runqemu snapshot nographic ovmf qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
tcpserial=41257:53105 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2168394
waiting at most 120 seconds for qemu pid (04/23/20 13:03:29)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231303_qemu

2020-04-23 13:03:49,787 - oe-selftest - INFO -
test_rawcopy_plugin_qemu (wic.Wic2)
2020-04-23 13:07:15,387 - oe-selftest - INFO -  ... ERROR

Stdout:
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423130652
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/ssh_target_log.20200423130652
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:39627
Created listening socket for qemu serial console on: 127.0.0.1:37345
launchcmd=runqemu snapshot nographic  qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
tcpserial=39627:37345 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2182265
waiting at most 120 seconds for qemu pid (04/23/20 13:06:55)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231306_qemu
2020-04-23 13:07:15,387 - oe-selftest - INFO - Traceback (most recent
call last):
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 42, in wrapped_f
    return func(*args, **kwargs)
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 702, in
test_rawcopy_plugin_qemu
    with runqemu('core-image-minimal', ssh=False, image_fstype='wic') as qemu:
  File "/usr/lib/python3.5/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/workdir/meta/lib/oeqa/utils/commands.py", line 342, in runqemu
    qemu.start(params=qemuparams, ssh=ssh,
runqemuparams=runqemuparams, launch_cmd=launch_cmd,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/targetcontrol.py", line 167, in start
    start = self.runner.start(params, get_ip=ssh,
extra_bootparams=extra_bootparams, runqemuparams=runqemuparams,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 166, in start
    return self.launch(launch_cmd, qemuparams=qemuparams,
get_ip=get_ip, extra_bootparams=extra_bootparams, env=env)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 245, in launch
    time.sleep(0.5)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 128, in handleSIGCHLD
    raise SystemExit
SystemExit

Stdout:
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423130652
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/ssh_target_log.20200423130652
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:39627
Created listening socket for qemu serial console on: 127.0.0.1:37345
launchcmd=runqemu snapshot nographic  qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
tcpserial=39627:37345 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2182265
waiting at most 120 seconds for qemu pid (04/23/20 13:06:55)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231306_qemu

2020-04-23 13:07:15,388 - oe-selftest - INFO -
======================================================================
2020-04-23 13:07:15,389 - oe-selftest - INFO - ERROR:
test_biosplusefi_plugin_qemu (wic.Wic2)
2020-04-23 13:07:15,389 - oe-selftest - INFO -
----------------------------------------------------------------------
2020-04-23 13:07:15,389 - oe-selftest - INFO - Traceback (most recent
call last):
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 42, in wrapped_f
    return func(*args, **kwargs)
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 732, in
test_biosplusefi_plugin_qemu
    with runqemu('core-image-minimal', ssh=False, image_fstype='wic') as qemu:
  File "/usr/lib/python3.5/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/workdir/meta/lib/oeqa/utils/commands.py", line 342, in runqemu
    qemu.start(params=qemuparams, ssh=ssh,
runqemuparams=runqemuparams, launch_cmd=launch_cmd,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/targetcontrol.py", line 167, in start
    start = self.runner.start(params, get_ip=ssh,
extra_bootparams=extra_bootparams, runqemuparams=runqemuparams,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 166, in start
    return self.launch(launch_cmd, qemuparams=qemuparams,
get_ip=get_ip, extra_bootparams=extra_bootparams, env=env)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 245, in launch
    time.sleep(0.5)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 128, in handleSIGCHLD
    raise SystemExit
SystemExit

Stdout:
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423124632
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/ssh_target_log.20200423124632
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:57999
Created listening socket for qemu serial console on: 127.0.0.1:45643
launchcmd=runqemu snapshot nographic  qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
tcpserial=57999:45643 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2137514
waiting at most 120 seconds for qemu pid (04/23/20 12:46:35)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231246_qemu
======================================================================
2020-04-23 13:07:15,389 - oe-selftest - INFO - ERROR:
test_expand_mbr_image (wic.Wic2)
2020-04-23 13:07:15,390 - oe-selftest - INFO -
----------------------------------------------------------------------
2020-04-23 13:07:15,390 - oe-selftest - INFO - Traceback (most recent
call last):
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 1002, in
test_expand_mbr_image
    with runqemu('core-image-minimal', ssh=False) as qemu:
  File "/usr/lib/python3.5/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/workdir/meta/lib/oeqa/utils/commands.py", line 342, in runqemu
    qemu.start(params=qemuparams, ssh=ssh,
runqemuparams=runqemuparams, launch_cmd=launch_cmd,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/targetcontrol.py", line 167, in start
    start = self.runner.start(params, get_ip=ssh,
extra_bootparams=extra_bootparams, runqemuparams=runqemuparams,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 166, in start
    return self.launch(launch_cmd, qemuparams=qemuparams,
get_ip=get_ip, extra_bootparams=extra_bootparams, env=env)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 245, in launch
    time.sleep(0.5)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 128, in handleSIGCHLD
    raise SystemExit
SystemExit

Stdout:
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.ext4
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423124830
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/ssh_target_log.20200423124830
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:39485
Created listening socket for qemu serial console on: 127.0.0.1:51903
launchcmd=runqemu snapshot nographic  qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.ext4
tcpserial=39485:51903 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2144564
waiting at most 120 seconds for qemu pid (04/23/20 12:48:32)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231248_qemu
======================================================================
2020-04-23 13:07:15,390 - oe-selftest - INFO - ERROR: test_qemu (wic.Wic2)
2020-04-23 13:07:15,391 - oe-selftest - INFO -
----------------------------------------------------------------------
2020-04-23 13:07:15,391 - oe-selftest - INFO - Traceback (most recent
call last):
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 42, in wrapped_f
    return func(*args, **kwargs)
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 605, in test_qemu
    with runqemu('wic-image-minimal', ssh=False) as qemu:
  File "/usr/lib/python3.5/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/workdir/meta/lib/oeqa/utils/commands.py", line 342, in runqemu
    qemu.start(params=qemuparams, ssh=ssh,
runqemuparams=runqemuparams, launch_cmd=launch_cmd,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/targetcontrol.py", line 167, in start
    start = self.runner.start(params, get_ip=ssh,
extra_bootparams=extra_bootparams, runqemuparams=runqemuparams,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 166, in start
    return self.launch(launch_cmd, qemuparams=qemuparams,
get_ip=get_ip, extra_bootparams=extra_bootparams, env=env)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 245, in launch
    time.sleep(0.5)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 128, in handleSIGCHLD
    raise SystemExit
SystemExit

Stdout:
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/wic-image-minimal-qemux86-64.wic
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/wic-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423125032
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/wic-image-minimal/1.0-r0/testimage/ssh_target_log.20200423125032
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:41315
Created listening socket for qemu serial console on: 127.0.0.1:58191
launchcmd=runqemu snapshot nographic  qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/wic-image-minimal-qemux86-64.wic
tcpserial=41315:58191 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2152208
waiting at most 120 seconds for qemu pid (04/23/20 12:50:35)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231250_qemu
======================================================================
2020-04-23 13:07:15,391 - oe-selftest - INFO - ERROR: test_qemu_efi (wic.Wic2)
2020-04-23 13:07:15,392 - oe-selftest - INFO -
----------------------------------------------------------------------
2020-04-23 13:07:15,392 - oe-selftest - INFO - Traceback (most recent
call last):
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 42, in wrapped_f
    return func(*args, **kwargs)
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 625, in
test_qemu_efi
    runqemuparams='ovmf', image_fstype='wic') as qemu:
  File "/usr/lib/python3.5/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/workdir/meta/lib/oeqa/utils/commands.py", line 342, in runqemu
    qemu.start(params=qemuparams, ssh=ssh,
runqemuparams=runqemuparams, launch_cmd=launch_cmd,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/targetcontrol.py", line 167, in start
    start = self.runner.start(params, get_ip=ssh,
extra_bootparams=extra_bootparams, runqemuparams=runqemuparams,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 166, in start
    return self.launch(launch_cmd, qemuparams=qemuparams,
get_ip=get_ip, extra_bootparams=extra_bootparams, env=env)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 245, in launch
    time.sleep(0.5)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 128, in handleSIGCHLD
    raise SystemExit
SystemExit

Stdout:
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423130327
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/ssh_target_log.20200423130327
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:41257
Created listening socket for qemu serial console on: 127.0.0.1:53105
launchcmd=runqemu snapshot nographic ovmf qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
tcpserial=41257:53105 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2168394
waiting at most 120 seconds for qemu pid (04/23/20 13:03:29)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231303_qemu
======================================================================
2020-04-23 13:07:15,392 - oe-selftest - INFO - ERROR:
test_rawcopy_plugin_qemu (wic.Wic2)
2020-04-23 13:07:15,392 - oe-selftest - INFO -
----------------------------------------------------------------------
2020-04-23 13:07:15,393 - oe-selftest - INFO - Traceback (most recent
call last):
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 42, in wrapped_f
    return func(*args, **kwargs)
  File "/workdir/meta/lib/oeqa/selftest/cases/wic.py", line 702, in
test_rawcopy_plugin_qemu
    with runqemu('core-image-minimal', ssh=False, image_fstype='wic') as qemu:
  File "/usr/lib/python3.5/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/workdir/meta/lib/oeqa/utils/commands.py", line 342, in runqemu
    qemu.start(params=qemuparams, ssh=ssh,
runqemuparams=runqemuparams, launch_cmd=launch_cmd,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/targetcontrol.py", line 167, in start
    start = self.runner.start(params, get_ip=ssh,
extra_bootparams=extra_bootparams, runqemuparams=runqemuparams,
discard_writes=discard_writes)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 166, in start
    return self.launch(launch_cmd, qemuparams=qemuparams,
get_ip=get_ip, extra_bootparams=extra_bootparams, env=env)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 245, in launch
    time.sleep(0.5)
  File "/workdir/meta/lib/oeqa/utils/qemurunner.py", line 128, in handleSIGCHLD
    raise SystemExit
SystemExit

Stdout:
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
Loading cache...done.
rootfs file: /workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
Qemu log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/qemu_boot_log.20200423130652
SSH log file: /workdir/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/testimage/ssh_target_log.20200423130652
Not using kvm for runqemu
Created listening socket for qemu serial console on: 127.0.0.1:39627
Created listening socket for qemu serial console on: 127.0.0.1:37345
launchcmd=runqemu snapshot nographic  qemux86-64
/workdir/build-st/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
tcpserial=39627:37345 bootparams="console=tty1 console=ttyS0,115200n8
printk.time=1" qemuparams="-pidfile pidfile_135"
runqemu started, pid is 2182265
waiting at most 120 seconds for qemu pid (04/23/20 13:06:55)
runqemu exited with code 1
Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

Sending SIGTERM to runqemu
Qemu ended unexpectedly, dump data from host is in
/workdir/build-st/tmp/log/runtime-hostdump/202004231306_qemu
----------------------------------------------------------------------
2020-04-23 13:07:15,393 - oe-selftest - INFO - Ran 5 tests in 11724.705s
2020-04-23 13:07:15,393 - oe-selftest - INFO - FAILED
2020-04-23 13:07:15,394 - oe-selftest - INFO -  (errors=5)
2020-04-23 13:07:20,028 - oe-selftest - INFO - RESULTS:
2020-04-23 13:07:20,030 - oe-selftest - INFO - RESULTS -
wic.Wic2.test_biosplusefi_plugin_qemu: ERROR (10504.67s)
2020-04-23 13:07:20,030 - oe-selftest - INFO - RESULTS -
wic.Wic2.test_expand_mbr_image: ERROR (117.71s)
2020-04-23 13:07:20,030 - oe-selftest - INFO - RESULTS -
wic.Wic2.test_qemu: ERROR (122.31s)
2020-04-23 13:07:20,031 - oe-selftest - INFO - RESULTS -
wic.Wic2.test_qemu_efi: ERROR (774.41s)
2020-04-23 13:07:20,031 - oe-selftest - INFO - RESULTS -
wic.Wic2.test_rawcopy_plugin_qemu: ERROR (205.60s)
2020-04-23 13:07:20,033 - oe-selftest - INFO - SUMMARY:
2020-04-23 13:07:20,033 - oe-selftest - INFO - oe-selftest () - Ran 5
tests in 11726.658s
2020-04-23 13:07:20,033 - oe-selftest - INFO - oe-selftest - FAIL -
Required tests failed (successes=0, skipped=0, failures=0, errors=5)

On Thu, Apr 23, 2020 at 12:47 PM Ricardo Ribalda via
lists.openembedded.org
<ricardo.ribalda=gmail.com@lists.openembedded.org> wrote:
>
> On Thu, Apr 23, 2020 at 12:45 PM Richard Purdie
> <richard.purdie@linuxfoundation.org> wrote:
> >
> > On Thu, 2020-04-23 at 11:57 +0200, Ricardo Ribalda Delgado wrote:
> > > Hi Richard
> > >
> > > Thanks for the test.
> > >
> > > All the errors seem to have the same pattern:
> > >
> > > FileNotFoundError: [Errno 2] No such file or directory:
> > > '/home/pokybuild/yocto-worker/oe-selftest-centos/build/build-st-
> > > 27135/tmp/work/qemux86_64-poky-linux/oe-selftest-image/1.0-
> > > r0/testimage/qemurunner_log.20200423015612'
> > >
> > > I do not believe that it is related to my patchset, I have seen that
> > > you are already running the selftest without the patchset
> > > https://autobuilder.yoctoproject.org/typhoon/#/builders/87/builds/850
> > >
> > > Lets see if it also crashes or not. I am also trying to replicate
> > > locally.
> >
> > It did recur:
> >
> > https://autobuilder.yoctoproject.org/typhoon/#/builders/86/builds/862
> >
> > so your patches are probably not the cause, sorry! :)
>
> No problem, thanks!
>
> I am trying to replicate it anyway here. If I find a problem I will ping you.
>
> >
> > I'll continue to try and track it down.
> >
> > Cheers,
> >
> > Richard
> >
>
>
> --
> Ricardo Ribalda
> 



-- 
Ricardo Ribalda

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [OE-core] [PATCH v7 00/10] Fix permissions and embed-rotofs
  2020-04-23 13:17         ` Ricardo Ribalda
@ 2020-04-23 13:23           ` Richard Purdie
  2020-04-23 13:26             ` Ricardo Ribalda
  2020-04-25 21:07           ` Richard Purdie
  1 sibling, 1 reply; 25+ messages in thread
From: Richard Purdie @ 2020-04-23 13:23 UTC (permalink / raw)
  To: Ricardo Ribalda Delgado; +Cc: openembedded-core, Paul Barker

On Thu, 2020-04-23 at 15:17 +0200, Ricardo Ribalda Delgado wrote:
> On my setup, using debian crops the error is even different :(
> 
> If you want I can keep trying, otherwise I will leave it to the
> experts ;)

Buried in there I think you have a setup problem:

Output from runqemu:
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
may need to enable TUN (e.g. sudo modprobe tun)
runqemu - INFO - Cleaning up

I'm trying to narrow down the failing patch but its looking like it may
take me a while as its not immediately obvious :(

Cheers,

Richard


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [OE-core] [PATCH v7 00/10] Fix permissions and embed-rotofs
  2020-04-23 13:23           ` Richard Purdie
@ 2020-04-23 13:26             ` Ricardo Ribalda
  0 siblings, 0 replies; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-23 13:26 UTC (permalink / raw)
  To: Richard Purdie; +Cc: openembedded-core, Paul Barker

On Thu, Apr 23, 2020 at 3:23 PM Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:
>
> On Thu, 2020-04-23 at 15:17 +0200, Ricardo Ribalda Delgado wrote:
> > On my setup, using debian crops the error is even different :(
> >
> > If you want I can keep trying, otherwise I will leave it to the
> > experts ;)
>
> Buried in there I think you have a setup problem:

I launched it inside crops, I was expecting that everything was ok, but

/dev/net/tun is missing :(
pokyuser@e81a7801004c:/workdir/build$ ls -la /dev/net/tun
ls: cannot access '/dev/net/tun': No such file or directory


I can add it and retry, but it takes forever to run every test. Is
there a way to let it rerun, not starting from scratch every time?

2020-04-23 13:18:31,528 - oe-selftest - INFO - Adding layer libraries:
2020-04-23 13:18:31,529 - oe-selftest - INFO - /workdir/meta/lib
2020-04-23 13:18:31,529 - oe-selftest - INFO - /workdir/meta-yocto-bsp/lib
2020-04-23 13:18:31,529 - oe-selftest - INFO - /workdir/meta-selftest/lib
2020-04-23 13:18:31,531 - oe-selftest - INFO - Running bitbake -e to
test the configuration is valid/parsable
2020-04-23 13:18:34,955 - oe-selftest - ERROR - Build directory
/workdir/build-st already exists, aborting


Cheers
>
> Output from runqemu:
> runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you
> may need to enable TUN (e.g. sudo modprobe tun)
> runqemu - INFO - Cleaning up
>
> I'm trying to narrow down the failing patch but its looking like it may
> take me a while as its not immediately obvious :(
>
> Cheers,
>
> Richard
>


-- 
Ricardo Ribalda

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [OE-core] [PATCH v7 00/10] Fix permissions and embed-rotofs
  2020-04-23 13:17         ` Ricardo Ribalda
  2020-04-23 13:23           ` Richard Purdie
@ 2020-04-25 21:07           ` Richard Purdie
  2020-04-25 21:25             ` Ricardo Ribalda
  1 sibling, 1 reply; 25+ messages in thread
From: Richard Purdie @ 2020-04-25 21:07 UTC (permalink / raw)
  To: Ricardo Ribalda Delgado; +Cc: openembedded-core, Paul Barker

On Thu, 2020-04-23 at 15:17 +0200, Ricardo Ribalda Delgado wrote:
> On my setup, using debian crops the error is even different :(
> 
> If you want I can keep trying, otherwise I will leave it to the
> experts ;)

Just to update, I bisected this down to my sysroot patches in master-
next. Which makes no sense, how would sysroot changes cause wic to fail
in runqemu?

I've discovered that you have to run two tests in the same build one
after the other, specifically:

oe-selftest -r  devtool.DevtoolExtractTests.test_devtool_deploy_target wic.Wic2.test_qemu_efi

and I think my sysroot change "causes" problems as it adds a new test
class. This reorders tests and triggers this magic order problem. I
haven't confirmed but I think the above will fail without my patch.

The key is the wic test failing with:

FileNotFoundError: [Errno 2] No such file or directory: '/media/build1/poky/build-st/tmp/work/qemux86_64-poky-linux/oe-selftest-image/1.0-r0/testimage/qemurunner_log.20200425200658'

i.e. why is it writing to oe-selftest-image which is only used by the
devtool test?

The answer is I think the runqemu code is leaking logfile handles
somehow.

At least now we have a simpler and consistent reproducer and some idea
of the problem this should be easier to track down.

Cheers,

Richard




^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [OE-core] [PATCH v7 00/10] Fix permissions and embed-rotofs
  2020-04-25 21:07           ` Richard Purdie
@ 2020-04-25 21:25             ` Ricardo Ribalda
  2020-04-25 21:29               ` Richard Purdie
  0 siblings, 1 reply; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-25 21:25 UTC (permalink / raw)
  To: Richard Purdie; +Cc: openembedded-core, Paul Barker

Hi Richard

Thanks for the update!

On Sat, Apr 25, 2020 at 11:07 PM Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:
>
> On Thu, 2020-04-23 at 15:17 +0200, Ricardo Ribalda Delgado wrote:
> > On my setup, using debian crops the error is even different :(
> >
> > If you want I can keep trying, otherwise I will leave it to the
> > experts ;)
>
> Just to update, I bisected this down to my sysroot patches in master-
> next. Which makes no sense, how would sysroot changes cause wic to fail
> in runqemu?
>
> I've discovered that you have to run two tests in the same build one
> after the other, specifically:
>
> oe-selftest -r  devtool.DevtoolExtractTests.test_devtool_deploy_target wic.Wic2.test_qemu_efi
>
> and I think my sysroot change "causes" problems as it adds a new test
> class. This reorders tests and triggers this magic order problem. I
> haven't confirmed but I think the above will fail without my patch.
>
> The key is the wic test failing with:
>
> FileNotFoundError: [Errno 2] No such file or directory: '/media/build1/poky/build-st/tmp/work/qemux86_64-poky-linux/oe-selftest-image/1.0-r0/testimage/qemurunner_log.20200425200658'
>
> i.e. why is it writing to oe-selftest-image which is only used by the
> devtool test?
>
> The answer is I think the runqemu code is leaking logfile handles
> somehow.
>
> At least now we have a simpler and consistent reproducer and some idea
> of the problem this should be easier to track down.

I have also been working on the issue, and eventhought I have not been
able to replicate locally the bug, the code insspection was pointing
to the same direction.
My running hypothesis is that the logger keeps writting to the
filehandler because nobody has removed it, so the second time we use
qemu, the log file is missing and all dies


Eg: Here I cannot see where the handler is removed
https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/targetcontrol.py?h=master-next#n122


Eg: Here I can

https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n353


Unfortunately, as I said, I cannot replicate it, so it is a bit frustrating.

Since you can replicate it, could I send you a couple of patches, not
to fix it, but to find out if I am on the right direction?

Can you also publish a git branch somewhere with the current error, so
we work on the same codebase?

Or you just prefer to continue on your own?

Thanks

>
> Cheers,
>
> Richard
>
>
>


-- 
Ricardo Ribalda

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [OE-core] [PATCH v7 00/10] Fix permissions and embed-rotofs
  2020-04-25 21:25             ` Ricardo Ribalda
@ 2020-04-25 21:29               ` Richard Purdie
  2020-04-25 21:35                 ` Ricardo Ribalda
  0 siblings, 1 reply; 25+ messages in thread
From: Richard Purdie @ 2020-04-25 21:29 UTC (permalink / raw)
  To: Ricardo Ribalda Delgado; +Cc: openembedded-core, Paul Barker

On Sat, 2020-04-25 at 23:25 +0200, Ricardo Ribalda Delgado wrote:
> I have also been working on the issue, and eventhought I have not
> been
> able to replicate locally the bug, the code insspection was pointing
> to the same direction.
> My running hypothesis is that the logger keeps writting to the
> filehandler because nobody has removed it, so the second time we use
> qemu, the log file is missing and all dies
> 
> 
> Eg: Here I cannot see where the handler is removed
> https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/targetcontrol.py?h=master-next#n122
> 
> 
> Eg: Here I can
> 
> https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n353
> 
> 
> Unfortunately, as I said, I cannot replicate it, so it is a bit
> frustrating.

The line I gave in the last email should reproduce it reliably. The key
is to have a runqemu session which you then clean the image for
(devtool does), then a write happens to a directory which no longer
exists from the logging.

> Since you can replicate it, could I send you a couple of patches, not
> to fix it, but to find out if I am on the right direction?

Since my other email I couldn't resist poking at the code. Locally this
patch fixed it so its now also running on the autobuilder:

http://git.yoctoproject.org/cgit.cgi/poky/commit/?h=master-next&id=3e7d64adba65559e9b8af42e973c8524988b216a

> Can you also publish a git branch somewhere with the current error,
> so we work on the same codebase?
> 
> Or you just prefer to continue on your own?

Happy to have help but I'm simply using master-next and with any luck I
might have found it.

Cheers,

Richard




^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [OE-core] [PATCH v7 00/10] Fix permissions and embed-rotofs
  2020-04-25 21:29               ` Richard Purdie
@ 2020-04-25 21:35                 ` Ricardo Ribalda
  2020-04-26 12:48                   ` Richard Purdie
  0 siblings, 1 reply; 25+ messages in thread
From: Ricardo Ribalda @ 2020-04-25 21:35 UTC (permalink / raw)
  To: Richard Purdie; +Cc: openembedded-core, Paul Barker

Hi

On Sat, Apr 25, 2020 at 11:29 PM Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:
>
> On Sat, 2020-04-25 at 23:25 +0200, Ricardo Ribalda Delgado wrote:
> > I have also been working on the issue, and eventhought I have not
> > been
> > able to replicate locally the bug, the code insspection was pointing
> > to the same direction.
> > My running hypothesis is that the logger keeps writting to the
> > filehandler because nobody has removed it, so the second time we use
> > qemu, the log file is missing and all dies
> >
> >
> > Eg: Here I cannot see where the handler is removed
> > https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/targetcontrol.py?h=master-next#n122
> >
> >
> > Eg: Here I can
> >
> > https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n353
> >
> >
> > Unfortunately, as I said, I cannot replicate it, so it is a bit
> > frustrating.
>
> The line I gave in the last email should reproduce it reliably. The key
> is to have a runqemu session which you then clean the image for
> (devtool does), then a write happens to a directory which no longer
> exists from the logging.
>
> > Since you can replicate it, could I send you a couple of patches, not
> > to fix it, but to find out if I am on the right direction?
>
> Since my other email I couldn't resist poking at the code. Locally this
> patch fixed it so its now also running on the autobuilder:
>
> http://git.yoctoproject.org/cgit.cgi/poky/commit/?h=master-next&id=3e7d64adba65559e9b8af42e973c8524988b216a
>
> > Can you also publish a git branch somewhere with the current error,
> > so we work on the same codebase?
> >
> > Or you just prefer to continue on your own?
>
> Happy to have help but I'm simply using master-next and with any luck I
> might have found it.

If you could replicate it locally, and this fixes it. I am almost sure
you found it. I was looking in the same place ;)

Thanks

>
> Cheers,
>
> Richard
>
>
>


-- 
Ricardo Ribalda

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [OE-core] [PATCH v7 00/10] Fix permissions and embed-rotofs
  2020-04-25 21:35                 ` Ricardo Ribalda
@ 2020-04-26 12:48                   ` Richard Purdie
  0 siblings, 0 replies; 25+ messages in thread
From: Richard Purdie @ 2020-04-26 12:48 UTC (permalink / raw)
  To: Ricardo Ribalda Delgado; +Cc: openembedded-core, Paul Barker

On Sat, 2020-04-25 at 23:35 +0200, Ricardo Ribalda Delgado wrote:
> On Sat, Apr 25, 2020 at 11:29 PM Richard Purdie
> <richard.purdie@linuxfoundation.org> wrote:
> > On Sat, 2020-04-25 at 23:25 +0200, Ricardo Ribalda Delgado wrote:
> > Since my other email I couldn't resist poking at the code. Locally
> > this
> > patch fixed it so its now also running on the autobuilder:
> > 
> > http://git.yoctoproject.org/cgit.cgi/poky/commit/?h=master-next&id=3e7d64adba65559e9b8af42e973c8524988b216a
> > 
> > > Can you also publish a git branch somewhere with the current
> > > error,
> > > so we work on the same codebase?
> > > 
> > > Or you just prefer to continue on your own?
> > 
> > Happy to have help but I'm simply using master-next and with any
> > luck I
> > might have found it.
> 
> If you could replicate it locally, and this fixes it. I am almost
> sure
> you found it. I was looking in the same place ;)

I think you'd have found it as you were on the right track and we came
to the same conclusion! Sorry about the confusion about where the fault
was, it was an unfortunate situation where it was really an underlying
bug which became exposed.

I'll get the logging fix sorted out and we can finally get some patches
merged. I'm a lot happier understanding how this was triggered.

Cheers,

Richard


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [OE-core] [PATCH v7 07/10] wic: misc: Do not find for executables in ALREADY_PROVIDED
  2020-04-19  6:35 ` [PATCH v7 07/10] wic: misc: Do not find for executables in ALREADY_PROVIDED Ricardo Ribalda
@ 2020-04-26 12:59   ` Richard Purdie
  0 siblings, 0 replies; 25+ messages in thread
From: Richard Purdie @ 2020-04-26 12:59 UTC (permalink / raw)
  To: Ricardo Ribalda, openembedded-core, Paul Barker; +Cc: Ricardo Ribalda Delgado

On Sun, 2020-04-19 at 08:35 +0200, Ricardo Ribalda wrote:
> From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
> 
> Executables like tar won't be available on the native sysroot, as
> they
> are part of the ALREADY_PROVIDED variable.

ASSUME_PROVIDED :)

I fixed the commit message in -next.

Cheers,

Richard


^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2020-04-26 12:59 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-04-19  6:35 [PATCH v7 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
2020-04-19  6:35 ` [PATCH v7 01/10] wic: Fix permissions when using exclude or include path Ricardo Ribalda
2020-04-19  6:35 ` [PATCH v7 02/10] wic: Fix multi images .wks with bitbake Ricardo Ribalda
2020-04-19  6:35 ` [PATCH v7 03/10] wic: Add --change-directory argument Ricardo Ribalda
2020-04-19  6:35 ` [PATCH v7 04/10] wic: Continue if excluded_path does not exist Ricardo Ribalda
2020-04-19  6:35 ` [PATCH v7 05/10] wic: Avoid creating invalid pseudo directory Ricardo Ribalda
2020-04-19  6:35 ` [PATCH v7 06/10] oeqa: wic: Add tests for permissions and change-directory Ricardo Ribalda
2020-04-19  6:35 ` [PATCH v7 07/10] wic: misc: Do not find for executables in ALREADY_PROVIDED Ricardo Ribalda
2020-04-26 12:59   ` [OE-core] " Richard Purdie
2020-04-19  6:35 ` [PATCH v7 08/10] wic: root: Add an opt. destination on include-path Ricardo Ribalda
2020-04-19  6:35 ` [PATCH v7 09/10] wic: rootfs: Combine path_validation in one function Ricardo Ribalda
2020-04-19  6:35 ` [PATCH v7 10/10] oeqa: wic: Add more tests for include_path Ricardo Ribalda
2020-04-22 17:39 ` [PATCH v7 00/10] Fix permissions and embed-rotofs Paul Barker
2020-04-23  8:54 ` [OE-core] " Richard Purdie
2020-04-23  9:57   ` Ricardo Ribalda
2020-04-23 10:45     ` Richard Purdie
2020-04-23 10:47       ` Ricardo Ribalda
     [not found]       ` <16086D1E57B63D5A.14079@lists.openembedded.org>
2020-04-23 13:17         ` Ricardo Ribalda
2020-04-23 13:23           ` Richard Purdie
2020-04-23 13:26             ` Ricardo Ribalda
2020-04-25 21:07           ` Richard Purdie
2020-04-25 21:25             ` Ricardo Ribalda
2020-04-25 21:29               ` Richard Purdie
2020-04-25 21:35                 ` Ricardo Ribalda
2020-04-26 12:48                   ` Richard Purdie

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox