Patchwork [4/9] package_rpm: Add capability to directly query packageorigin

login
register
mail settings
Submitter Mark Hatle
Date June 11, 2012, 6:18 p.m.
Message ID <d756c12e2cdbfabf01dc0c80c0d17d221a332822.1339438568.git.mark.hatle@windriver.com>
Download mbox | patch
Permalink /patch/29671/
State Accepted
Commit a8ff3141fd78442bf328c9d3a489db88ad27486b
Headers show

Comments

Mark Hatle - June 11, 2012, 6:18 p.m.
Add functionality to RPM to directly query the packageorigin (path) from
the resolver database, instead of having to do this via an indirect method.

This results in a minor performance improvement.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 meta/classes/package_rpm.bbclass                   |   18 +++++++-------
 .../rpm/rpm/rpm-packageorigin.patch                |   23 ++++++++++++++++++++
 meta/recipes-devtools/rpm/rpm_5.4.9.bb             |    3 +-
 3 files changed, 34 insertions(+), 10 deletions(-)
 create mode 100644 meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch
Giuseppe Condorelli - June 12, 2012, 7:21 a.m.
Hi Mark,

this can be interesting for me. Please can you explain with an example what
really this patch does?
Many thanks,
Giuseppe

2012/6/11 Mark Hatle <mark.hatle@windriver.com>

> Add functionality to RPM to directly query the packageorigin (path) from
> the resolver database, instead of having to do this via an indirect method.
>
> This results in a minor performance improvement.
>
> Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
> ---
>  meta/classes/package_rpm.bbclass                   |   18 +++++++-------
>  .../rpm/rpm/rpm-packageorigin.patch                |   23
> ++++++++++++++++++++
>  meta/recipes-devtools/rpm/rpm_5.4.9.bb             |    3 +-
>  3 files changed, 34 insertions(+), 10 deletions(-)
>  create mode 100644 meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch
>
> diff --git a/meta/classes/package_rpm.bbclass
> b/meta/classes/package_rpm.bbclass
> index 35928ab..097fa12 100644
> --- a/meta/classes/package_rpm.bbclass
> +++ b/meta/classes/package_rpm.bbclass
> @@ -130,12 +130,12 @@ resolve_package_rpm () {
>        shift
>        local pkg_name=""
>        for solve in `cat ${conffile}`; do
> -               pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create
> nofsync" -q --yaml $@ | grep -i 'Packageorigin' | cut -d : -f 2)
> -               if [ -n "$pkg_name" ]; then
> +               pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create
> nofsync" -q --qf "%{packageorigin}\n" "$@" | grep -v "is not installed" ||
> true)
> +               if [ -n "$pkg_name" -a "$pkg_name" != "(none)" ]; then
> +                       echo $pkg_name
>                        break;
>                fi
>        done
> -       echo $pkg_name
>  }
>
>  # rpm common command and options
> @@ -401,9 +401,9 @@ package_install_internal_rpm () {
>
>        # Now that we have a solution, pull out a list of what to install...
>        echo "Manifest: ${target_rootfs}/install/install.manifest"
> -       ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --yaml \
> +       ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --qf
> "%{packageorigin}\n" \
>                -D "__dbi_txn create nofsync private" \
> -               | grep -i 'Packageorigin' | cut -d : -f 2 >
> ${target_rootfs}/install/install_solution.manifest
> +               > ${target_rootfs}/install/install_solution.manifest
>
>        touch ${target_rootfs}/install/install_multilib_solution.manifest
>
> @@ -421,9 +421,9 @@ package_install_internal_rpm () {
>
>                # Now that we have a solution, pull out a list of what to
> install...
>                echo "Manifest:
> ${target_rootfs}/install/install_multilib.manifest"
> -               ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --yaml \
> +               ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --qf
> "%{packageorigin}\n" \
>                        -D "__dbi_txn create nofsync private" \
> -                       | grep -i 'Packageorigin' | cut -d : -f 2 >
> ${target_rootfs}/install/install_multilib_solution.manifest
> +                       >
> ${target_rootfs}/install/install_multilib_solution.manifest
>
>        fi
>
> @@ -478,9 +478,9 @@ EOF
>                        -U --justdb --noscripts --notriggers --noparentdirs
> --nolinktos --ignoresize \
>                        ${target_rootfs}/install/initial_install.manifest
>
> -               ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --yaml \
> +               ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --qf
> "%{packageorigin}\n" \
>                        -D "__dbi_txn create nofsync private" \
> -                       | grep -i 'Packageorigin' | cut -d : -f 2 >
> ${target_rootfs}/install/initial_solution.manifest
> +                       >
> ${target_rootfs}/install/initial_solution.manifest
>
>                rpm_update_pkg
> ${target_rootfs}/install/initial_solution.manifest
>
> diff --git a/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch
> b/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch
> new file mode 100644
> index 0000000..3c6dad4
> --- /dev/null
> +++ b/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch
> @@ -0,0 +1,23 @@
> +Add the ability to query the packageorigin
> +
> +Written by jbj at rpm5.org
> +
> +Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
> +
> +Index: rpm-5.4.8/rpmdb/hdrfmt.c
> +===================================================================
> +--- rpm-5.4.8.orig/rpmdb/hdrfmt.c
> ++++ rpm-5.4.8/rpmdb/hdrfmt.c
> +@@ -2403,8 +2403,10 @@ static int pkgoriginTag(Header h, HE_t
> +     int rc = 1;
> +
> +     he->tag = RPMTAG_PACKAGEORIGIN;
> +-    if (!headerGet(h, he, HEADERGET_NOEXTENSION)
> +-     && (origin = headerGetOrigin(h)) != NULL)
> ++    /* XXX two sources for tag data: what search precedence? */
> ++    if (headerGet(h, he, HEADERGET_NOEXTENSION))
> ++      rc = 0;
> ++    else if ((origin = headerGetOrigin(h)) != NULL)
> +     {
> +       he->t = RPM_STRING_TYPE;
> +       he->p.str = xstrdup(origin);
> diff --git a/meta/recipes-devtools/rpm/rpm_5.4.9.bbb/meta/recipes-devtools/rpm/
> rpm_5.4.9.bb
> index 2ca0f58..a38a684 100644
> --- a/meta/recipes-devtools/rpm/rpm_5.4.9.bb
> +++ b/meta/recipes-devtools/rpm/rpm_5.4.9.bb
> @@ -43,7 +43,7 @@ LICENSE = "LGPLv2.1"
>  LIC_FILES_CHKSUM =
> "file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1"
>
>  DEPENDS = "libpcre attr acl popt ossp-uuid file"
> -PR = "r41"
> +PR = "r42"
>
>  # rpm2cpio is a shell script, which is part of the rpm src.rpm.  It is
> needed
>  # in order to extract the distribution SRPM into a format we can
> extract...
> @@ -70,6 +70,7 @@ SRC_URI = "
> http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.9-0.20120508.src.rpm;ex
>           file://rpm-macros.patch \
>           file://rpm-lua.patch \
>           file://rpm-ossp-uuid.patch \
> +          file://rpm-packageorigin.patch \
>          "
>
>  SRC_URI[md5sum] = "60d56ace884340c1b3fcac6a1d58e768"
> --
> 1.7.3.4
>
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>
Mark Hatle - June 12, 2012, 6:46 p.m.
On 6/12/12 2:21 AM, Giuseppe Condorelli wrote:
> Hi Mark,
> this can be interesting for me. Please can you explain with an example what
> really this patch does?

The resolver database is seeded with all of the items from the packagefeed. 
When you seed (install) a database, each entry gets a record of where the 
package file exists on the disk.  This is stored in the packageorigin field.  It 
is designed to be used by resolver systems.

Before you could only query the packageorigin field if you were using raw RPM 
calls or using the --yaml export features.  We wanted to be able to query the 
file path from the resolver via the shell.  This patch added that ability.

The packageorigin is likely not useful to anyone, unless you are using it in 
conjunction w/ an associated package feed/resolver database.

--Mark

> Many thanks,
> Giuseppe
>
> 2012/6/11 Mark Hatle <mark.hatle@windriver.com <mailto:mark.hatle@windriver.com>>
>
>     Add functionality to RPM to directly query the packageorigin (path) from
>     the resolver database, instead of having to do this via an indirect method.
>
>     This results in a minor performance improvement.
>
>     Signed-off-by: Mark Hatle <mark.hatle@windriver.com
>     <mailto:mark.hatle@windriver.com>>
>     ---
>     meta/classes/package_rpm.bbclass | 18 +++++++-------
>     .../rpm/rpm/rpm-packageorigin.patch | 23 ++++++++++++++++++++
>     meta/recipes-devtools/rpm/rpm_5.4.9.bb <http://rpm_5.4.9.bb> | 3 +-
>     3 files changed, 34 insertions(+), 10 deletions(-)
>     create mode 100644 meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch
>
>     diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
>     index 35928ab..097fa12 100644
>     --- a/meta/classes/package_rpm.bbclass
>     +++ b/meta/classes/package_rpm.bbclass
>     @@ -130,12 +130,12 @@ resolve_package_rpm () {
>     shift
>     local pkg_name=""
>     for solve in `cat ${conffile}`; do
>     - pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create nofsync" -q
>     --yaml $@ | grep -i 'Packageorigin' | cut -d : -f 2)
>     - if [ -n "$pkg_name" ]; then
>     + pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create nofsync" -q
>     --qf "%{packageorigin}\n" "$@" | grep -v "is not installed" || true)
>     + if [ -n "$pkg_name" -a "$pkg_name" != "(none)" ]; then
>     + echo $pkg_name
>     break;
>     fi
>     done
>     - echo $pkg_name
>     }
>
>     # rpm common command and options
>     @@ -401,9 +401,9 @@ package_install_internal_rpm () {
>
>     # Now that we have a solution, pull out a list of what to install...
>     echo "Manifest: ${target_rootfs}/install/install.manifest"
>     - ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --yaml \
>     + ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --qf "%{packageorigin}\n" \
>     -D "__dbi_txn create nofsync private" \
>     - | grep -i 'Packageorigin' | cut -d : -f 2 >
>     ${target_rootfs}/install/install_solution.manifest
>     + > ${target_rootfs}/install/install_solution.manifest
>
>     touch ${target_rootfs}/install/install_multilib_solution.manifest
>
>     @@ -421,9 +421,9 @@ package_install_internal_rpm () {
>
>     # Now that we have a solution, pull out a list of what to install...
>     echo "Manifest: ${target_rootfs}/install/install_multilib.manifest"
>     - ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --yaml \
>     + ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --qf "%{packageorigin}\n" \
>     -D "__dbi_txn create nofsync private" \
>     - | grep -i 'Packageorigin' | cut -d : -f 2 >
>     ${target_rootfs}/install/install_multilib_solution.manifest
>     + > ${target_rootfs}/install/install_multilib_solution.manifest
>
>     fi
>
>     @@ -478,9 +478,9 @@ EOF
>     -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \
>     ${target_rootfs}/install/initial_install.manifest
>
>     - ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --yaml \
>     + ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --qf "%{packageorigin}\n" \
>     -D "__dbi_txn create nofsync private" \
>     - | grep -i 'Packageorigin' | cut -d : -f 2 >
>     ${target_rootfs}/install/initial_solution.manifest
>     + > ${target_rootfs}/install/initial_solution.manifest
>
>     rpm_update_pkg ${target_rootfs}/install/initial_solution.manifest
>
>     diff --git a/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch
>     b/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch
>     new file mode 100644
>     index 0000000..3c6dad4
>     --- /dev/null
>     +++ b/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch
>     @@ -0,0 +1,23 @@
>     +Add the ability to query the packageorigin
>     +
>     +Written by jbj at rpm5.org <http://rpm5.org>
>     +
>     +Signed-off-by: Mark Hatle <mark.hatle@windriver.com
>     <mailto:mark.hatle@windriver.com>>
>     +
>     +Index: rpm-5.4.8/rpmdb/hdrfmt.c
>     +===================================================================
>     +--- rpm-5.4.8.orig/rpmdb/hdrfmt.c
>     ++++ rpm-5.4.8/rpmdb/hdrfmt.c
>     +@@ -2403,8 +2403,10 @@ static int pkgoriginTag(Header h, HE_t
>     + int rc = 1;
>     +
>     + he->tag = RPMTAG_PACKAGEORIGIN;
>     +- if (!headerGet(h, he, HEADERGET_NOEXTENSION)
>     +- && (origin = headerGetOrigin(h)) != NULL)
>     ++ /* XXX two sources for tag data: what search precedence? */
>     ++ if (headerGet(h, he, HEADERGET_NOEXTENSION))
>     ++ rc = 0;
>     ++ else if ((origin = headerGetOrigin(h)) != NULL)
>     + {
>     + he->t = RPM_STRING_TYPE;
>     + he->p.str = xstrdup(origin);
>     diff --git a/meta/recipes-devtools/rpm/rpm_5.4.9.bb <http://rpm_5.4.9.bb>
>     b/meta/recipes-devtools/rpm/rpm_5.4.9.bb <http://rpm_5.4.9.bb>
>     index 2ca0f58..a38a684 100644
>     --- a/meta/recipes-devtools/rpm/rpm_5.4.9.bb <http://rpm_5.4.9.bb>
>     +++ b/meta/recipes-devtools/rpm/rpm_5.4.9.bb <http://rpm_5.4.9.bb>
>     @@ -43,7 +43,7 @@ LICENSE = "LGPLv2.1"
>     LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1"
>
>     DEPENDS = "libpcre attr acl popt ossp-uuid file"
>     -PR = "r41"
>     +PR = "r42"
>
>     # rpm2cpio is a shell script, which is part of the rpm src.rpm. It is needed
>     # in order to extract the distribution SRPM into a format we can extract...
>     @@ -70,6 +70,7 @@ SRC_URI =
>     "http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.9-0.20120508.src.rpm;ex
>     file://rpm-macros.patch \
>     file://rpm-lua.patch \
>     file://rpm-ossp-uuid.patch \
>     + file://rpm-packageorigin.patch \
>     "
>
>     SRC_URI[md5sum] = "60d56ace884340c1b3fcac6a1d58e768"
>     --
>     1.7.3.4
>
>
>     _______________________________________________
>     Openembedded-core mailing list
>     Openembedded-core@lists.openembedded.org
>     <mailto:Openembedded-core@lists.openembedded.org>
>     http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>
>
>
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
Giuseppe Condorelli - June 13, 2012, 8:03 a.m.
Hi Mark,

many thanks for the explanation.

Cheers,
Giuseppe

2012/6/12 Mark Hatle <mark.hatle@windriver.com>

> On 6/12/12 2:21 AM, Giuseppe Condorelli wrote:
>
>> Hi Mark,
>> this can be interesting for me. Please can you explain with an example
>> what
>> really this patch does?
>>
>
> The resolver database is seeded with all of the items from the
> packagefeed. When you seed (install) a database, each entry gets a record
> of where the package file exists on the disk.  This is stored in the
> packageorigin field.  It is designed to be used by resolver systems.
>
> Before you could only query the packageorigin field if you were using raw
> RPM calls or using the --yaml export features.  We wanted to be able to
> query the file path from the resolver via the shell.  This patch added that
> ability.
>
> The packageorigin is likely not useful to anyone, unless you are using it
> in conjunction w/ an associated package feed/resolver database.
>
> --Mark
>
>  Many thanks,
>> Giuseppe
>>
>> 2012/6/11 Mark Hatle <mark.hatle@windriver.com <mailto:
>> mark.hatle@windriver.**com <mark.hatle@windriver.com>>>
>>
>>
>>    Add functionality to RPM to directly query the packageorigin (path)
>> from
>>    the resolver database, instead of having to do this via an indirect
>> method.
>>
>>    This results in a minor performance improvement.
>>
>>    Signed-off-by: Mark Hatle <mark.hatle@windriver.com
>>    <mailto:mark.hatle@windriver.**com <mark.hatle@windriver.com>>>
>>
>>    ---
>>    meta/classes/package_rpm.**bbclass | 18 +++++++-------
>>    .../rpm/rpm/rpm-packageorigin.**patch | 23 ++++++++++++++++++++
>>    meta/recipes-devtools/rpm/rpm_**5.4.9.bb <http://rpm_5.4.9.bb> <
>> http://rpm_5.4.9.bb> | 3 +-
>>
>>    3 files changed, 34 insertions(+), 10 deletions(-)
>>    create mode 100644 meta/recipes-devtools/rpm/rpm/**
>> rpm-packageorigin.patch
>>
>>    diff --git a/meta/classes/package_rpm.**bbclass
>> b/meta/classes/package_rpm.**bbclass
>>    index 35928ab..097fa12 100644
>>    --- a/meta/classes/package_rpm.**bbclass
>>    +++ b/meta/classes/package_rpm.**bbclass
>>    @@ -130,12 +130,12 @@ resolve_package_rpm () {
>>    shift
>>    local pkg_name=""
>>    for solve in `cat ${conffile}`; do
>>    - pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create nofsync"
>> -q
>>    --yaml $@ | grep -i 'Packageorigin' | cut -d : -f 2)
>>    - if [ -n "$pkg_name" ]; then
>>    + pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create nofsync"
>> -q
>>    --qf "%{packageorigin}\n" "$@" | grep -v "is not installed" || true)
>>    + if [ -n "$pkg_name" -a "$pkg_name" != "(none)" ]; then
>>    + echo $pkg_name
>>    break;
>>    fi
>>    done
>>    - echo $pkg_name
>>    }
>>
>>    # rpm common command and options
>>    @@ -401,9 +401,9 @@ package_install_internal_rpm () {
>>
>>    # Now that we have a solution, pull out a list of what to install...
>>    echo "Manifest: ${target_rootfs}/install/**install.manifest"
>>    - ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --yaml \
>>    + ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --qf
>> "%{packageorigin}\n" \
>>    -D "__dbi_txn create nofsync private" \
>>    - | grep -i 'Packageorigin' | cut -d : -f 2 >
>>    ${target_rootfs}/install/**install_solution.manifest
>>    + > ${target_rootfs}/install/**install_solution.manifest
>>
>>    touch ${target_rootfs}/install/**install_multilib_solution.**manifest
>>
>>    @@ -421,9 +421,9 @@ package_install_internal_rpm () {
>>
>>    # Now that we have a solution, pull out a list of what to install...
>>    echo "Manifest: ${target_rootfs}/install/**install_multilib.manifest"
>>    - ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --yaml \
>>    + ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --qf
>> "%{packageorigin}\n" \
>>    -D "__dbi_txn create nofsync private" \
>>    - | grep -i 'Packageorigin' | cut -d : -f 2 >
>>    ${target_rootfs}/install/**install_multilib_solution.**manifest
>>    + > ${target_rootfs}/install/**install_multilib_solution.**manifest
>>
>>    fi
>>
>>    @@ -478,9 +478,9 @@ EOF
>>    -U --justdb --noscripts --notriggers --noparentdirs --nolinktos
>> --ignoresize \
>>    ${target_rootfs}/install/**initial_install.manifest
>>
>>    - ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --yaml \
>>    + ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --qf
>> "%{packageorigin}\n" \
>>    -D "__dbi_txn create nofsync private" \
>>    - | grep -i 'Packageorigin' | cut -d : -f 2 >
>>    ${target_rootfs}/install/**initial_solution.manifest
>>    + > ${target_rootfs}/install/**initial_solution.manifest
>>
>>    rpm_update_pkg ${target_rootfs}/install/**initial_solution.manifest
>>
>>    diff --git a/meta/recipes-devtools/rpm/**rpm/rpm-packageorigin.patch
>>    b/meta/recipes-devtools/rpm/**rpm/rpm-packageorigin.patch
>>    new file mode 100644
>>    index 0000000..3c6dad4
>>    --- /dev/null
>>    +++ b/meta/recipes-devtools/rpm/**rpm/rpm-packageorigin.patch
>>    @@ -0,0 +1,23 @@
>>    +Add the ability to query the packageorigin
>>    +
>>    +Written by jbj at rpm5.org <http://rpm5.org>
>>
>>    +
>>    +Signed-off-by: Mark Hatle <mark.hatle@windriver.com
>>    <mailto:mark.hatle@windriver.**com <mark.hatle@windriver.com>>>
>>
>>    +
>>    +Index: rpm-5.4.8/rpmdb/hdrfmt.c
>>    +=============================**==============================**
>> ========
>>    +--- rpm-5.4.8.orig/rpmdb/hdrfmt.c
>>    ++++ rpm-5.4.8/rpmdb/hdrfmt.c
>>    +@@ -2403,8 +2403,10 @@ static int pkgoriginTag(Header h, HE_t
>>    + int rc = 1;
>>    +
>>    + he->tag = RPMTAG_PACKAGEORIGIN;
>>    +- if (!headerGet(h, he, HEADERGET_NOEXTENSION)
>>    +- && (origin = headerGetOrigin(h)) != NULL)
>>    ++ /* XXX two sources for tag data: what search precedence? */
>>    ++ if (headerGet(h, he, HEADERGET_NOEXTENSION))
>>    ++ rc = 0;
>>    ++ else if ((origin = headerGetOrigin(h)) != NULL)
>>    + {
>>    + he->t = RPM_STRING_TYPE;
>>    + he->p.str = xstrdup(origin);
>>    diff --git a/meta/recipes-devtools/rpm/rp**m_5.4.9.bb<http://rpm_5.4.9.bb><
>> http://rpm_5.4.9.bb>
>>    b/meta/recipes-devtools/rpm/rp**m_5.4.9.bb <http://rpm_5.4.9.bb> <
>> http://rpm_5.4.9.bb>
>>    index 2ca0f58..a38a684 100644
>>    --- a/meta/recipes-devtools/rpm/rp**m_5.4.9.bb <http://rpm_5.4.9.bb> <
>> http://rpm_5.4.9.bb>
>>    +++ b/meta/recipes-devtools/rpm/rp**m_5.4.9.bb <http://rpm_5.4.9.bb> <
>> http://rpm_5.4.9.bb>
>>
>>    @@ -43,7 +43,7 @@ LICENSE = "LGPLv2.1"
>>    LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=**
>> 2d5025d4aa3495befef8f17206a5b0**a1"
>>
>>    DEPENDS = "libpcre attr acl popt ossp-uuid file"
>>    -PR = "r41"
>>    +PR = "r42"
>>
>>    # rpm2cpio is a shell script, which is part of the rpm src.rpm. It is
>> needed
>>    # in order to extract the distribution SRPM into a format we can
>> extract...
>>    @@ -70,6 +70,7 @@ SRC_URI =
>>    "http://www.rpm5.org/files/**rpm/rpm-5.4/rpm-5.4.9-0.**
>> 20120508.src.rpm;ex<http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.9-0.20120508.src.rpm;ex>
>>    file://rpm-macros.patch \
>>    file://rpm-lua.patch \
>>    file://rpm-ossp-uuid.patch \
>>    + file://rpm-packageorigin.patch \
>>    "
>>
>>    SRC_URI[md5sum] = "**60d56ace884340c1b3fcac6a1d58e7**68"
>>    --
>>    1.7.3.4
>>
>>
>>    ______________________________**_________________
>>    Openembedded-core mailing list
>>    Openembedded-core@lists.**openembedded.org<Openembedded-core@lists.openembedded.org>
>>    <mailto:Openembedded-core@**lists.openembedded.org<Openembedded-core@lists.openembedded.org>
>> >
>>    http://lists.linuxtogo.org/**cgi-bin/mailman/listinfo/**
>> openembedded-core<http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core>
>>
>>
>>
>>
>>
>> ______________________________**_________________
>> Openembedded-core mailing list
>> Openembedded-core@lists.**openembedded.org<Openembedded-core@lists.openembedded.org>
>> http://lists.linuxtogo.org/**cgi-bin/mailman/listinfo/**openembedded-core<http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core>
>>
>
>
> ______________________________**_________________
> Openembedded-core mailing list
> Openembedded-core@lists.**openembedded.org<Openembedded-core@lists.openembedded.org>
> http://lists.linuxtogo.org/**cgi-bin/mailman/listinfo/**openembedded-core<http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core>
>

Patch

diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index 35928ab..097fa12 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -130,12 +130,12 @@  resolve_package_rpm () {
 	shift
 	local pkg_name=""
 	for solve in `cat ${conffile}`; do
-		pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create nofsync" -q --yaml $@ | grep -i 'Packageorigin' | cut -d : -f 2)
-		if [ -n "$pkg_name" ]; then
+		pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create nofsync" -q --qf "%{packageorigin}\n" "$@" | grep -v "is not installed" || true)
+		if [ -n "$pkg_name" -a "$pkg_name" != "(none)" ]; then
+			echo $pkg_name
 			break;
 		fi
 	done
-	echo $pkg_name
 }
 
 # rpm common command and options
@@ -401,9 +401,9 @@  package_install_internal_rpm () {
 
 	# Now that we have a solution, pull out a list of what to install...
 	echo "Manifest: ${target_rootfs}/install/install.manifest"
-	${RPM} -D "_dbpath ${target_rootfs}/install" -qa --yaml \
+	${RPM} -D "_dbpath ${target_rootfs}/install" -qa --qf "%{packageorigin}\n" \
 		-D "__dbi_txn create nofsync private" \
-		| grep -i 'Packageorigin' | cut -d : -f 2 > ${target_rootfs}/install/install_solution.manifest
+		> ${target_rootfs}/install/install_solution.manifest
 
 	touch ${target_rootfs}/install/install_multilib_solution.manifest
 
@@ -421,9 +421,9 @@  package_install_internal_rpm () {
 
 		# Now that we have a solution, pull out a list of what to install...
 		echo "Manifest: ${target_rootfs}/install/install_multilib.manifest"
-		${RPM} -D "_dbpath ${target_rootfs}/install" -qa --yaml \
+		${RPM} -D "_dbpath ${target_rootfs}/install" -qa --qf "%{packageorigin}\n" \
 			-D "__dbi_txn create nofsync private" \
-			| grep -i 'Packageorigin' | cut -d : -f 2 > ${target_rootfs}/install/install_multilib_solution.manifest
+			> ${target_rootfs}/install/install_multilib_solution.manifest
 
 	fi
 
@@ -478,9 +478,9 @@  EOF
 			-U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \
 			${target_rootfs}/install/initial_install.manifest
 
-		${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --yaml \
+		${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --qf "%{packageorigin}\n" \
 			-D "__dbi_txn create nofsync private" \
-			| grep -i 'Packageorigin' | cut -d : -f 2 > ${target_rootfs}/install/initial_solution.manifest
+			> ${target_rootfs}/install/initial_solution.manifest
 
 		rpm_update_pkg ${target_rootfs}/install/initial_solution.manifest
 		
diff --git a/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch b/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch
new file mode 100644
index 0000000..3c6dad4
--- /dev/null
+++ b/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch
@@ -0,0 +1,23 @@ 
+Add the ability to query the packageorigin
+
+Written by jbj at rpm5.org
+
+Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
+
+Index: rpm-5.4.8/rpmdb/hdrfmt.c
+===================================================================
+--- rpm-5.4.8.orig/rpmdb/hdrfmt.c
++++ rpm-5.4.8/rpmdb/hdrfmt.c
+@@ -2403,8 +2403,10 @@ static int pkgoriginTag(Header h, HE_t 
+     int rc = 1;
+ 
+     he->tag = RPMTAG_PACKAGEORIGIN;
+-    if (!headerGet(h, he, HEADERGET_NOEXTENSION)
+-     && (origin = headerGetOrigin(h)) != NULL)
++    /* XXX two sources for tag data: what search precedence? */
++    if (headerGet(h, he, HEADERGET_NOEXTENSION))
++	rc = 0;
++    else if ((origin = headerGetOrigin(h)) != NULL)
+     {
+ 	he->t = RPM_STRING_TYPE;
+ 	he->p.str = xstrdup(origin);
diff --git a/meta/recipes-devtools/rpm/rpm_5.4.9.bb b/meta/recipes-devtools/rpm/rpm_5.4.9.bb
index 2ca0f58..a38a684 100644
--- a/meta/recipes-devtools/rpm/rpm_5.4.9.bb
+++ b/meta/recipes-devtools/rpm/rpm_5.4.9.bb
@@ -43,7 +43,7 @@  LICENSE = "LGPLv2.1"
 LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1"
 
 DEPENDS = "libpcre attr acl popt ossp-uuid file"
-PR = "r41"
+PR = "r42"
 
 # rpm2cpio is a shell script, which is part of the rpm src.rpm.  It is needed
 # in order to extract the distribution SRPM into a format we can extract...
@@ -70,6 +70,7 @@  SRC_URI = "http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.9-0.20120508.src.rpm;ex
 	   file://rpm-macros.patch \
 	   file://rpm-lua.patch \
 	   file://rpm-ossp-uuid.patch \
+	   file://rpm-packageorigin.patch \
 	  "
 
 SRC_URI[md5sum] = "60d56ace884340c1b3fcac6a1d58e768"