Matt's Blog
$ 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
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.
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 '%:%');"
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.
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?