From: "Mathieu Dubois-Briand" <mathieu.dubois-briand@bootlin.com>
To: <twoerner@gmail.com>, <openembedded-core@lists.openembedded.org>
Subject: Re: [OE-core] [PATCH] wic: do not ignore ROOTFS_SIZE if the rootfs is modified
Date: Wed, 09 Apr 2025 16:29:57 +0200 [thread overview]
Message-ID: <D926HJUGOVD7.WS65R1LTLOYT@bootlin.com> (raw)
In-Reply-To: <20250408205709.7013-1-twoerner@gmail.com>
On Tue Apr 8, 2025 at 10:57 PM CEST, Trevor Woerner via lists.openembedded.org wrote:
> If the *.wks file contains a "--source rootfs" then
> lib/wic/plugins/source/rootfs.py will be invoked to generate (what is assumed
> to be) the rootfs partition. If the rootfs partition needs to be tweaked or
> modified, the "rootfs.py" plugin will make a copy of the filesystem and then
> perform the changes on that copy. In other words, if the "--source rootfs"
> line of the *.wks file also contains any of:
>
> --exclude-path
> --include-path
> --change-directory
> --use-label (i.e. modify etc/fstab)
>
> then the rootfs will be copied first, then the copy is modified.
>
> If, for example, the unmodified IMAGE_ROOTFS is:
>
> .../tmp/work/qemuarm64_secureboot-oe-linux/core-image-base/1.0/rootfs
>
> then the copy would be made at:
>
> .../tmp/work/qemuarm64_secureboot-oe-linux/core-image-base/1.0/tmp-wic/rootfs${LINENO}
>
> where ${LINENO} is the line number where this "--source rootfs" line appears
> in the *wks file.
>
> When it comes time to make an actual partition of a specific filesystem type,
> lib/wic/partition.py::prepare_rootfs() is called. It is in this function that
> wic figures out if any extra size needs to be added. The bitbake variable used
> to specify the ultimate rootfs size is ROOTFS_SIZE, and since this variable is
> only valid for the rootfs (and not any other partitions), the code also
> verifies that the partition being created is ${IMAGE_ROOTFS}:
>
> rsize_bb = get_bitbake_var('ROOTFS_SIZE')
> rdir = get_bitbake_var('IMAGE_ROOTFS')
> if rsize_bb and rdir == rootfs_dir:
> <use rsize_bb>
> else:
> <calculate the partition size using "du -ks $p">
>
> As noted above, if lib/wic/plugins/source/rootfs.py has made a copy, then the
> "rdir == rootfs_dir" clause will fail and the code will assume this partition
> is not a rootfs since the strings do not compare equal.
>
> Therefore, in order to determine if this is a rootfs, retain the existing
> "rdir == rootfs_dir" comparison, but also add another one to check whether or
> not this is a wic-generated copy of the rootfs.
>
> STEPS TO REPRODUCE:
> - start with the following *wks file:
> bootloader --ptable gpt
> part /boot --ondisk=vda --align 64 --size=100M --active --source bootimg-partition --fstype=ext4 --label boot --sourceparams="loader=u-boot"
> part / --ondisk=vda --source rootfs --fstype=ext4 --label root
> - and the following extra variable in conf/local.conf:
> IMAGE_ROOTFS_EXTRA_SPACE = "500000"
> - build an image
> - run it in qemu
> $ runqemu slirp nographic serial
> - verify the root partition has extra space:
> root@qemuarm64-secureboot:~# df -h
> Filesystem Size Used Available Use% Mounted on
> /dev/root 721.5M 67.4M 600.6M 10% /
> devtmpfs 477.7M 0 477.7M 0% /dev
> tmpfs 40.0K 0 40.0K 0% /mnt
> tmpfs 489.3M 92.0K 489.2M 0% /run
> tmpfs 489.3M 68.0K 489.2M 0% /var/volatile
> /dev/vda1 120.4M 19.9M 91.4M 18% /boot
> - modify the "/" line of the *wks file to be:
> part / --ondisk=vda --exclude-path boot/ --source rootfs --fstype=ext4 --label root
> - build image
>
> when it fails:
> root@qemuarm64-secureboot:~# df -h
> Filesystem Size Used Available Use% Mounted on
> /dev/root 73.4M 41.9M 25.8M 62% /
> devtmpfs 477.7M 0 477.7M 0% /dev
> tmpfs 40.0K 0 40.0K 0% /mnt
> tmpfs 489.3M 92.0K 489.2M 0% /run
> tmpfs 489.3M 68.0K 489.2M 0% /var/volatile
> /dev/vda1 120.4M 19.9M 91.4M 18% /boot
>
> after this fix:
> root@qemuarm64-secureboot:~# df -h
> Filesystem Size Used Available Use% Mounted on
> /dev/root 721.5M 47.4M 620.6M 7% /
> devtmpfs 477.7M 0 477.7M 0% /dev
> tmpfs 40.0K 0 40.0K 0% /mnt
> tmpfs 489.3M 92.0K 489.2M 0% /run
> tmpfs 489.3M 68.0K 489.2M 0% /var/volatile
> /dev/vda1 120.4M 19.9M 91.4M 18% /boot
>
> Doing the math we see that the /boot partition is ~20MB and in the first image
> the / partition contains this ~20MB in addition to the rest of the rootfs.
> This ~20MB is completely wasted since it is used in the / partition, but then
> the /boot partition is mounted on top of it, making the /boot directory of /
> inaccessible. After the fix the / partition has an additional ~20MB since the
> /boot portion is excluded.
>
> Fixes [YOCTO #15555]
>
> Signed-off-by: Trevor Woerner <twoerner@gmail.com>
> ---
Hi Trevor,
Thanks for your patch.
I do have some build issue on the autobuilder:
2025-04-09 11:14:21,897 - oe-selftest - INFO - wic.Wic.test_exclude_path_with_extra_space (subunit.RemotedTestCase)
2025-04-09 11:14:21,898 - oe-selftest - INFO - ... FAIL
...
[Wed Apr 9 11:01:08 2025] (1309377/1309395): 192.168.7.4:53040 UA:elfutils/0.192,Linux/x86_64,/ XFF: GET /buildid/da3aea1c8160034e1b0961a7f2b5ce5c5a95553b/debuginfo 200 237848 0+9ms
ERROR: When reparsing /tmp/selftest-fetchw3a6djws/test.bb:do_checkuri, the basehash value changed from 84b9e23a83a764e7a5d8a96ee523199e2b1c604f4280a45030e248de0ff52962 to 4123da244f465feffecb2b4fd2b132b64851981ec2fb70bf9445df8b0ea6a69e. The metadata is not deterministic and this needs to be fixed.
ERROR: The following commands may help:
ERROR: $ bitbake test -cdo_checkuri -Snone
ERROR: Then:
ERROR: $ bitbake test -cdo_checkuri -Sprintdiff
ERROR: When reparsing /tmp/selftest-fetchw3a6djws/test.bb:do_fetch, the basehash value changed from 6d55d6743729b615749dc016857d7e5f9c884a8b92f0d57f68e743f4910333d3 to fa7d6ea0563b60362418d2a6c5e41a6684183d01ec578b65abd0c64a9cfba7cf. The metadata is not deterministic and this needs to be fixed.
ERROR: The following commands may help:
ERROR: $ bitbake test -cdo_fetch -Snone
ERROR: Then:
ERROR: $ bitbake test -cdo_fetch -Sprintdiff
https://autobuilder.yoctoproject.org/valkyrie/#/builders/35/builds/1329
I tried to reproduce this locally, and reproduced a fail with
"oe-selftest -r wic.Wic.test_exclude_path_with_extra_space", but with a
different error:
| INFO: Creating image(s)...
|
| DEBUG: loading plugin module /home/mdubois-briand/swat/oe-sefltest/poky-contrib/scripts/lib/wic/plugins/imager/direct.py
| DEBUG: loading plugin module /home/mdubois-briand/swat/oe-sefltest/poky-contrib/scripts/lib/wic/plugins/source/bootimg-biosplusefi.py
| DEBUG: loading plugin module /home/mdubois-briand/swat/oe-sefltest/poky-contrib/scripts/lib/wic/plugins/source/empty.py
| DEBUG: loading plugin module /home/mdubois-briand/swat/oe-sefltest/poky-contrib/scripts/lib/wic/plugins/source/bootimg-efi.py
| DEBUG: loading plugin module /home/mdubois-briand/swat/oe-sefltest/poky-contrib/scripts/lib/wic/plugins/source/bootimg-pcbios.py
| DEBUG: loading plugin module /home/mdubois-briand/swat/oe-sefltest/poky-contrib/scripts/lib/wic/plugins/source/isoimage-isohybrid.py
| DEBUG: loading plugin module /home/mdubois-briand/swat/oe-sefltest/poky-contrib/scripts/lib/wic/plugins/source/bootimg-partition.py
| DEBUG: loading plugin module /home/mdubois-briand/swat/oe-sefltest/poky-contrib/scripts/lib/wic/plugins/source/rootfs.py
| DEBUG: loading plugin module /home/mdubois-briand/swat/oe-sefltest/poky-contrib/scripts/lib/wic/plugins/source/rawcopy.py
| DEBUG: _exec_cmd: install -d /home/mdubois-briand/swat/oe-sefltest/poky-contrib/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0/tmp-wic/boot.1
| DEBUG: ['install', '-d', '/home/mdubois-briand/swat/oe-sefltest/poky-contrib/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0/tmp-wic/boot.1']
| DEBUG: _exec_cmd: output for install -d /home/mdubois-briand/swat/oe-sefltest/poky-contrib/build-st/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0/tmp-wic/boot.1 (rc = 0):
| ERROR: No boot files defined, IMAGE_BOOT_FILES unset for entry #1
So maybe I'm missing something here.
The exact branch I used for this build should be available in
https://web.git.yoctoproject.org/poky-ci-archive/tag/?h=autobuilder.yoctoproject.org/valkyrie/a-full-1372,
but the mirror seems out of sync. I hope it will be there a bit later
today.
Can you have a look at this, please?
--
Mathieu Dubois-Briand, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2025-04-09 14:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-08 20:57 [PATCH] wic: do not ignore ROOTFS_SIZE if the rootfs is modified Trevor Woerner
2025-04-09 14:29 ` Mathieu Dubois-Briand [this message]
2025-04-09 16:47 ` [OE-core] " Trevor Woerner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=D926HJUGOVD7.WS65R1LTLOYT@bootlin.com \
--to=mathieu.dubois-briand@bootlin.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=twoerner@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox