Dnia piątek, 23 lutego 2024 10:36:27 CET Chen Qi via lists.openembedded.org 
pisze:
> 1. I can see what this patch mainly does is ensuring groups first, then
> user, then groupmems. But the current useradd_preinst, which is called
> by useradd_sysroot has already ensured this. Is that not working?

It is working but all postinst scripts are being called alphabetically which 
in some corner cases is causing the failures...

> 2. You're using bb.warn as a method of outputting debugging information,
> which I don't think is appropriate.

> Regards,
> Qi
> 
> On 2/22/24 22:53, Eilís 'pidge' Ní Fhlannagáin wrote:
> > From: Piotr Łobacz <p.lob...@welotec.com>
> > 
> > postinst-useradd-* haven't been running in order of dependency.
> > 
> > This patch is reworked from Piotr Łobacz's patch and fixes:
> > 
> > https://eur04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla
> > .yoctoproject.org%2Fshow_bug.cgi%3Fid%3D15084&data=05%7C02%7Cp.lobacz%40we
> > lotec.com%7C4b378de2bbf8442903fe08dc3452f110%7C25111a7f1d5a4c51a4ca7f8e440
> > 11b39%7C0%7C0%7C638442778043567095%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjA
> > wMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=NtJ
> > L1zoUYxbKRErJ9GBH6cx%2F2UMoSFAT53LLQ8XBzYk%3D&reserved=0
> > https://eur04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzill
> > a.yoctoproject.org%2Fshow_bug.cgi%3Fid%3D13904&data=05%7C02%7Cp.lobacz%40w
> > elotec.com%7C4b378de2bbf8442903fe08dc3452f110%7C25111a7f1d5a4c51a4ca7f8e44
> > 011b39%7C0%7C0%7C638442778043575031%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLj
> > AwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=wY
> > jvmpaXqsu8GzyGrYJflJA8oNxniQXkDKZ8GxKRnXY%3D&reserved=0
> > 
> > It ensures that groups, users and groupmems are all run in the correct
> > order.
> > 
> > Signed-off-by: Eilís 'pidge' Ní Fhlannagáin <pi...@baylibre.com>
> > ---
> > 
> >   meta/classes-global/staging.bbclass |  7 +--
> >   meta/classes/useradd.bbclass        | 72 ++++++++++++++++++-----------
> >   2 files changed, 49 insertions(+), 30 deletions(-)
> > 
> > diff --git a/meta/classes-global/staging.bbclass
> > b/meta/classes-global/staging.bbclass index ab3e1d71b5..6c21510377 100644
> > --- a/meta/classes-global/staging.bbclass
> > +++ b/meta/classes-global/staging.bbclass
> > 
> > @@ -245,8 +245,9 @@ def staging_populate_sysroot_dir(targetsysroot, 
nativesysroot, native, d):
> >                           continue
> >       
> >       staging_processfixme(fixme, targetdir, targetsysroot, nativesysroot,
> >       d)
> > 
> > -    for p in postinsts:
> > -        bb.note("Running postinst {}, output:\n{}".format(p,
> > subprocess.check_output(p, shell=True, stderr=subprocess.STDOUT))) +   
> > bb.warn(sorted(postinsts))
> > +    for p in sorted(postinsts):
> > +        bb.warn("Running postinst {}, output:\n{}".format(p,
> > subprocess.check_output(p, shell=True, stderr=subprocess.STDOUT)))> 
> >   #
> >   # Manifests here are complicated. The main sysroot area has the unpacked
> >   sstate> 
> > @@ -629,7 +630,7 @@ python extend_recipe_sysroot() {
> > 
> >       for f in fixme:
> >           staging_processfixme(fixme[f], f, recipesysroot,
> >           recipesysrootnative, d)
> > 
> > -    for p in postinsts:
> > 
> > +    for p in sorted(postinsts):
> >           bb.note("Running postinst {}, output:\n{}".format(p,
> >           subprocess.check_output(p, shell=True,
> >           stderr=subprocess.STDOUT)))>       
> >       for dep in manifests:
> > diff --git a/meta/classes/useradd.bbclass b/meta/classes/useradd.bbclass
> > index a58f8287c9..924eeadf9c 100644
> > --- a/meta/classes/useradd.bbclass
> > +++ b/meta/classes/useradd.bbclass
> > @@ -103,6 +103,18 @@ fi
> > 
> >   }
> >   
> >   useradd_sysroot () {
> > 
> > +   user_group_groupmems_add_sysroot user
> > +}
> > +
> > +groupadd_sysroot () {
> > +   user_group_groupmems_add_sysroot group
> > +}
> > +
> > +groupmemsadd_sysroot () {
> > +   user_group_groupmems_add_sysroot groupmems
> > +}
> > +
> > +user_group_groupmems_add_sysroot () {
> > 
> >     # Pseudo may (do_prepare_recipe_sysroot) or may not
> >     (do_populate_sysroot_setscene) be running # at this point so 
we're
> >     explicit about the environment so pseudo can load if # not 
already
> >     present.
> > 
> > @@ -130,10 +142,19 @@ useradd_sysroot () {
> > 
> >             exit 0
> >     
> >     fi
> > 
> > -   # Add groups and users defined for all recipe packages
> > -   GROUPADD_PARAM="${@get_all_cmd_params(d, 'groupadd')}"
> > -   USERADD_PARAM="${@get_all_cmd_params(d, 'useradd')}"
> > -   GROUPMEMS_PARAM="${@get_all_cmd_params(d, 'groupmems')}"
> > +   # Add groups and users defined for all recipe packages
> > +   if test "x$1" = "xgroup"; then
> > +           GROUPADD_PARAM="${@get_all_cmd_params(d, 'groupadd')}"
> > +   fi
> > +   if test "x$1" = "xuser"; then
> > +           USERADD_PARAM="${@get_all_cmd_params(d, 'useradd')}"
> > +   fi
> > +   if test "x$1" = "xgroupmems"; then
> > +           GROUPMEMS_PARAM="${@get_all_cmd_params(d, 
'groupmems')}"
> > +   fi
> > +   if test "x$1" = "x"; then
> > +           bbwarn "missing type of passwd db action"
> > +    fi
> > 
> >     # Tell the system to use the environment vars
> >     UA_SYSROOT=1
> > 
> > @@ -148,29 +169,26 @@ useradd_sysroot () {
> > 
> >   EXTRA_STAGING_FIXMES += "PSEUDO_SYSROOT PSEUDO_LOCALSTATEDIR LOGFIFO"
> >   
> >   python useradd_sysroot_sstate () {
> > 
> > -    scriptfile = None
> > -    task = d.getVar("BB_CURRENTTASK")
> > -    if task == "package_setscene":
> > -        bb.build.exec_func("useradd_sysroot", d)
> > -    elif task == "prepare_recipe_sysroot":
> > -        # Used to update this recipe's own sysroot so the user/groups are
> > available to do_install -
> > -        # If do_populate_sysroot is triggered and we write the file here,
> > there would be an overlapping -        # files. See
> > usergrouptests.UserGroupTests.test_add_task_between_p_sysroot_and_package
> > -        scriptfile =
> > d.expand("${RECIPE_SYSROOT}${bindir}/postinst-useradd-${PN}-recipedebug")
> > -
> > -        bb.build.exec_func("useradd_sysroot", d)
> > -    elif task == "populate_sysroot":
> > -        # Used when installed in dependent task sysroots
> > -        scriptfile =
> > d.expand("${SYSROOT_DESTDIR}${bindir}/postinst-useradd-${PN}") -
> > -    if scriptfile:
> > -        bb.utils.mkdirhier(os.path.dirname(scriptfile))
> > -        with open(scriptfile, 'w') as script:
> > -            script.write("#!/bin/sh -e\n")
> > -            bb.data.emit_func("useradd_sysroot", script, d)
> > -            script.write("useradd_sysroot\n")
> > -        os.chmod(scriptfile, 0o755)
> > +    for type, sort_prefix in [("group", "01"), ("user", "02"),
> > ("groupmems", "03")]: +        scriptfile = None
> > +        task = d.getVar("BB_CURRENTTASK")
> > +        if task == "package_setscene":
> > +            bb.build.exec_func(f"{type}add_sysroot", d)
> > +        elif task == "prepare_recipe_sysroot":
> > +            # Used to update this recipe's own sysroot so the user/groups
> > are available to do_install +            scriptfile =
> > d.expand("${RECIPE_SYSROOT}${bindir}/"
> > f"postinst-useradd-{sort_prefix}{type}" "-${PN}") +           
> > bb.build.exec_func(f"{type}add_sysroot", d)
> > +        elif task == "populate_sysroot":
> > +            # Used when installed in dependent task sysroots
> > +            scriptfile = d.expand("${SYSROOT_DESTDIR}${bindir}/"
> > f"postinst-useradd-{sort_prefix}{type}" "-${PN}") +
> > +        if scriptfile:
> > +            bb.utils.mkdirhier(os.path.dirname(scriptfile))
> > +            with open(scriptfile, 'w') as script:
> > +                script.write("#!/bin/sh\n")
> > +                bb.data.emit_func(f"{type}add_sysroot", script, d)
> > +                script.write(f"{type}add_sysroot\n")
> > +            os.chmod(scriptfile, 0o755)
> > 
> >   }
> >   
> >   do_prepare_recipe_sysroot[postfuncs] += "${SYSROOTFUNC}"

BR
Piotr
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#196055): 
https://lists.openembedded.org/g/openembedded-core/message/196055
Mute This Topic: https://lists.openembedded.org/mt/104509398/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to