tech-pkg archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkg.refcount database as a flat file?



On Sun, Feb 12, 2017 at 04:17:59PM +0000, Taylor R Campbell wrote:
> > Date: Sat, 11 Feb 2017 17:31:11 +0000
> > From: "Johnny C. Lam" <jlam%NetBSD.org@localhost>
> > 
> > Over the years, has there been any discussion about changing the
> > refcount database from a directory tree under /var/db/pkg.refcount
> > to a text file, perhaps in structured format like JSON or a Lua
> > table?
> 
> I'd be more inclined to use a sqlite3 database -- for this and the
> rest of the pkgdb.
> 
> Atomic backup:  echo .backup /path/to/backup | sqlite3 /var/db/pkg.refcount
> Diff:  diff -u <(echo .dump | sqlite3 old) <(echo .dump | sqlite3 new)
> More advanced manipulation:  any SQL queries under the sun.
> 
> Updates become transactional, &c.  Can process with awk, e.g.:
> 
> echo 'select * from pkgrefcount' | sqlite3 | awk -F'|' ...
> 
> (This is subject to some constraints about the character `|', of
> course; can get quoted CSV with `.mode csv'.)

I've abstracted the refcount manipulations into shell functions to be
used by the install scripts so it will be easy to switch out refcount
implementations later.

> There is, of course, a problem of gracefully transitioning any changes
> to the file format in existing installations.

The transition would be as follows:

1. Update pkgtools/pkg_install to use the new implementation and then
   be able to generate on-the-fly the package-specific parts of
   /var/db/pkg.refcount for the package(s) given on the command line.

2. Change the INSTALL scripts generated in pkgsrc-current to the new
   implementation and bump PKGTOOLS_REQD in pkgsrc-current to the
   latest version.

3. Wait through two quarterly tags of pkgsrc.

4. Remove the old implementation from pkgtools/pkg_install. There is
   no need to bump PKGTOOLS_REQD in pkgsrc-current.

I plan on figuring out what refcount implementation to switch to
after my changes to mk/pkginstall are in pkgsrc-current.

-- Johnny C. Lam


Home | Main Index | Thread Index | Old Index