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
>
>
>
>
>
prev parent 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox