All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Mark Hatle" <mark.hatle@kernel.crashing.org>
To: Peter Kjellerstedt <peter.kjellerstedt@axis.com>,
	"openembedded-core@lists.openembedded.org"
	<openembedded-core@lists.openembedded.org>
Subject: Re: [OE-core] How to create a directory in multiple packages?
Date: Tue, 15 Dec 2020 16:05:09 -0600	[thread overview]
Message-ID: <078116fd-c32b-773e-a821-ea9512b2f57c@kernel.crashing.org> (raw)
In-Reply-To: <503f4c44699844c588fe68cd6e45296b@XBOX03.axis.com>

On 12/15/20 8:24 AM, Peter Kjellerstedt wrote:
>> -----Original Message-----
>> From: openembedded-core@lists.openembedded.org <openembedded-
>> core@lists.openembedded.org> On Behalf Of Mark Hatle
>> Sent: den 15 december 2020 02:02
>> To: openembedded-core@lists.openembedded.org
>> Subject: Re: [OE-core] How to create a directory in multiple packages?
>>
>> On 12/14/20 11:43 AM, Peter Kjellerstedt wrote:
>>> Say we have a recipe that creates an empty /etc/foo directory. Now we
>>> want to add a new file in that directory /etc/foo/bar and package it as
>>> ${PN}-bar. This means the creation of the /etc/foo directory is moved
>>> from the ${PN} package to the ${PN}-bar package. Is there any way to
>>> make ${PN} continue to create an empty /etc/foo, or is the only
>>> alternative to introduce an /etc/foo/.dummy and package it in ${PN}?
>>
>> try adjust the order of the PACKAGES variant.  Something like:
>>
>> PACKAGES = "${PN}-bar ... ${PN}"
>>
>> FILES_${PN}-bar = "/etc/foo/bar"
>> FILES_${PN} = "/etc/foo"
>>
>> That SHOULD package the file 'bar' in -bar, and the directory in ${PN}.
> 
> Unfortunately that does not work (seems bitbake is too smart). What I have 
> is basically:
> 
> PACKAGE_BEFORE_PN = "${PN}-bar"
> FILES_${PN} += "${sysconfdir}/foo"
> FILES_${PN}-bar = "${sysconfdir}/foo/bar"
> 
> which results in the following in the spec file:
> 
> %files -n foo-bar
> %defattr(-,-,-,-)
> %dir "/etc"
> %dir "/etc/foo"
> "/etc/foo/bar"
> 
> There is nothing else about /etc or /etc/foo in the spec file.

Ya, there definitely should be a way to do this...  If not, it will be
problematic as more or more recipes get split into smaller chunks.

> After delving into the code for at bit, I believe this is due to how 
> populate_packages() works. When it handles the ${PN}-bar package and 
> finds the /etc/foo/bar file, it will also mark /etc and /etc/foo as  
> seen, which means they will not be added to any other package, unless 
> that package has an entry for some other /etc/foo/something file, even 
> if /etc/foo is explicitly listed in, e.g., FILES_${PN}.
> 
> So for now, it seems we will have to resort to using a pkg_postinst_${PN}.

Big problem with pkg_postinst, the system won't be able to track
perms/owner/group for the directory and ensure they are synced like the package
manager itself can.

For RPM, I know the %dir directive can (and should be) used to do this kind of
thing, but I don't know what the equivalencies are in opkg and deb.  If there is
a similar mechanism there to specify a directory (not not it's contents) then I
suspect may want to extend recipe syntax to match.

--Mark

>> (Some of the people commenting this isn't less then optimal, actually
>> it's not that unusual.. Typical case I see is creating a directory in 
>> /var or /usr/share for datafiles and the main package owns the directory, 
>> with sub-packages [or other packages] contributing data into that 
>> directory.)
> 
> Yes, there are reason why the empty directory needs to be installed as 
> part of the image. Otherwise I would just have used a file in 
> "/usr/lib/tmpfiles.d".
> 
>> --Mark
>>
>>> //Peter
> 
> //Peter
> 
> 
> 
> 
> 

      reply	other threads:[~2020-12-15 22:05 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-14 17:43 How to create a directory in multiple packages? Peter Kjellerstedt
2020-12-14 17:46 ` [OE-core] " Robert P. J. Day
2020-12-14 18:20   ` Konrad Weihmann
2020-12-15  1:01 ` Mark Hatle
2020-12-15 14:24   ` Peter Kjellerstedt
2020-12-15 22:05     ` Mark Hatle [this message]

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=078116fd-c32b-773e-a821-ea9512b2f57c@kernel.crashing.org \
    --to=mark.hatle@kernel.crashing.org \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=peter.kjellerstedt@axis.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.