TODO
author Kristian H?gsberg <krh@jiraiya.boston.redhat.com>
Wed Apr 09 02:41:03 2008 -0400 (2008-04-09)
changeset 211 cf0ca962262b
parent 189 4b7eca63fb6d
child 213 8f8b782b7a0e
permissions -rw-r--r--
Use the cpio headers instead of the rpm headers when unpacking.

The files in the cpio payload doesn't actually follow the file order
in the rpm headers, so we need to decode the cpio header and use the
information there.
krh@65
     1
Towards replacing rpm + yum (0.1):
krh@65
     2
krh@82
     3
- installer part:
krh@65
     4
krh@82
     5
   - pre install check; check that dirs can be created (no files where
krh@82
     6
     want to create dirs), move config files according to file
krh@82
     7
     flags. (.rpmnew etc)
krh@65
     8
krh@82
     9
   - store rpm headers for installed packages.
krh@65
    10
krh@189
    11
- rpm seems to consider glibc > 2.6.90 to mean greater than
krh@189
    12
  2.6.90-anything.  That is, a comparison that doesn't mention the
krh@189
    13
  release field, shouldn't regard the release field of pkgs it
krh@189
    14
  compares against.  glibc-common-2.6.90 has
krh@189
    15
krh@189
    16
	conflicts: glibc < 2.6.90, glibc > 2.6.90
krh@189
    17
krh@189
    18
  since rpm doesn't let you do glibc != 2.6.90, and
krh@189
    19
krh@189
    20
	requires: glibc = 2.6.90
krh@189
    21
krh@189
    22
  will always pull in glibc.  But even with a != relation, would
krh@189
    23
  glibc-2.6.90-16 be equal to 2.6.90?  glibc 2.7.90-8 dropped it in
krh@189
    24
  favor of requires = 2.7.90-8 (#225806).
krh@189
    25
krh@65
    26
- signed packages
krh@65
    27
krh@65
    28
- figure out how to canonically represent empty string... ~0?
krh@65
    29
krh@70
    30
- space calculation before transaction, but ideally, do a number of
krh@70
    31
  smaller transactions.
krh@70
    32
krh@70
    33
- pre-link changing binaries and libs on disk screwing up checksum?
krh@70
    34
danw@180
    35
- nail down byte-order of repo file.
krh@74
    36
krh@74
    37
- version the sections in the file, put the element size in the header
krh@74
    38
  so we can add stuff to elements in a backwards compatible way.
krh@82
    39
  maybe not necessary, we can just add sections that augment the
krh@82
    40
  sections we want to add to (similar to how rpm has add versioned
krh@82
    41
  deps).
krh@82
    42
krh@82
    43
- pipelined download and install; topo-sort packages in update set,
krh@82
    44
  pick one with all deps in the current set, add it to the current set
krh@82
    45
  and satisfy deps against update set => result: minimal update
krh@82
    46
  transaction.  Queue download and install/update transaction for the
krh@82
    47
  packages in the minimal set, start over.  This also makes the
krh@82
    48
  installation phase much more interruptible, basically just stop
krh@82
    49
  after a sub-transaction finishes.  As we keep the update set around
krh@82
    50
  as a target, we can restart if needed.  Probably don't need to, can
krh@82
    51
  just do a new update.  During a sub-transaction we should keep the
krh@82
    52
  target set (i.e. the current set to be) around as a lock file
krh@82
    53
  (system.repo.lock or so, see git) so that razor updates are
krh@82
    54
  prevented if the systems crashes during an update.
krh@74
    55
krh@65
    56
Misc ideas:
krh@65
    57
krh@1
    58
- keep history of installed packages/journal of package transaction,
krh@1
    59
  so we can roll back to yesterday, or see what got installed in the
krh@1
    60
  latest yum update.
krh@1
    61
krh@8
    62
- transactions, proper recovery, make sure we don't poop our package
krh@8
    63
  database (no more rm /var/lib/rpm/__cache*).
krh@8
    64
krh@18
    65
- use hash table for package and property lists so we only store
krh@18
    66
  unique lists (like for string pool).
krh@40
    67
krh@40
    68
- use existing, running system as repo; eg
krh@40
    69
krh@40
    70
	razor update razor://other-box.local evince
krh@40
    71
krh@40
    72
  to pull eg the latest evince and dependencies from another box.  We
krh@40
    73
  should be able to regenerate a rzr pkg from the system so we can
krh@40
    74
  reuse the signature from the originating repo.
krh@41
    75
krh@41
    76
- Ok, maybe the fastest package set merge method in the end is to use
krh@41
    77
  the razor_importer, but use a hash table for the properties.  This
krh@41
    78
  way we can assign them unique IDs immediately (like tokenizing
krh@41
    79
  strings).
krh@47
    80
krh@47
    81
- test suite should be easy, just keep .repo files around and test
krh@47
    82
  different type of upgrades that way (obsoletes, conflicts, file
krh@47
    83
  conflicts, file/dir problems etc).  Or maybe just keep a simple file
krh@47
    84
  format ad use a custom importer to create the .repo files.
krh@47
    85
krh@56
    86
- try to clean up the
krh@56
    87
krh@56
    88
	do { ... } while (((e++)->name & RAZOR_ENTRY_LAST) == 0);
krh@56
    89
krh@56
    90
  idiom for iteration of directories.
krh@63
    91
krh@63
    92
- overlay package sets?  mount a read-only /usr over nfs or from the
krh@63
    93
  virt-host and have a local package set overlaid over the read-only
krh@63
    94
  one.  shouldn't need new features in the core package set data
krh@63
    95
  structure, but should be just conventions on top.  we have the base
krh@63
    96
  package set from the r/o system, the overlay set from the local
krh@63
    97
  system and we can have an effective package set which is the merge
krh@63
    98
  of everything from the overlay into the base set.  the effective set
krh@63
    99
  is easy to compute and we could do it on the fly or cache it.  or
krh@63
   100
  maybe the effective set is the on-disk representation and the
krh@63
   101
  overlay can be computed when needed, we just keep a link back to the
krh@63
   102
  base.
krh@71
   103
krh@71
   104
- incremental rawhide repo updates? instead of downloading 10MB zipped
krh@82
   105
  repo every time, download a diff repo?  Should be pretty small,
krh@82
   106
  especially if we don't have file checksums in metadata.  Filenames
krh@82
   107
  and properties are for the most part already present, typically just
krh@82
   108
  a version bump plus maybe tweaking a couple requires.  The upstream
krh@82
   109
  repo can store multiple incremental updates in one big file and
krh@82
   110
  provide an index file that maps updates for a given date (we should
krh@82
   111
  use repo-file checksums though) to a range in the file: Download the
krh@82
   112
  index file, search for a match for your latest rawhide.repo file,
krh@82
   113
  download range of updates that brings it up to date.
krh@74
   114
krh@74
   115
- use hash tables for dirs when importing files to avoid qsorting all
krh@74
   116
  files in rawhide.
krh@75
   117
krh@82
   118
Bugs:
krh@82
   119
krh@82
   120
- eliminate duplicate entries in package property lists.