public
Description: I really should know better.
Homepage:
Clone URL: git://github.com/krh/razor.git
jbowes (author)
Wed Jul 09 05:16:08 -0700 2008
Kristian Høgsberg (committer)
Wed Jul 09 07:11:13 -0700 2008
commit  bad9d8fd033c8f2bf5c08436a16442783a3d8549
tree    b106416c15c2882dd30344d5f44a8a9df6d1ff3d
parent  48047240d3157ef9f8525ccd9d5c2342eb10abc6
razor /
name age message
file .gitignore Wed Jun 25 18:11:33 -0700 2008 Update gitignore files for docs and test-driver [jbowes]
file AUTHORS Mon Jun 16 12:40:30 -0700 2008 Autoconfify razor. [Richard Hughes]
file COPYING Wed Apr 09 18:14:36 -0700 2008 Add GPLv2 license headers. Make it all GPLv2 f... [Kristian Høgsberg]
file Makefile.am Mon Jun 16 12:40:30 -0700 2008 Autoconfify razor. [Richard Hughes]
file NEWS Mon Jun 16 12:40:30 -0700 2008 Autoconfify razor. [Richard Hughes]
file README Tue Oct 23 21:50:29 -0700 2007 Add README and add primary.xml.gz to .gitignore. [Kristian Høgsberg]
file TODO Wed Jul 09 07:11:13 -0700 2008 Use strings to identify section types in the on... [jbowes]
file autogen.sh Mon Jun 23 10:54:56 -0700 2008 Set up gtkdoc for razor. Despite its name, gtk... [Kristian Høgsberg]
file configure.ac Sat Jun 28 15:33:15 -0700 2008 Revert "Get api docs building" Pass --enable-g... [Kristian Høgsberg]
directory contrib/ Mon Jun 23 14:41:10 -0700 2008 Fix configure.ac version, remove /usr/bin/rpm w... [Richard Hughes]
directory data/ Wed Jul 02 10:46:47 -0700 2008 rename the .repo files to .rzdb files [Richard Hughes]
directory docs/ Wed Jul 02 11:39:44 -0700 2008 Rename a couple more .repo references. [Kristian Høgsberg]
directory librazor/ Wed Jul 09 07:11:13 -0700 2008 Use strings to identify section types in the on... [jbowes]
directory po/ Mon Jun 16 12:40:30 -0700 2008 Autoconfify razor. [Richard Hughes]
directory src/ Tue Jul 08 19:57:34 -0700 2008 Convert main.c to use razor_root for most cases... [Kristian Høgsberg]
README
Just random notes at this point:

 - Razor is a package management system replacing rpm and yum.  Razor
   implements management of packages installed on the system,
   dependency solving, and upgrading in a small compact code base with
   minimal dependencies.

 - Key points: one file format for package sets, specified and
   implemented by razor; no point in splitting dep-solver and package
   manager, there is too much implementation overlap.  By hand coding
   the on-disk format we have a solid foundation on which to
   implementing fast dependency solving, error recovery etc.  No
   complex dependencies in package management stack.  In other words,
   package management is *simple*, no need to overdesign it.

 - Use one simple file format as the core of the system.  The razor
   package set data structure represents a set of packages and is used
   for the current installed set, the sets available from upstream
   sources, and the set currently being install during a transaction.
   Tiered systems such as rpm+yum, deb+apt etc end up duplicating and
   reimplementing common operations on packages.  Other systems
   typically pull in external database libraries to manage the package
   meta data and in some cases each layer in the stack uses a
   different database dependency to represent essentially the same
   data.

 - Using external database libraries may seem a good idea up front,
   but monotone vs git is a good example of how you need to control
   the data structure and the on-disk format to really get excellent
   performance.  The razor package set data structure is fairly
   simple; it's an read-only, mmap()'able on-disk data structure.  The
   package set has a sorted index of the packages in the set, a sorted
   index of all dependencies and a sorted, compact directory of all
   files in all the packages.  Operations such as merging package
   sets, satisfying requires from one set against another can all be
   implemented in linear time.  Razor implements the package set
   representation down to the bytes on the disk and can optimize the
   representation and access methods to make the necessary operations
   fast and reliable.

 - The set of installed packages on a system is represented by just
   one package set file.  As we install a set of new packages, we
   prepare the new package set a temporary file and once the install
   has succeeded, we copy the package set file to the real filename.
   If there is a system crash, razor will notice the temporary file on
   boot and resume the update.  

 - We want to keep the numer of dependencies down in a system critical
   component such as the package manager.  Between rpm and yum we're
   pulling in berkeley db, sqlite, expat, python.

 - During update of several packages rpm+yum leaves the system in an
   inconsistent state for long periods of time.  Power failure in this
   window causes critical system corruption.  We want to minimize the
   window.