[v2] classes: rootfs-postcommands: add skip option to overlayfs_qa_check

Message ID 20220429081733.225481-1-ch@denx.de
State Accepted, archived
Commit 2ce9173169a2a86392c4a85fe9be7fbbd7353b7f
Headers show
Series [v2] classes: rootfs-postcommands: add skip option to overlayfs_qa_check | expand

Commit Message

Claudius Heine April 29, 2022, 8:17 a.m. UTC
The overlayfs_qa_check checks if the current root file system has a
mount configured for each overlayfs, when the overlayfs class is used.

However there are certain instances where this mount point is created at
runtime and not static in a fstab entry or systemd mount unit.

One such case would be if overlayfs-etc is used, where the device is
mounted in the preinit script and not via a mount unit or fstab entry.

However there are other possibilities for this as well, like startup
scripts that support a dynamic partition layout. For instance when
systemd-repart is used.

This adds the `OVERLAYFS_QA_SKIP` variable, which allows to define QA
skips via its flags. In principle it supports multiple QA skip flags
separated by whitespace, but only one (`mount-configured`) is
implemented here. To skip this QA check simply add `mount-configured` to
the flag of `OVERLAYFS_QA_SKIP` with the same name. For instance if a
overlayfs is configured as:

	OVERLAYFS_MOUNT_POINT[data] = "/data"

Skipping this QA check can be done by setting:

	OVERLAYFS_QA_SKIP[data] = "mount-configured"

Signed-off-by: Claudius Heine <ch@denx.de>
---

Sorry, I was a bit to quick when sending the last patch and forgot to
amend a typo fix before sending.

Difference between v2:
 - `getVarFag` -> `getVarFlag`

---
 meta/classes/rootfs-postcommands.bbclass | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Luca Ceresoli May 2, 2022, 7:09 p.m. UTC | #1
Hi Claudius,

Il giorno Fri, 29 Apr 2022 10:17:33 +0200
"Claudius Heine" <ch@denx.de> ha scritto:

> The overlayfs_qa_check checks if the current root file system has a
> mount configured for each overlayfs, when the overlayfs class is used.
> 
> However there are certain instances where this mount point is created
> at runtime and not static in a fstab entry or systemd mount unit.
> 
> One such case would be if overlayfs-etc is used, where the device is
> mounted in the preinit script and not via a mount unit or fstab entry.
> 
> However there are other possibilities for this as well, like startup
> scripts that support a dynamic partition layout. For instance when
> systemd-repart is used.
> 
> This adds the `OVERLAYFS_QA_SKIP` variable, which allows to define QA
> skips via its flags. In principle it supports multiple QA skip flags
> separated by whitespace, but only one (`mount-configured`) is
> implemented here. To skip this QA check simply add `mount-configured`
> to the flag of `OVERLAYFS_QA_SKIP` with the same name. For instance
> if a overlayfs is configured as:
> 
> 	OVERLAYFS_MOUNT_POINT[data] = "/data"
> 
> Skipping this QA check can be done by setting:
> 
> 	OVERLAYFS_QA_SKIP[data] = "mount-configured"
> 
> Signed-off-by: Claudius Heine <ch@denx.de>

Failures appeared on the autobuilders with your patch applied:

https://autobuilder.yoctoproject.org/typhoon/#/builders/87/builds/3530/steps/15/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/87/builds/3530/steps/15/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/80/builds/3470/steps/14/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/79/builds/3521/steps/15/logs/stdio

Best regards,
Claudius Heine May 3, 2022, 7:54 a.m. UTC | #2
On 2022-05-02 21:09, Luca Ceresoli wrote:
> Hi Claudius,
> 

Hi Luca,

> Il giorno Fri, 29 Apr 2022 10:17:33 +0200
> "Claudius Heine" <ch@denx.de> ha scritto:
> 
>> The overlayfs_qa_check checks if the current root file system has a
>> mount configured for each overlayfs, when the overlayfs class is used.
>>
>> However there are certain instances where this mount point is created
>> at runtime and not static in a fstab entry or systemd mount unit.
>>
>> One such case would be if overlayfs-etc is used, where the device is
>> mounted in the preinit script and not via a mount unit or fstab entry.
>>
>> However there are other possibilities for this as well, like startup
>> scripts that support a dynamic partition layout. For instance when
>> systemd-repart is used.
>>
>> This adds the `OVERLAYFS_QA_SKIP` variable, which allows to define QA
>> skips via its flags. In principle it supports multiple QA skip flags
>> separated by whitespace, but only one (`mount-configured`) is
>> implemented here. To skip this QA check simply add `mount-configured`
>> to the flag of `OVERLAYFS_QA_SKIP` with the same name. For instance
>> if a overlayfs is configured as:
>>
>> 	OVERLAYFS_MOUNT_POINT[data] = "/data"
>>
>> Skipping this QA check can be done by setting:
>>
>> 	OVERLAYFS_QA_SKIP[data] = "mount-configured"
>>
>> Signed-off-by: Claudius Heine <ch@denx.de>
> 
> Failures appeared on the autobuilders with your patch applied:
> 
> https://autobuilder.yoctoproject.org/typhoon/#/builders/87/builds/3530/steps/15/logs/stdio
> https://autobuilder.yoctoproject.org/typhoon/#/builders/87/builds/3530/steps/15/logs/stdio
> https://autobuilder.yoctoproject.org/typhoon/#/builders/80/builds/3470/steps/14/logs/stdio
> https://autobuilder.yoctoproject.org/typhoon/#/builders/79/builds/3521/steps/15/logs/stdio

Thanks! It seems that failed because I also fixed a typo in the warning 
message ('fstat -> fstab').

I will change that in v3 and also add a testcase for the 
OVERLAYFS_QA_SKIP functionality.

regards,
Claudius

Patch

diff --git a/meta/classes/rootfs-postcommands.bbclass b/meta/classes/rootfs-postcommands.bbclass
index 7b92df69c5..9b6824043c 100644
--- a/meta/classes/rootfs-postcommands.bbclass
+++ b/meta/classes/rootfs-postcommands.bbclass
@@ -398,6 +398,10 @@  python overlayfs_qa_check() {
 
     allUnitExist = True;
     for mountPoint in overlayMountPoints:
+        qaSkip = (d.getVarFlag("OVERLAYFS_QA_SKIP", mountPoint) or "").split()
+        if "mount-configured" in qaSkip:
+            continue
+
         mountPath = d.getVarFlag('OVERLAYFS_MOUNT_POINT', mountPoint)
         if mountPath in fstabDevices:
             continue
@@ -407,8 +411,10 @@  python overlayfs_qa_check() {
                for dirpath in searchpaths):
             continue
 
-        bb.warn('Mount path %s not found in fstat and unit %s not found '
-                'in systemd unit directories' % (mountPath, mountUnit))
+        bb.warn(f'Mount path {mountPath} not found in fstab and unit '
+                f'{mountUnit} not found in systemd unit directories.')
+        bb.warn(f'Skip this check by setting OVERLAYFS_QA_SKIP[{mountPoint}] = '
+                '"mount-configured"')
         allUnitExist = False;
 
     if not allUnitExist: