Annotation of researchv10dc/cmd/odist/outline, revision 1.1

1.1     ! root        1: 1.  intro:
        !             2:        talk about the source code problem, cascaded redistribution solution
        !             3:        implies that distribution scheme should be simple.  (rdist is hairy
        !             4:        and so is coda, because of exotic config file syntax.)
        !             5:        survey three existing systems: coda, rdist, ship.
        !             6:                taxonomy of existing systems:
        !             7:                        rdist: config file driven, server pushes
        !             8:                        ship: command driven, server pushes
        !             9:                        coda: config file driven, client calls
        !            10:                our system completes the square:
        !            11:                        dist: command driven, client calls
        !            12: 2.  can be divided into four phases:
        !            13:        build
        !            14:        package
        !            15:        transmit
        !            16:        install
        !            17:        heterogeneous networks solved by recursively applying this scheme
        !            18:        (actually 'recursively' isn't quite right: we need only one level of cascade
        !            19:        if all machines are on the same network.  multiple network types are also
        !            20:        solved by cascading, of course...)
        !            21:        notice that the 'package' and 'install' phases are coupled by a common
        !            22:        package file format, but the rest of the system is relatively decoupled.
        !            23: 3.  the build phase
        !            24:        there's lots of room here for variability, and the later phases
        !            25:        in order to support cascaded redistribution, this has to be fairly standard.
        !            26:        don't really care how things get built, so long as they get built!
        !            27:        we decided to support recompilation of C programs in a minimal ANSI
        !            28:        and POSIX.1 environment (with research extensions) to start with.
        !            29:        finally, we use 'mk' to recompile, with a few standard targets.
        !            30: 4.  the package phase
        !            31:        we use standard (Posix) tar files
        !            32:        finding existing Posix tar programs to be of questionable portability (GNU tar)
        !            33:        or gargantuan (Pax), we wrote a few commands for creating and manipulating
        !            34:        tar files (tarc, tarx, tarf)
        !            35:        we introduce a simple filter, "tarf", that allows us to transform path
        !            36:        names and user id's in the tar file in a uniform way.
        !            37:        all packages contain absolute path names for files to be installed;
        !            38:        non absolute path names are reserved for control files of the distribution
        !            39:        system (for example, the file 'distcmds', if present, contains commands to be
        !            40:        executed after the files are installed)
        !            41: 5.  the transmission phase
        !            42:        we operate on a variety of networks on a 'client calls' basis.
        !            43:        we do only hostname authentication on the server (although this could
        !            44:        be changed), and send all queued distributions at once; the client
        !            45:        then determines which distributions it will attempt to install, which
        !            46:        it will defer, and which it will reject.  (idea: should deferred
        !            47:        distributions go to a holding area on the client rather than continuing
        !            48:        to be held on the server--we could do this with 'dist localhost' and
        !            49:        hence supersede any previous version of the deferred distribution!!!)
        !            50:        security: since installation always procedes on the basis of whatever
        !            51:        user id is calling, we can ignore the issue of client security.
        !            52:        we regard this as a substantial advantage over 'server pushes' type
        !            53:        remote distribution systems.
        !            54:        there should be a notify mechanism, but it is not yet clear how it should
        !            55:        work.  i'll figure it out before i'm done.
        !            56:        on the client, we can check the plausibility of a given distribution
        !            57:        before installing it.  we use simple heuristics to do this rather than
        !            58:        trying to do a perfect job of predicting whether a given user will be
        !            59:        able to install a given distribution successfully.  if the heuristics
        !            60:        fail, then we report installation errors.
        !            61: 6.  the installation phase
        !            62:        installation proceeds in passes:
        !            63:        1.  a backup is made of all files to be clobbered by the distribution
        !            64:        2.  'remove' commands are executed.
        !            65:        3.  the distribution is installed.
        !            66:        4.  directory contents not clobbered by installing the new distribution
        !            67:        are clobbered.
        !            68:        5.  any associated cmd file is executed.
        !            69:        6.  the backup allows the distribution process to be unwound.  if there
        !            70:        are any failures.  if there are failures, report a failure transcript
        !            71:        to the server.
        !            72: 7.  more detailed comparison to existing systems
        !            73:        rdist, coda -- config files, "exception" files, how do i do that stuff
        !            74:        with 'dist'
        !            75:        improvements over Koenig's 'ship'
        !            76: 8.  some lessons learned:
        !            77:        if there is any one big lesson i learned (really, relearned) in developing
        !            78:        this system, it is that: there is a simpler way.
        !            79:        i started out initially to build a software distribution system;
        !            80:        i began by collecting wish lists from users.  this was obviously necessary,
        !            81:        but was also in some sense a mistake: the wish lists were a mile long!
        !            82:        had i implemented every user's wish list, the system would be a lot bigger,
        !            83:        a lot buggier, and a lot more incomprehensible.
        !            84:        now, it is possible to "build a software distribution system" in the
        !            85:        most direct brute force way, but it is much simpler to decompose the
        !            86:        problem into phases and consider them independently.
        !            87:        corollary: use existing mechanisms whenever possible.  for example,
        !            88:        (Posix) tar files for packages, existing network authentication mechanisms.
        !            89:        reinventing the wheel will only cause somebody else more grief later.
        !            90: 9.  acknowledgements and bibliography

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.