From: Scott Garman <scott.a.garman@intel.com>
To: Richard Purdie <richard.purdie@linuxfoundation.org>
Cc: Patches and discussions about the oe-core layer
<openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH 2/3] useradd.bbclass: new class for managing user/group permissions
Date: Thu, 30 Jun 2011 21:36:44 -0700 [thread overview]
Message-ID: <4E0D4EDC.5080403@intel.com> (raw)
In-Reply-To: <1309475425.20015.493.camel@rex>
On 06/30/2011 04:10 PM, Richard Purdie wrote:
> Hi Scott,
>
> This is looking good, thanks for the changes! I just have some cosmetic
> things to tweak before it goes in.
Ok, respinning now based on your requests.
BTW, some parts of useradd.bbclass were derived from
update-rc.d.bbclass. So it sounds like that class could use a refresh in
light of the preferred style you've been showing me. I'd be happy to do
this as a background task over the next week if it would be useful.
Scott
>
> On Thu, 2011-06-30 at 15:39 -0700, Scott Garman wrote:
> [...]
>> +# Recipe parse-time sanity checks
>> +def update_useradd_after_parse(d):
>> + if bb.data.getVar('USERADD_PACKAGES', d) == None:
>
> if not d.getVar('USERADD_PACKAGES', False):
>
>> + if bb.data.getVar('USERADD_PARAM', d) == None and bb.data.getVar('GROUPADD_PARAM', d) == None:
>
> if not d.getVar('USERADD_PARAM', False) and not d.getVar('GROUPADD_PARAM', False):
>
>> + raise bb.build.FuncFailed, "%s inherits useradd but doesn't set USERADD_PARAM or GROUPADD_PARAM" % bb.data.getVar('FILE', d)
>> +
>> +python __anonymous() {
>> + update_useradd_after_parse(d)
>> +}
>> +
>> +# Return a single [GROUP|USER]ADD_PARAM formatted string which includes the
>> +# [group|user]add parameters for all packages in this recipe
>> +def get_all_cmd_params(d, cmd_type):
>> + import string
>> +
>> + localdata = bb.data.createCopy(d)
>
> No need to use createCopy here since you don't change OVERRIDES or write
> to the datastore at all. Just use d directly.
>
>> + param_type = cmd_type.upper() + "ADD_PARAM_%s"
>> + params = []
>> +
>> + pkgs = localdata.getVar('USERADD_PACKAGES', True)
>> + if not pkgs:
>> + pkgs = localdata.getVar('USERADDPN', True)
>> + packages = (localdata.getVar('PACKAGES', True) or "").split()
>> + if packages and pkgs not in packages:
>> + pkgs = packages[0]
>> +
>> + for pkg in pkgs.split():
>> + param = localdata.getVar(param_type % pkg, True)
>> + if param:
>> + params.append(param)
>> +
>> + return string.join(params, "; ")
>> +
>> +# Adds the preinst script into generated packages
>> +fakeroot python populate_packages_prepend () {
>> + def update_useradd_package(pkg):
>> + bb.debug(1, 'adding user/group calls to preinst for %s' % pkg)
>> + localdata = bb.data.createCopy(d)
>> + overrides = localdata.getVar("OVERRIDES", True)
>> + bb.data.setVar("OVERRIDES", "%s:%s" % (pkg, overrides), localdata)
>> + bb.data.update_data(localdata)
>> +
>> + """
>> + useradd preinst is appended here because pkg_preinst may be
>> + required to execute on the target. Not doing so may cause
>> + useradd preinst to be invoked twice, causing unwanted warnings.
>> + """
>
> You can just do:
>
> preinst = d.getVar('pkg_preinst_%s' % pkg, True) or d.getVar('pkg_preinst', True)
>
> and ditch all the createCopy/OVERRIDES stuff.
>
>> + preinst = localdata.getVar('pkg_preinst', True)
>> + if not preinst:
>> + preinst = '#!/bin/sh\n'
>> + preinst += localdata.getVar('useradd_preinst', True)
>> + bb.data.setVar('pkg_preinst_%s' % pkg, preinst, d)
>> +
>> + # We add the user/group calls to all packages to allow any package
>> + # to contain files owned by the users/groups defined in the recipe.
>> + # The user/group addition code is careful not to create duplicate
>> + # entries, so this is safe.
>> + pkgs = d.getVar('USERADD_PACKAGES', True)
>> + if pkgs == None:
>
> if not pkgs:
>
>> + pkgs = d.getVar('USERADDPN', True)
>> + packages = (d.getVar('PACKAGES', True) or "").split()
>> + if not pkgs in packages and packages != []:
>
> if packages and pkgs not in packages:
>
>> + pkgs = packages[0]
>> + for pkg in pkgs.split():
>> + update_useradd_package(pkg)
>> +}
>
> Cheers,
>
> Richard
>
--
Scott Garman
Embedded Linux Engineer - Yocto Project
Intel Open Source Technology Center
next prev parent reply other threads:[~2011-07-01 4:41 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-30 22:39 [PATCH 0/3] useradd.bbclass: new class for managing user/group permissions [v2] Scott Garman
2011-06-30 22:39 ` [PATCH 1/3] bitbake.conf: update PSEUDO_PASSWD variable Scott Garman
2011-06-30 23:13 ` Richard Purdie
2011-06-30 22:39 ` [PATCH 2/3] useradd.bbclass: new class for managing user/group permissions Scott Garman
2011-06-30 23:10 ` Richard Purdie
2011-07-01 4:36 ` Scott Garman [this message]
2011-07-01 15:55 ` Richard Purdie
2011-06-30 22:39 ` [PATCH 3/3] useradd-example: example recipe for using inherit useradd Scott Garman
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=4E0D4EDC.5080403@intel.com \
--to=scott.a.garman@intel.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=richard.purdie@linuxfoundation.org \
/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