Message ID | 20250902190555.7929-1-dani.barra25@gmail.com |
---|---|
Headers | show |
Series | wic: updated fstab does not preserve metadata of the original file | expand |
On Tue Sep 2, 2025 at 9:05 PM CEST, dani.barra25 via lists.openembedded.org wrote: > From: Daniel Andrade <dani.barra25@gmail.com> > > Using `install` in the rootfs plugin forces fstab to be replaced entirely, meaning that even its Inodes will change, leading xattrs and SELinux context stored by pseudo not to be applied. > The fix just uses `cp` without preserving attributes from the temporary fstab since none of them are needed, just the content. > Same thing happens with the predefined mechanisms for ext4 and msdos. Using debugfs there is no way to replace contents while maintaining metadata, so the approach taken on the path was to remove the different fstab logic for those fstypes and also use the same modified cp command. Reviewing the builds I did it seems to work for all of the fstypes. > > Another problem is that the timestamp applied to fstab is not the same as every other file. It seems like the `SOURCE_DATE_EPOCH` variable goes to the fallback timestamp (`SOURCE_DATE_EPOCH_FALLBACK`). > Since you are using that variable everywhere, it is not the same value as ` REPRODUCIBLE_TIMESTAMP_ROOTFS` under `poky/meta/conf/bitbake.conf` that is applied in every other file. > > Daniel Andrade (1): > wic: Content of the temporary updated fstab should be copied into the > original not replacing it entirely. > > meta/conf/bitbake.conf | 4 +++- > scripts/lib/wic/partition.py | 15 +-------------- > scripts/lib/wic/plugins/source/rootfs.py | 4 ++-- > 3 files changed, 6 insertions(+), 17 deletions(-) Hi Daniel, Thanks for your patch. It looks like it is breaking a test: 2025-09-04 15:28:11,112 - oe-selftest - INFO - wic.Wic.test_no_fstab_update (subunit.RemotedTestCase) 2025-09-04 15:28:11,113 - oe-selftest - INFO - ... FAIL ... 2025-09-04 15:28:11,114 - oe-selftest - INFO - testtools.testresult.real._StringException: Traceback (most recent call last): File "/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/meta/lib/oeqa/selftest/cases/wic.py", line 859, in test_no_fstab_update self.assertEqual(bf_fstab_md5sum, part_fstab_md5sum[1]) File "/usr/lib/python3.12/unittest/case.py", line 885, in assertEqual assertion_func(first, second, msg=msg) File "/usr/lib/python3.12/unittest/case.py", line 1251, in assertMultiLineEqual self.fail(self._formatMessage(msg, standardMsg)) File "/usr/lib/python3.12/unittest/case.py", line 715, in fail raise self.failureException(msg) AssertionError: 'af3c087d6c9131735c8d1f270a226892' != '9edb8255abd217fdb20e118833afb856' - af3c087d6c9131735c8d1f270a226892 + 9edb8255abd217fdb20e118833afb856 https://autobuilder.yoctoproject.org/valkyrie/#/builders/23/builds/2412 https://autobuilder.yoctoproject.org/valkyrie/#/builders/35/builds/2268 Can you fix it please? Thanks, Mathieu
From: Daniel Andrade <dani.barra25@gmail.com> Using `install` in the rootfs plugin forces fstab to be replaced entirely, meaning that even its Inodes will change, leading xattrs and SELinux context stored by pseudo not to be applied. The fix just uses `cp` without preserving attributes from the temporary fstab since none of them are needed, just the content. Same thing happens with the predefined mechanisms for ext4 and msdos. Using debugfs there is no way to replace contents while maintaining metadata, so the approach taken on the path was to remove the different fstab logic for those fstypes and also use the same modified cp command. Reviewing the builds I did it seems to work for all of the fstypes. Another problem is that the timestamp applied to fstab is not the same as every other file. It seems like the `SOURCE_DATE_EPOCH` variable goes to the fallback timestamp (`SOURCE_DATE_EPOCH_FALLBACK`). Since you are using that variable everywhere, it is not the same value as ` REPRODUCIBLE_TIMESTAMP_ROOTFS` under `poky/meta/conf/bitbake.conf` that is applied in every other file. Daniel Andrade (1): wic: Content of the temporary updated fstab should be copied into the original not replacing it entirely. meta/conf/bitbake.conf | 4 +++- scripts/lib/wic/partition.py | 15 +-------------- scripts/lib/wic/plugins/source/rootfs.py | 4 ++-- 3 files changed, 6 insertions(+), 17 deletions(-)