[OE-core] can pkg_{pre, post}rm functions be run at all for image creation?

Robert P. J. Day rpjday at crashcourse.ca
Mon Aug 4 13:42:35 UTC 2014


On Mon, 4 Aug 2014, Paul Eggleton wrote:

> On Sunday 03 August 2014 02:56:04 Robert P. J. Day wrote:
> > On Sat, 2 Aug 2014, Khem Raj wrote:
> > > On 14-08-02 15:57:00, Robert P. J. Day wrote:
> > > > On Sat, 2 Aug 2014, Khem Raj wrote:
> > > > > On Sat, Aug 2, 2014 at 9:34 AM, Robert P. J. Day
> <rpjday at crashcourse.ca> wrote:
> > > > > > say, pkg_prerm() functions would never be written with respect to
> > > > > > the
> > > > > > variable ${D}, which would be relevant only during image creation.
> > > > > > but
> > > > > > i can see things like this in sysklogd.inc:
> > > > > >
> > > > > > pkg_prerm_${PN} () {
> > > > > >
> > > > > >         if test "x$D" = "x"; then
> > > > >
> > > > > note that its not ${D} (bitbake context) but $D which is evaluated
> > > > > in the context when the script is run.
> > > > >
> > > >   i still don't understand ... what are the possible values of $D
> > > >
> > > > here, and what would they represent?
> > >
> > > At build time it will not be expanded by bitbake like ${D} is. but
> > > during image creation it will be. But when doing on-device install
> > > of this package $D will be empty. Its a way to differentiate actions
> > > during image creation and on-device install/update/remove
> >
> >   but the yocto dev manual states pretty clearly that pkg_prerm and
> > pkg_postrm functions are *not* used during image creation. so you're
> > saying they are? under what circumstances?
>
> They wouldn't normally be. You could in theory issue some package
> removal commands as part of postprocessing on the image but I can't
> see much use for that given we have things like PACKAGE_EXCLUDE now.

  oooooh ... that's still kind of weaselly terminology. :-) i'm not
*trying* to be annoyingly pedantic, but this is just the kind of thing
that students tend to ask about, which is why i want to nail the
details.

  the current docs state that pkg_*rm routines are *not* run during
image creation, and i'm going to accept that. that means that if a
pkg_*rm routine *is* written with reference to ${D}, as long as that's
run on the target, it won't make a difference. so the references to
${D} in that context don't *hurt*, they're just unnecessary. and
potentially confusing, which is why i'm trying to clarify this. (every
pkg_*rm routine i've seen, *if* it tests the value of ${D}, bailed if
it was set, which makes sense if they should never, ever be invoked at
image creation time.)

  WRT stuff run at rootfs postprocessing time, sure, you could always
run a package removal command, but clarify this for me -- once you're
into rootfs postprocessing, you're running in a "pseudo" environment
such that you are *effectively* running inside that rootfs, no? so in
that case, all filename references would be full names WRT to the root
filesystem -- no references to ${D}. is that correct? or am i just
confused?

> Khem was simply correcting your reference to ${D}. I can only
> imagine the example you gave is just belt-and-braces to make sure it
> could never be run outside the context of the real target.

  fair enough. as it is, it's simply overkill. gotcha.

rday

-- 

========================================================================
Robert P. J. Day                                 Ottawa, Ontario, CANADA
                        http://crashcourse.ca

Twitter:                                       http://twitter.com/rpjday
LinkedIn:                               http://ca.linkedin.com/in/rpjday
========================================================================




More information about the Openembedded-core mailing list