|
|
1.1 ! root 1: This is the source to various network file system pieces. ! 2: There are protocol-specific parts (interface libraries and support ! 3: programs), and there are servers. ! 4: ! 5: serv/* are server sources. In principal, they may be compiled ! 6: with any protocol library; in practice, serv/makefile uses -lnetb, ! 7: so by default the servers speak that protocol. ! 8: Some of the servers are ! 9: zarf present the local file system ! 10: ffs interpret a 4BSD file system ! 11: f6 interpret a Fifth or Sixth Edition Unix file system ! 12: f7 interpret a Seventh Edition Unix file system ! 13: d7 interpret a Seventh Edition dump tape (present as a file system) ! 14: f11 interpret a DEC FILES-11 ODS 1 version 2 file system ! 15: All but zarf are read-only file systems for now. ! 16: Only zarf is known to be portable; some of the others were written as ! 17: quick hacks, and need some tidying up. ! 18: ! 19: libnetb/* makes /usr/lib/libnetb.a, the protocol library for ! 20: netb (the Research Unix file system protocol). There are two ! 21: ancillary programs: runfs starts a server by hand, mounted ! 22: on some local file and connected through a pipe; setup is the ! 23: daemon that maintains a handful of file systems, restarting them ! 24: when they break. Both runfs and setup are specific to Research ! 25: Unix; the library is meant to run anywhere. ! 26: ! 27: Some of the files in libnetb aren't really netb-specific. Some ! 28: day, when there are more protocols supported, there will be a ! 29: separate directory with the protocol-independent parts, and life ! 30: will be considerably more confusing. ! 31: ! 32: Here are some hints on making things work on a new system: ! 33: ! 34: Bring along libnetb/*.[ch] libnetb/makefile serv/*.[ch] serv/makefile ! 35: (You probably don't want all the servers; to take just the ordinary ! 36: file system server, bring zarf.c except.c *dir.c zarf.h) ! 37: Deposit them somewhere in directories libnetb and serv. ! 38: serv/makefile and the server programs expect to find <rf.h> in /usr/include ! 39: and libnetb in /usr/lib. If you aren't planning to install them there, ! 40: add -I../libnetb to CFLAGS in serv/makefile, and change L from -lnetb ! 41: to ../libnetb/libnetb.a (or wherever you put those files). ! 42: You probably also want to edit serv/makefile to make only zarf, ! 43: and libnetb/makefile to make only libnetb.a; deleting the `all' ! 44: lines should suffice. ! 45: ! 46: Whenever possible, adjust things by changing the makefile to use different ! 47: source files, rather than by editing the sources themselves. There are ! 48: almost no #ifdefs in the programs, and even those shouldn't be. Generally ! 49: there are different source files containing routines that vary among systems: ! 50: a couple of directory-reading routines, for example. ! 51: ! 52: You should have to adjust two particular things (and no others, I hope): ! 53: The routine that reads directories, and the routine that determines who called. ! 54: The former is mandatory; the latter can be put off unless you grant different ! 55: rights to different clients. ! 56: ! 57: Directories: ! 58: As shipped, zarf reads directories using a research-specific system ! 59: call; this probably isn't what you want. To use the standard `portable' ! 60: directory-reading routines, change resdir.o to libdir.o in serv/makefile. ! 61: If you're on a 4BSD system, you probably want bsdlibdir.o instead, which ! 62: differs only in a couple of names. If the directory routines are in a ! 63: separate library, add the library to the line that makes zarf. ! 64: ! 65: If you think (or measure) that the library routines are too slow, write ! 66: your own, but it probably isn't worth the bother. ! 67: ! 68: Who called: ! 69: As shipped, libnetb uses a routine that cracks one of a couple of ! 70: environment variables set up by present and historic research connection ! 71: servers and Datakit managers. zarf cares who called so it can print it ! 72: in the logfile, and to compare with entries in the except file. If you ! 73: don't care, leave it be; at worst it will leave the caller's name empty. ! 74: If you do care, edit libnetb/makefile as follows: ! 75: ! 76: If you're on a 4BSD-socket-like system, use bsdwhocalled.o and bsdgetpeer.o ! 77: instead of reswhocalled.o and callsource.o. ! 78: ! 79: If you're on a system with 4BSD sockets for TCP/IP and the research connection ! 80: server for Datakit, use mixwhocalled.o instead of reswhocalled.o, keep ! 81: callsource.o, and add bsdwhocalled.o. ! 82: ! 83: Certain System-V-with-Berkeley-extensions systems have sockets but put ! 84: Berkeley headers and libraries in funny places. If bsdgetpeer.c won't ! 85: compile, add -I/usr/include/bsd (or whatever) to CFLAGS in the makefile; ! 86: if zarf won't load because getpeername is missing, add -lbsd (or whatever) ! 87: to the makefile line that makes zarf. ! 88: ! 89: Miscellany: ! 90: If the target system doesn't have makedir and rmdir system calls, add ! 91: makedir.o to the line that makes zarf in serv/makefile. ! 92: If the C library on the target doesn't have strchr and strrchr, it ! 93: probably has index and rindex instead; add `-Dstrchr=index -Dstrrchr=rindex' ! 94: to CFLAGS in both makefiles. ! 95: ! 96: There is one #if hack: on 64-bit machines, the size of a file is often ! 97: 64 bits long, but the netb protocol only allows 32-bit sizes. There is ! 98: a little compensating code in libnetb/funcs.c. ! 99: ! 100: ! 101: Once you have all the makefiles right, ! 102: cd libnetb; make ! 103: cd ../serv; make zarf ! 104: ! 105: Unlike earlier programs of the same name, zarf has no built-in filenames. ! 106: It prints logging info on the standard error file; it expects arguments ! 107: of the form `-e except' to point it at the except file. Arrange for ! 108: network calls to invoke zarf with output redirected and with the appropriate ! 109: arguments. If necessary, write a shell script, or perhaps a tiny C program, ! 110: that does the setup. On research machines there is a shell script; see ! 111: serv/zarf.go. Edit it to your taste. ! 112: ! 113: For zarf to offer full permissions to the client, it must run as the super- ! 114: user. It is probably a bad idea to make it set-userid to root; use network ! 115: services instead. On TCP/IP server machines, the preferred way is to put ! 116: zarf.go in a known place, and arrange for TCP port 400 to invoke zarf.go ! 117: as the super-user, e.g. with the following line in /etc/inetd.conf: ! 118: zarf stream tcp nowait root /usr/netb/zarf.go /usr/netb/zarf.go
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.