|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.