From: Ed Bartosh <ed.bartosh@linux.intel.com>
To: Mark Hatle <mark.hatle@windriver.com>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH] rootfs.py: Remove rpm database from staging area
Date: Tue, 31 Mar 2015 01:47:32 +0300 [thread overview]
Message-ID: <20150330224732.GA27217@linux.intel.com> (raw)
In-Reply-To: <5519685C.6000703@windriver.com>
On Mon, Mar 30, 2015 at 10:14:36AM -0500, Mark Hatle wrote:
> On 3/30/15 3:53 AM, Richard Purdie wrote:
> > On Mon, 2015-03-30 at 11:30 +0300, Ed Bartosh wrote:
> >> Rpm database in staging area is used only by createrepo.
> >> createrepo fails with the error
> >> "rpmdb: BDB0060 PANIC: fatal region error detected"
> >> if rpm database is broken from the previous run of createrepo.
> >>
> >> Removing the databae before running createrepo can hopefully
> >> prevent this failure to happen.
> >>
> >> [YOCTO #6571]
> >>
> >> Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
> >> ---
> >> meta/lib/oe/rootfs.py | 3 +++
> >> 1 file changed, 3 insertions(+)
> >>
> >> diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py
> >> index 4e4e6eb..9f7dc65 100644
> >> --- a/meta/lib/oe/rootfs.py
> >> +++ b/meta/lib/oe/rootfs.py
> >> @@ -306,6 +306,9 @@ class RpmRootfs(Rootfs):
> >> bb.utils.remove(self.image_rootfs, True)
> >> else:
> >> self.pm.recovery_packaging_data()
> >> + dbpath = os.path.join(self.d.getVar('STAGING_DIR_NATIVE', True),
> >> + 'var/lib/rpm/*')
> >> + bb.utils.remove(dbpath, recurse=True)
> >> bb.utils.remove(self.d.getVar('MULTILIB_TEMP_ROOTFS', True), True)
> >>
> >> self.pm.crea
> >
> > This patch helps me see the problem a lot. I'd never realised there was
> > an rpm database in the native sysroot that was getting corrupted, I'd
> > always assumed it was the target rootfs one.
> >
> > I'm a little worried about what happens if you have multiple images
> > generating at the same time as this change as above may delete something
> > being worked on by another process.
> >
> > I'm wondering why is it getting into the sysroot at all? Rather than
> > delete it here, could we either not generate it at all, or place it
> > somewhere in WORKDIR (so that other tasks can't see it or race against
> > it)?
>
> I did some quick looking. It appears (at least on first glance) that the call to:
>
> rpm.TransactionSet()
>
> is what is opening the DB. It appears to me that we can change the call
> slightly, and it should do what is being requested:
>
> { "TransactionSet", (PyCFunction) rpmts_Create, METH_VARARGS|METH_KEYWORDS,
> "rpm.TransactionSet([rootDir, [db]]) -> ts\n\
> - Create a transaction set.\n" },
>
> So transaction set takes two arguments, the rootDir of the thing we're working
> against, and a DB path. It -should- be as simply as setting a rootDir to the
> WORKDIR. If that doesn't work, then both arguments will be needed.
>
> I'd suggest just adding a "--root" option to genpkgmetadata.py in the
> createrepo, and maybe a "--dbpath" option as well (second argument). Then only
> call the function with their values IF they were defined. I.e.
>
> if root:
> if dbpath:
> self.ts = rpm.TransactionSet(root, dbpath)
> else:
> self.ts = rpm.TransactionSet(root)
> else:
> self.ts = rpm.TransactionSet()
>
> (If there is a better way to do that in python, fine.. but passing in "None" or
> "" won't result in the desired behavior.. since RPM is actually parsing
> arguments and appears like it will use the values if passed in, whatever they are.)
>
Second parameter is not a path. Integer is required there, so I guess it's a db mode something like that.
Defining _dbpath macro looks better from my point of view as it allows to specify full path to the db directory.
Regards,
Ed
next prev parent reply other threads:[~2015-03-30 22:47 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-30 8:30 [PATCH] rootfs.py: Remove rpm database from staging area Ed Bartosh
2015-03-30 8:53 ` Richard Purdie
2015-03-30 14:56 ` Mark Hatle
2015-03-30 15:14 ` Mark Hatle
2015-03-30 19:00 ` Ed Bartosh
2015-03-30 19:22 ` Mark Hatle
2015-03-30 22:47 ` Ed Bartosh [this message]
2015-03-30 23:49 ` [PATCH] createrepo: Implement --dbpath command line option Ed Bartosh
2015-03-31 0:16 ` [PATCH] package_manager: call createrepo with --dbpath pointing inside WORKDIR Ed Bartosh
2015-03-31 12:06 ` Richard Purdie
2015-03-31 16:09 ` Mark Hatle
2015-04-01 11:17 ` Ed Bartosh
2015-03-31 21:25 ` [PATCH] createrepo: Implement --dbpath command line option Burton, Ross
2015-04-01 11:19 ` Ed Bartosh
2015-04-01 12:06 ` Ed Bartosh
2015-04-01 12:12 ` Ed Bartosh
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=20150330224732.GA27217@linux.intel.com \
--to=ed.bartosh@linux.intel.com \
--cc=mark.hatle@windriver.com \
--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