All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Piotr Łobacz" <p.lobacz@welotec.com>
To: "Eilís 'pidge' Ní Fhlannagáin" <pidge@baylibre.com>,
	"openembedded-core@lists.openembedded.org"
	<openembedded-core@lists.openembedded.org>
Cc: "Qi.Chen@windriver.com" <Qi.Chen@windriver.com>
Subject: Re: [OE-core] [PATCH 1/3] useradd.bbclass: Fix order of postinst-useradd-*
Date: Fri, 23 Feb 2024 09:57:04 +0000	[thread overview]
Message-ID: <12386959.O9o76ZdvQC@latitude> (raw)
In-Reply-To: <0d86535f-8745-443f-d5ac-48fbc337db6a@windriver.com>

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.lobacz@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 <pidge@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

  reply	other threads:[~2024-02-23  9:57 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-22 14:53 [PATCH 0/3] Useradd postinstall fixes and tests Eilís 'pidge' Ní Fhlannagáin
2024-02-22 14:53 ` [PATCH 1/3] useradd.bbclass: Fix order of postinst-useradd-* Eilís 'pidge' Ní Fhlannagáin
2024-02-22 15:02   ` [OE-core] " Richard Purdie
2024-02-22 15:05     ` Piotr Łobacz
2024-02-23  9:10   ` Jermain Horsman
2024-02-23  9:36   ` [OE-core] " ChenQi
2024-02-23  9:57     ` Piotr Łobacz [this message]
2024-02-22 14:53 ` [PATCH 2/3] selftest-users: Convoluted selftest for USERADD_DEPENDS Eilís 'pidge' Ní Fhlannagáin
2024-02-22 14:53 ` [PATCH 3/3] creategroup*: Remove coreutils-native as a DEPENDS Eilís 'pidge' Ní Fhlannagáin

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=12386959.O9o76ZdvQC@latitude \
    --to=p.lobacz@welotec.com \
    --cc=Qi.Chen@windriver.com \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=pidge@baylibre.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.