Patchwork [1/1] (image|rootfs_ipk).bbclass, rootfs.py: ipk multilib fixes

login
register
mail settings
Submitter Laurentiu Palcu
Date Feb. 12, 2014, 2:33 p.m.
Message ID <f1d4b1de74f2c69b444ed50977263245440ed071.1392215552.git.laurentiu.palcu@intel.com>
Download mbox | patch
Permalink /patch/66641/
State New
Headers show

Comments

Laurentiu Palcu - Feb. 12, 2014, 2:33 p.m.
This commit whitelists some common directories, so the multilib sanity
checks pass and also fixes an issue in lib/oe/rootfs.py when the
compared files do not exist.

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
---
 meta/classes/image.bbclass      |    2 +-
 meta/classes/rootfs_ipk.bbclass |    2 +-
 meta/lib/oe/rootfs.py           |    4 +++-
 3 files changed, 5 insertions(+), 3 deletions(-)
Phil Blundell - Feb. 12, 2014, 2:44 p.m.
On Wed, 2014-02-12 at 16:33 +0200, Laurentiu Palcu wrote:
> diff --git a/meta/classes/rootfs_ipk.bbclass b/meta/classes/rootfs_ipk.bbclass
> index 6d4f9fa..1887dd3 100644
> --- a/meta/classes/rootfs_ipk.bbclass
> +++ b/meta/classes/rootfs_ipk.bbclass
> @@ -21,7 +21,7 @@ OPKG_POSTPROCESS_COMMANDS = ""
>  
>  OPKGLIBDIR = "${localstatedir}/lib"
>  
> -MULTILIBRE_ALLOW_REP = "${OPKGLIBDIR}/opkg"
> +MULTILIBRE_ALLOW_REP = "${OPKGLIBDIR}/opkg|/usr/lib/opkg"

Why is that change needed?  Doesn't this imply that ${OPKGLIBDIR} is
wrong?

p.
Laurentiu Palcu - Feb. 12, 2014, 2:55 p.m.
On Wed, Feb 12, 2014 at 02:44:32PM +0000, Phil Blundell wrote:
> On Wed, 2014-02-12 at 16:33 +0200, Laurentiu Palcu wrote:
> > diff --git a/meta/classes/rootfs_ipk.bbclass b/meta/classes/rootfs_ipk.bbclass
> > index 6d4f9fa..1887dd3 100644
> > --- a/meta/classes/rootfs_ipk.bbclass
> > +++ b/meta/classes/rootfs_ipk.bbclass
> > @@ -21,7 +21,7 @@ OPKG_POSTPROCESS_COMMANDS = ""
> >  
> >  OPKGLIBDIR = "${localstatedir}/lib"
> >  
> > -MULTILIBRE_ALLOW_REP = "${OPKGLIBDIR}/opkg"
> > +MULTILIBRE_ALLOW_REP = "${OPKGLIBDIR}/opkg|/usr/lib/opkg"
> 
> Why is that change needed?  Doesn't this imply that ${OPKGLIBDIR} is
> wrong?
It's needed for the multilib sanity checks. I managed to make these
checks actually work in the new code and I had to adjust the directory
whitelist.

* ${OPKGLIBDIR}/opkg is for opkg's metadata and stuff;
* /usr/lib/opkg is where the alternatives go;

laurentiu
> 
> p.
> 
>
Phil Blundell - Feb. 12, 2014, 3:07 p.m.
On Wed, 2014-02-12 at 16:55 +0200, Laurentiu Palcu wrote:
> * /usr/lib/opkg is where the alternatives go;

Isn't that a bug?

p.
Laurentiu Palcu - Feb. 12, 2014, 3:40 p.m.
On Wed, Feb 12, 2014 at 03:07:31PM +0000, Phil Blundell wrote:
> On Wed, 2014-02-12 at 16:55 +0200, Laurentiu Palcu wrote:
> > * /usr/lib/opkg is where the alternatives go;
> 
> Isn't that a bug?
I'm far from being an expert in opkg or update-alternatives, but,
looking in /usr/bin/update-alternatives I can see:

# admin dir
ad="$OPKG_OFFLINE_ROOT/usr/lib/opkg/alternatives"

Isn't that expected since the u-a provider is opkg-utils recipe?

laurentiu
> 
> p.
> 
>
Richard Purdie - Feb. 13, 2014, 11:38 a.m.
On Wed, 2014-02-12 at 17:40 +0200, Laurentiu Palcu wrote:
> On Wed, Feb 12, 2014 at 03:07:31PM +0000, Phil Blundell wrote:
> > On Wed, 2014-02-12 at 16:55 +0200, Laurentiu Palcu wrote:
> > > * /usr/lib/opkg is where the alternatives go;
> > 
> > Isn't that a bug?
> I'm far from being an expert in opkg or update-alternatives, but,
> looking in /usr/bin/update-alternatives I can see:
> 
> # admin dir
> ad="$OPKG_OFFLINE_ROOT/usr/lib/opkg/alternatives"
> 
> Isn't that expected since the u-a provider is opkg-utils recipe?

Its certainly desirable to have one set of alternatives files on a
multilib system, not two. The variables/paths could probably do with
being better however I've prefer not to trigger autobuilder failures on
this until that gets resolved so I did take this.

Cheers,

Richard
Paul Barker - Feb. 14, 2014, 1:15 p.m.
On 13 February 2014 11:38, Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:
> On Wed, 2014-02-12 at 17:40 +0200, Laurentiu Palcu wrote:
>> On Wed, Feb 12, 2014 at 03:07:31PM +0000, Phil Blundell wrote:
>> > On Wed, 2014-02-12 at 16:55 +0200, Laurentiu Palcu wrote:
>> > > * /usr/lib/opkg is where the alternatives go;
>> >
>> > Isn't that a bug?
>> I'm far from being an expert in opkg or update-alternatives, but,
>> looking in /usr/bin/update-alternatives I can see:
>>
>> # admin dir
>> ad="$OPKG_OFFLINE_ROOT/usr/lib/opkg/alternatives"
>>
>> Isn't that expected since the u-a provider is opkg-utils recipe?
>
> Its certainly desirable to have one set of alternatives files on a
> multilib system, not two. The variables/paths could probably do with
> being better however I've prefer not to trigger autobuilder failures on
> this until that gets resolved so I did take this.
>
> Cheers,
>
> Richard
>

I should add some flexibility here. The problem is opkg-utils doesn't
know what value OPKGLIBDIR has in the opkg recipe. It also isn't
processed by a configure script to replace variables as it was in the
opkg recipe.

I'll have a think about a cleaner upgrade path for opkg and
opkg-utils. I'd like to  have a postinstall script compare the old and
new OPKGLIBDIR paths and move data if needed. That would let me move
everything from /usr/lib to /var/lib.
Paul Barker - Feb. 14, 2014, 1:20 p.m.
On 14 February 2014 13:15, Paul Barker <paul@paulbarker.me.uk> wrote:
> On 13 February 2014 11:38, Richard Purdie
> <richard.purdie@linuxfoundation.org> wrote:
>> On Wed, 2014-02-12 at 17:40 +0200, Laurentiu Palcu wrote:
>>> On Wed, Feb 12, 2014 at 03:07:31PM +0000, Phil Blundell wrote:
>>> > On Wed, 2014-02-12 at 16:55 +0200, Laurentiu Palcu wrote:
>>> > > * /usr/lib/opkg is where the alternatives go;
>>> >
>>> > Isn't that a bug?
>>> I'm far from being an expert in opkg or update-alternatives, but,
>>> looking in /usr/bin/update-alternatives I can see:
>>>
>>> # admin dir
>>> ad="$OPKG_OFFLINE_ROOT/usr/lib/opkg/alternatives"
>>>
>>> Isn't that expected since the u-a provider is opkg-utils recipe?
>>
>> Its certainly desirable to have one set of alternatives files on a
>> multilib system, not two. The variables/paths could probably do with
>> being better however I've prefer not to trigger autobuilder failures on
>> this until that gets resolved so I did take this.
>>
>> Cheers,
>>
>> Richard
>>
>
> I should add some flexibility here. The problem is opkg-utils doesn't
> know what value OPKGLIBDIR has in the opkg recipe. It also isn't
> processed by a configure script to replace variables as it was in the
> opkg recipe.
>

Actually, OPKGLIBDIR is set in two places:

meta/classes/package_ipk.bbclass:
    OPKGLIBDIR = "${localstatedir}/lib"

meta/recipes-devtools/opkg/opkg.inc:
    target_localstatedir := "${localstatedir}"
    OPKGLIBDIR = "${target_localstatedir}/lib"

Should this be cleaned up so it's just set once globally and then we
can substitute that variable into the update-alternatives script
again?

Patch

diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index 8f4be13..28b68f9 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -264,7 +264,7 @@  insert_feed_uris () {
 	done
 }
 
-MULTILIBRE_ALLOW_REP =. "${base_bindir}|${base_sbindir}|${bindir}|${sbindir}|${libexecdir}|"
+MULTILIBRE_ALLOW_REP =. "${base_bindir}|${base_sbindir}|${bindir}|${sbindir}|${libexecdir}|${sysconfdir}|${nonarch_base_libdir}/udev|"
 MULTILIB_CHECK_FILE = "${WORKDIR}/multilib_check.py"
 MULTILIB_TEMP_ROOTFS = "${WORKDIR}/multilib"
 
diff --git a/meta/classes/rootfs_ipk.bbclass b/meta/classes/rootfs_ipk.bbclass
index 6d4f9fa..1887dd3 100644
--- a/meta/classes/rootfs_ipk.bbclass
+++ b/meta/classes/rootfs_ipk.bbclass
@@ -21,7 +21,7 @@  OPKG_POSTPROCESS_COMMANDS = ""
 
 OPKGLIBDIR = "${localstatedir}/lib"
 
-MULTILIBRE_ALLOW_REP = "${OPKGLIBDIR}/opkg"
+MULTILIBRE_ALLOW_REP = "${OPKGLIBDIR}/opkg|/usr/lib/opkg"
 
 python () {
 
diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py
index b6baf77..4fd17de 100644
--- a/meta/lib/oe/rootfs.py
+++ b/meta/lib/oe/rootfs.py
@@ -496,7 +496,9 @@  class OpkgRootfs(Rootfs):
                         if allow_rep.match(key):
                             valid = True
                         else:
-                            if not filecmp.cmp(files[key], item):
+                            if os.path.exists(files[key]) and \
+                               os.path.exists(item) and \
+                               not filecmp.cmp(files[key], item):
                                 valid = False
                                 bb.fatal("%s duplicate files %s %s is not the same\n" %
                                          (error_prompt, item, files[key]))