Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Richard Purdie <richard.purdie@linuxfoundation.org>
To: Patches and discussions about the oe-core layer
	<openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH 5/5] update-alternatives: Add alternatives as a runtime provide
Date: Wed, 03 Aug 2011 16:40:20 +0100	[thread overview]
Message-ID: <1312386020.2344.683.camel@rex> (raw)
In-Reply-To: <4E395E0C.8010308@windriver.com>

On Wed, 2011-08-03 at 09:41 -0500, Mark Hatle wrote:
> On 8/3/11 7:20 AM, Richard Purdie wrote:
> > On Tue, 2011-08-02 at 09:49 -0500, Mark Hatle wrote:
> >> On 8/2/11 8:46 AM, Phil Blundell wrote:
> >>> On Mon, 2011-08-01 at 19:17 -0500, Mark Hatle wrote:
> >>>> The following allows RPM to generate the SDK image, however without it
> >>>> we get a failure because the system has nothing that provides /bin/sh.
> >>>>
> >>>> Unfortunately the patch causes failures with ipk and deb packages because
> >>>> they can not have filenames within their RPROVIDES.  I'm looking for some
> >>>> type of a resolution to the issue, the only thing I can think of is to
> >>>> add a way to manually add a FILERPROVIDE for the items.  This will require
> >>>> changes to the way FILERPROVIDE is currently generated... but I'm not sure
> >>>> how we can automatically generate the FILERPROVIDE values without the use of
> >>>> python...
> >>>>
> >>>> Any suggestions?
> >>>
> >>> It's never really been the intent that update-alternatives should put
> >>> the name of the link being provided into RPROVIDES.  If you want to
> >>> solve the specific problem with /bin/sh then just adding RPROVIDES_${PN}
> >>> += "virtual-bourne-shell" or something to bash and busybox is probably
> >>> the easiest way of doing that.
> >>>
> >>> I wouldn't be entirely opposed to the concept of what you're proposing
> >>> here, though.  Something like:
> >>>
> >>> RPROVIDES_${PN} += "${@' '.join(map(lambda x:
> >>> legitimize_package_name("virtual-path-" + x), filter(lambda x: x != '',
> >>> [ d.getVar('ALTERNATIVE_LINK', True) or '' ] +
> >>> (d.getVar('ALTERNATIVE_LINKS', True) or '').split())))}"
> >>>
> >>> might be what you want, perhaps.  I'm not sure that the resulting
> >>> virtual names will be very pretty though.
> >>
> >> Hmm.. Coming from the RPM world, the virtual-path- because we can't just
> >> "provide" a file in the system seems a bit wonky to me.  But it should be able
> >> to work.  For RPM at least, we'd want a reversing function to turn virtual paths
> >> back into real paths.
> >>
> >> If I have time today, I'll try to implement a proof of concept and see if I can
> >> get it to work reasonably well.
> > 
> > Just to be clear for Phil's benefit, RPM natively supports file based
> > dependencies, so a dependency of "/bin/sh" is automatically fulfilled by
> > a package which contains "/bin/sh". Some dependencies such as the
> > shebang in scripts are automatically added to packages and resolved by
> > rpm.
> > 
> > I did chase down this bug a bit and it seems that if you "bitbake
> > meta-toolchain-game" you hit an error about /bin/sh being missing but if
> > you "bitbake busybox; bitbake meta-toolchain-gmae" it will work. This is
> > due to busybox shipping a /bin/sh.
> > 
> > The question is therefore how to handle this on the deb/ipk side and
> > ensure we get consistency between the behaviours of the different
> > backends. I thought with the rpm filedeps code in do_package, we were
> > adding things like /bin/sh dependencies to the other package formats but
> > now I'm not so sure. 
> 
> Due to deb/ipk not handling file based dependencies, they are filtered out on
> the creation of the deb/ipk packages.  The original intention was to use them,
> but it wasn't possible at the time.  Simply adding a ton of file-based
> dependencies seemed like a huge mistake as well.  (We'd have to add virtual
> provides for all of the virtual requirements....)
> 
> We could certainly select a few specific requirements and scan for and use those
> to catch obvious issues, such as perl, sh, bash, env/python... but it's still
> only a partial solution to the real issue.

Short term I'm tempted to buy us some time and do this (rpm specific):

package_rpm: Ensure alternatives links are reflected in rpm package dependencies

Currently, if a file is provided as an alternative link within the package, rpm
doesn't see the dependency. This works out badly for dependencies such as /bin/sh
which scripts might require.

Since rpm detects and adds these dependencies we do need to ensure the dependency
information in the packages is correct. This patch does so for the rpm backend
ensuring internal consistency whilst the approach for addressing this problem in
the other package backends is considered.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index abedc68..c44fdcc 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -501,6 +501,10 @@ python write_specfile () {
 		splitrconflicts  = bb.data.getVar('RCONFLICTS', localdata, True) or ""
 		splitrobsoletes  = []
 
+		# For now we need to manually supplement RPROVIDES with any update-alternatives links
+		if pkg == d.getVar("PN", True):
+			splitrprovides = splitrprovides + (d.getVar('ALTERNATIVE_LINK', True) or '') + (d.getVar('ALTERNATIVE_LINKS', True) or '')
+
 		# Gather special src/first package data
 		if srcname == splitname:
 			srcrdepends    = splitrdepends




  reply	other threads:[~2011-08-03 15:45 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-02  0:17 [PATCH 0/5] Fix the SDK generation Mark Hatle
2011-08-02  0:17 ` [PATCH 1/5] rootfs_rpm: Cleanup and minor bug fixes Mark Hatle
2011-08-02  0:17 ` [PATCH 2/5] bitbake.conf: Add SDK_PACKAGE_ARCHS Mark Hatle
2011-08-02  0:17 ` [PATCH 3/5] populate_sdk_*: Sync SDK and regular rootfs functions Mark Hatle
2011-08-02  0:17 ` [PATCH 4/5] package_ipk: SDK generation workaround Mark Hatle
2011-08-02  0:17 ` [PATCH 5/5] update-alternatives: Add alternatives as a runtime provide Mark Hatle
2011-08-02 13:46   ` Phil Blundell
2011-08-02 14:49     ` Mark Hatle
2011-08-03 12:20       ` Richard Purdie
2011-08-03 14:41         ` Mark Hatle
2011-08-03 15:40           ` Richard Purdie [this message]
2011-08-03 16:03             ` Mark Hatle
2011-08-03 16:09               ` Richard Purdie
2011-08-02 13:34 ` [PATCH 0/5] Fix the SDK generation Richard Purdie

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=1312386020.2344.683.camel@rex \
    --to=richard.purdie@linuxfoundation.org \
    --cc=openembedded-core@lists.openembedded.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