[OE-core] [PATCH 4/9] package_rpm: Add capability to directly query packageorigin

Giuseppe Condorelli giuseppe.condorelli at gmail.com
Wed Jun 13 08:03:54 UTC 2012


Hi Mark,

many thanks for the explanation.

Cheers,
Giuseppe

2012/6/12 Mark Hatle <mark.hatle at 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 at windriver.com <mailto:
>> mark.hatle at windriver.**com <mark.hatle at 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 at windriver.com
>>    <mailto:mark.hatle at windriver.**com <mark.hatle at 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 at windriver.com
>>    <mailto:mark.hatle at windriver.**com <mark.hatle at 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 at lists.**openembedded.org<Openembedded-core at lists.openembedded.org>
>>    <mailto:Openembedded-core@**lists.openembedded.org<Openembedded-core at 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 at lists.**openembedded.org<Openembedded-core at 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 at lists.**openembedded.org<Openembedded-core at lists.openembedded.org>
> http://lists.linuxtogo.org/**cgi-bin/mailman/listinfo/**openembedded-core<http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20120613/18ee91dd/attachment-0002.html>


More information about the Openembedded-core mailing list