TODO
changeset 93 f173765f7623
parent 75 93278d8ec39c
child 97 41bf485e6154
     1.1 --- a/TODO	Thu Nov 08 17:14:19 2007 -0500
     1.2 +++ b/TODO	Tue Jan 08 12:55:34 2008 -0500
     1.3 @@ -1,10 +1,15 @@
     1.4  Towards replacing rpm + yum (0.1):
     1.5  
     1.6 -- installer part
     1.7 +- installer part:
     1.8  
     1.9 -- rpm file parser, create repo command
    1.10 +   - pre install check; check that dirs can be created (no files where
    1.11 +     want to create dirs), move config files according to file
    1.12 +     flags. (.rpmnew etc)
    1.13  
    1.14 -- conflicts, obsoletes
    1.15 +   - run hooks; probably fork to shell and in the parent just do a
    1.16 +     write() of the hook section to a pipe to the shell.
    1.17 +
    1.18 +   - store rpm headers for installed packages.
    1.19  
    1.20  - versions in depsolving
    1.21  
    1.22 @@ -25,17 +30,29 @@
    1.23  
    1.24  - version the sections in the file, put the element size in the header
    1.25    so we can add stuff to elements in a backwards compatible way.
    1.26 +  maybe not necessary, we can just add sections that augment the
    1.27 +  sections we want to add to (similar to how rpm has add versioned
    1.28 +  deps).
    1.29 +
    1.30 +- pipelined download and install; topo-sort packages in update set,
    1.31 +  pick one with all deps in the current set, add it to the current set
    1.32 +  and satisfy deps against update set => result: minimal update
    1.33 +  transaction.  Queue download and install/update transaction for the
    1.34 +  packages in the minimal set, start over.  This also makes the
    1.35 +  installation phase much more interruptible, basically just stop
    1.36 +  after a sub-transaction finishes.  As we keep the update set around
    1.37 +  as a target, we can restart if needed.  Probably don't need to, can
    1.38 +  just do a new update.  During a sub-transaction we should keep the
    1.39 +  target set (i.e. the current set to be) around as a lock file
    1.40 +  (system.repo.lock or so, see git) so that razor updates are
    1.41 +  prevented if the systems crashes during an update.
    1.42  
    1.43  Misc ideas:
    1.44  
    1.45 -- eliminate duplicate entries in package property lists.
    1.46 -
    1.47  - keep history of installed packages/journal of package transaction,
    1.48    so we can roll back to yesterday, or see what got installed in the
    1.49    latest yum update.
    1.50  
    1.51 -- gzip repository of look-aside pkg xml files somehow?
    1.52 -
    1.53  - transactions, proper recovery, make sure we don't poop our package
    1.54    database (no more rm /var/lib/rpm/__cache*).
    1.55  
    1.56 @@ -63,14 +80,6 @@
    1.57    conflicts, file/dir problems etc).  Or maybe just keep a simple file
    1.58    format ad use a custom importer to create the .repo files.
    1.59  
    1.60 -- pipelined download and install; download is network bound, install
    1.61 -  is disk bound.  Start installing once we have self-contained set of
    1.62 -  packages.  Install in reverse topo-sort order.  Interruptible
    1.63 -  installation; stops at nearest checkpoint.
    1.64 -
    1.65 -- split out hash table code from importer, make the merger use just
    1.66 -  the hash table.
    1.67 -
    1.68  - try to clean up the
    1.69  
    1.70  	do { ... } while (((e++)->name & RAZOR_ENTRY_LAST) == 0);
    1.71 @@ -90,9 +99,21 @@
    1.72    base.
    1.73  
    1.74  - incremental rawhide repo updates? instead of downloading 10MB zipped
    1.75 -  repo every time, download a diff repo?
    1.76 +  repo every time, download a diff repo?  Should be pretty small,
    1.77 +  especially if we don't have file checksums in metadata.  Filenames
    1.78 +  and properties are for the most part already present, typically just
    1.79 +  a version bump plus maybe tweaking a couple requires.  The upstream
    1.80 +  repo can store multiple incremental updates in one big file and
    1.81 +  provide an index file that maps updates for a given date (we should
    1.82 +  use repo-file checksums though) to a range in the file: Download the
    1.83 +  index file, search for a match for your latest rawhide.repo file,
    1.84 +  download range of updates that brings it up to date.
    1.85  
    1.86  - use hash tables for dirs when importing files to avoid qsorting all
    1.87    files in rawhide.
    1.88  
    1.89 +Bugs:
    1.90 +
    1.91 +- eliminate duplicate entries in package property lists.
    1.92 +
    1.93  - corner cases such as no files/properties in repo etc segfault.