Or you can browse.

Matt's Blog

December 1, 2006
Posted by Matt Wilson
2:43 PM
Usage message of the day
$ rpm
RPM version 4.4.2
Copyright (C) 1998-2002 - Red Hat, Inc.
This program may be freely redistributed under the terms of the GNU GPL

Usage: rpm [-aKfgpWHqV] [-aKfgpWHqVcdils] [-aKfgpWHqVcdilsaKfgpWHqV]
[-aKfgpWHqVcdilsaKfgpWHqV] [-aKfgpWHqVcdilsaKfgpWHqV]
[-aKfgpWHqVcdilsaKfgpWHqVK] [-aKfgpWHqVcdilsaKfgpWHqVK]
[-aKfgpWHqVcdilsaKfgpWHqVKi] [-aKfgpWHqVcdilsaKfgpWHqVKiv]
[-aKfgpWHqVcdilsaKfgpWHqVKiv] [-aKfgpWHqVcdilsaKfgpWHqVKiv?]
[-a|--all] [-f|--file] [-g|--group]
        [-p|--package] [-W|--ftswalk] [--pkgid] [--hdrid] [--fileid]
        [--specfile] [--triggeredby] [--whatrequires] [--whatprovides]
        [--nomanifest] [-c|--configfiles] [-d|--docfiles] [--dump] [-l|--list]
        [--queryformat=QUERYFORMAT] [-s|--state] [--nomd5] [--nofiles]
        [--nodeps] [--noscript] [--comfollow] [--logical] [--nochdir]
        [--nostat] [--physical] [--seedot] [--xdev] [--whiteout]
        [--addsign] [-K|--checksig] [--delsign] [--import] [--resign]
        [--nodigest] [--nosignature] [--initdb] [--rebuilddb] [--aid]
        [--allfiles] [--allmatches] [--badreloc] [-e|--erase <package>+]
        [--excludedocs] [--excludepath=<path>] [--fileconflicts] [--force]
        [-F|--freshen <packagefile>+] [-h|--hash] [--ignorearch] [--ignoreos]
        [--ignoresize] [-i|--install] [--justdb] [--nodeps] [--nomd5]
        [--nocontexts] [--noorder] [--nosuggest] [--noscripts]
        [--notriggers] [--oldpackage] [--percent] [--prefix=<dir>]
        [--relocate=<old>=<new>] [--repackage] [--replacefiles]
        [--replacepkgs] [--test] [-U|--upgrade <packagefile>+]
        [-D|--define 'MACRO EXPR'] [-E|--eval 'EXPR'] [--macros=<FILE:...>]
        [--nodigest] [--nosignature] [--rcfile=<FILE:...>] [-r|--root ROOT]
        [--querytags] [--showrc] [--quiet] [-v|--verbose] [--version]
        [-?|--help] [--usage] [--scripts] [--setperms] [--setugids]
        [--conflicts] [--obsoletes] [--provides] [--requires] [--info]
        [--changelog] [--xml] [--triggers] [--last] [--filesbypkg]
        [--fileclass] [--filecolor] [--filecontext] [--fscontext]
        [--recontext] [--fileprovide] [--filerequire] [--redhatprovides]
        [--redhatrequires] [--buildpolicy=<policy>] [--with=<option>]
        [--without=<option>]

Let's compare to Conary:

$ conary
Conary Software Configuration Management System

Common Commands (use "conary help" for the full list)

Information Display
  config        Display the current configuration
  help          Display help information
  query/q       Query the local system database
  rblist        List the rollbacks available in the rollback stack
  repquery/rq   Query one or more Conary repositories
  showcs/scs    Display information about a changeset file
  verify        Verify software integrity on the system

Repository Access
  changeset/cs  Request a changeset from one or more Conary repositories
  commit        Commit a changeset to a Conary repository

System Modification
  emerge        Build software from source and install it on the system
  erase         Erase software from the system
  rollback      Roll back operations stored in the rollback stack
  update        Update or install software on the system
  updateall     Update all the software on the system
January 19, 2006
Posted by Matt Wilson
11:06 PM

We've hit a very exciting milestone in Conary development. The code has matured to the point of being largely feature complete. You might have noticed the rapid approach of a non-zero initial digit in Conary's version number. We just released 0.92 this week.

For the next few weeks, we're going to be working on stability and performance. The only significant outstanding issue is redirect handling.

Currently when you create a redirect in Conary, it's from one node in the tree to another node. We wanted to have the behavior to be explicit and versioned. It turns out that this is very inconvenient. Most of the time, you want a redirect to give you the latest version of the trove to which you're being redirected.
Of course, if there's some cool new feature you would like to contribute to Conary, we're still accepting patches. Development will continue in the HEAD Conary mercurial repository.

December 8, 2005
Posted by Matt Wilson
9:26 PM
Troubling build requirement trove info

Conary has awesome features. One of them records the versions of the software used to build packages. This information is stored in the binary package's TroveInfo object. With it, we can evaluate our exposure to bugs in compilers, libraries, and tools.

For some reason, we've found that system databases are recording these build requirements in components too. This is not good. It means that the entry for the Trove object in the system database doesn't match the Trove object in the repository. This wasn't a huge problem until we started adding digital signatures to the Trove object this week.

If your system is affected, you will see a TroveIntegrityError when attempting an update. To see if your system has build requirement trove info stored for a component, run:

sqlite3 /var/lib/conarydb/conarydb "select instances.trovename from troveinfo, instances where infotype in (4, 5) and instances.trovename like '%:%' and troveinfo.instanceid=instances.instanceid;"

I'm collecting information about the data that's stored in these invalid entries. If the above command produced a list of troves, please run:

sqlite3 /var/lib/conarydb/conarydb "select trovename,hex(data) from troveinfo, instances where infotype in (4, 5) and instances.trovename like '%:%' and troveinfo.instanceid=instances.instanceid;" > /tmp/out

and send the output in /tmp/out to msw AT rpath.com.

To clean up your database, run:

sqlite3 /var/lib/conarydb/conarydb "delete from troveinfo where infotype in (4, 5) and instanceid in (select instanceid from instances where trovename like '%:%');"
November 16, 2005
Posted by Matt Wilson
5:06 PM
Anaconda gets a band-aid

Some of the latest ISO images that were produced by rBuilder Online were behaving very strangely. Anaconda would install the non-SMP "kernel" package, but the SMP "kernel:runtime" component. I haven't had the time to track it down until today. The fix seems simple enough, but it took a lot of code tracing to develop it.

The package and group selection code in Anaconda is pretty awful. I used to understand, but then comps.xml appeared. Hopefully the new AnacondaBackend code will make it easy for me to ditch all the existing package selection code and use something that follows the Conary model.

November 10, 2005
Posted by Matt Wilson
2:28 PM

With the new Conary python module layout, you can now simplify your Apache configuration if you are running a repository server.

What used to be:
<Directory /path/to/conary-repository/config>
    PythonHandler apachehooks
    PythonPath "sys.path + [ '/usr/lib/python2.4/site-packages/conary',
                             '/usr/lib/python2.4/site-packages/conary/server' ]"
</Directory>

Is now simply:
<Directory /path/to/conary-repository/config>
    AddHandler python-program .cnr
    PythonHandler conary.server.apachehooks
</Directory>

Aaah, isn't that better?