Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 13 May 2015 00:12:51 -0500
From:      Scott Bennett <bennett@sdf.org>
To:        freebsd-ports@freebsd.org, bsd-lists@bsdforge.com
Subject:   Re: damage to pkg's sqlite data base
Message-ID:  <201505130512.t4D5Cpqa011080@sdf.org>
In-Reply-To: <0dcbdcb9fdfdebc53a2563b11494f61b@ultimatedns.net>
References:  <201505120617.t4C6HkA3019096@sdf.org> <0dcbdcb9fdfdebc53a2563b11494f61b@ultimatedns.net>

next in thread | previous in thread | raw e-mail | index | archive | help
"Chris H" <bsd-lists@bsdforge.com> wrote:

> On Tue, 12 May 2015 01:17:46 -0500 Scott Bennett <bennett@sdf.org> wrote
>
> > For nearly two weeks I've been stymied by an apparently damaged record
> > in the sqlite data base used by pkg(8) and pkg-static(8).  Unfortunately,
> > it is a record for a port that is depended upon rather heavily, lang/gcc.
> > lang/gcc compiled and linked just fine, but any attempt to install the result
> > ends up like this.
> > 
> > ===>  Checking if gcc already installed
> > ===>   Registering installation for gcc-4.8.4_3
> > Installing gcc-4.8.4_3...
> > pkg-static: sqlite error while executing iterator in file
> > pkgdb_iterator.c:931: database disk image is malformed pkg-static: sqlite
> > error while executing INSERT OR REPLACE INTO files (path, sha256, package_id)
> > VALUES (?1, ?2, ?3) in file pkgdb.c:1722: database disk image is malformed
> > *** Error code 70
> > 
> > Stop.
> > make: stopped in /usr/ports/lang/gcc
> > 
> >      I'm not familiar with sqlite commands, nor with the structure of the
> > pkg data base, nor any of several other relevant topics.  But I do have
> > questions:
> > 
> >     1) how might the damage have happened?
> > 
> >     2) how might such an event be avoided/prevented in the future?
> > 
> >     3) most urgently, how can I *fix* it?
> You should get a backup made on the nightly cron(8) (periodic(8)).
> It'll be located in /var/backups
> Off the top of my head I can't remember which of the 2, is which.
> But a simple size comparison should tell the tale. :)

     The problem began much farther back than two days ago, but I should
be able to restore it from two weeks or more in the past and then find
the most recent version that is not corrupted.

> Simply rename your (now) corrupt db, and copy the backup over.

     However, if I do that, then what happens to all the ports that have
been updated or added since that version of the data base was backed up?
I have run "portmaster -a" (with some additional options) quite a few
times since the lang/gcc problem first appeared, so an old local.sqlite
will no longer accurately reflect what is currently installed.
>
> I ran into this problem as well, and this was how I was finally
> able to overcome it.
>
> Hope this helps!
>
> --Chris
>
> > 
> >     4) I was unable to find any instructions for recreating a pkg data
> >     base if the data base gets damaged/destroyed.  Is there a way to
> >     do that that I missed?

     There must be a way to do this, right?  I mean, really, it's pretty
fundamental that no new data base be put into production without a way to
rebuild it.  The FreeBSD developers haven't really broken so ancient and
basic a principle, have they?  So what's the trick?  What is the method
to rebuild /var/db/pkg/local.sqlite from scratch based upon the currently
installed ports/packages?


                                  Scott Bennett, Comm. ASMELG, CFIAG
**********************************************************************
* Internet:   bennett at sdf.org   *xor*   bennett at freeshell.org  *
*--------------------------------------------------------------------*
* "A well regulated and disciplined militia, is at all times a good  *
* objection to the introduction of that bane of all free governments *
* -- a standing army."                                               *
*    -- Gov. John Hancock, New York Journal, 28 January 1790         *
**********************************************************************



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201505130512.t4D5Cpqa011080>