[OE-core] [PATCH 1/1] package_manager.py: delete RPM db locks after calling rpmresolve

Mark Hatle mark.hatle at windriver.com
Thu Mar 27 16:34:49 UTC 2014


On 3/27/14, 11:18 AM, Laurentiu Palcu wrote:
> If the locks are not removed, the output of the next rpm command
> executed will contain the following string:
>
> rpmdb: BDB1540 configured environment flags incompatible with
> existing environment

This usually means that RPM was not called with the same environment, or 
different version of RPM (or BerkleyDB) were used in the call.

We need to verify that the rpmresolve was using the proper (oe-built) version of 
RPM, librpm, python-rpm and not the host's version.

Assuming this is true, then I believe the change is safe.  Otherwise, we need to 
fix rpmresolve to use the correct set of libraries.

--Mark

> And this will create various parsing issues.
>
> [YOCTO #6049]
>
> Signed-off-by: Laurentiu Palcu <laurentiu.palcu at intel.com>
> ---
>   meta/lib/oe/package_manager.py |   12 +++++++++---
>   1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
> index 764ab72..0f22e46 100644
> --- a/meta/lib/oe/package_manager.py
> +++ b/meta/lib/oe/package_manager.py
> @@ -242,6 +242,12 @@ class RpmPkgsList(PkgsList):
>           self.ml_prefix_list, self.ml_os_list = \
>               RpmIndexer(d, rootfs_dir).get_ml_prefix_and_os_list(arch_var, os_var)
>
> +    def _unlock_rpm_db(self):
> +        # Remove rpm db lock files
> +        rpm_db_locks = glob.glob('%s/var/lib/rpm/__db.*' % self.rootfs_dir)
> +        for f in rpm_db_locks:
> +            bb.utils.remove(f, True)
> +
>       '''
>       Translate the RPM/Smart format names to the OE multilib format names
>       '''
> @@ -281,6 +287,8 @@ class RpmPkgsList(PkgsList):
>
>           try:
>               output = subprocess.check_output(cmd, stderr=subprocess.STDOUT).strip()
> +
> +            self._unlock_rpm_db()
>           except subprocess.CalledProcessError as e:
>               bb.fatal("Cannot get the package dependencies. Command '%s' "
>                        "returned %d:\n%s" % (' '.join(cmd), e.returncode, e.output))
> @@ -299,9 +307,7 @@ class RpmPkgsList(PkgsList):
>               # bb.note(cmd)
>               tmp_output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True).strip()
>
> -            rpm_db_locks = glob.glob('%s/var/lib/rpm/__db.*' % self.rootfs_dir)
> -            for f in rpm_db_locks:
> -                bb.utils.remove(f, True)
> +            self._unlock_rpm_db()
>           except subprocess.CalledProcessError as e:
>               bb.fatal("Cannot get the installed packages list. Command '%s' "
>                        "returned %d:\n%s" % (cmd, e.returncode, e.output))
>




More information about the Openembedded-core mailing list