|
|
1.1 root 1: % $Id: examples.tex,v 5.2 90/06/23 22:21:57 jsp Rel $
2: %
3: % Copyright (c) 1989 Jan-Simon Pendry
4: % Copyright (c) 1989 Imperial College of Science, Technology & Medicine
5: % Copyright (c) 1989 The Regents of the University of California.
6: % All rights reserved.
7: %
8: % This code is derived from software contributed to Berkeley by
9: % Jan-Simon Pendry at Imperial College, London.
10: %
11: % Redistribution and use in source and binary forms are permitted provided
12: % that: (1) source distributions retain this entire copyright notice and
13: % comment, and (2) distributions including binaries display the following
14: % acknowledgement: ``This product includes software developed by the
15: % University of California, Berkeley and its contributors'' in the
16: % documentation or other materials provided with the distribution and in
17: % all advertising materials mentioning features or use of this software.
18: % Neither the name of the University nor the names of its contributors may
19: % be used to endorse or promote products derived from this software without
20: % specific prior written permission.
21: % THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
22: % WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
23: % MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
24: %
25: % @(#)examples.tex 5.1 (Berkeley) 7/19/90
26:
27:
28: \Chapter{Examples}
29:
30: \Section{Starting \Amd}
31: \Amd\ is best started from {\tt /etc/rc.local}:
32: \begin{verbatim}
33: if [ -f /usr/local/etc/amd.start ]; then
34: sh /usr/local/etc/amd.start; (echo -n ' amd') >/dev/console
35: fi
36: \end{verbatim}
37: The shell script, {\tt amd.start}, contains:
38: \begin{verbatim}
39: PATH=/usr/local/etc:/bin:/usr/bin:/usr/ucb:$PATH export PATH
40:
41: #
42: # Either name of logfile or "syslog"
43: #
44: LOGFILE=syslog
45: #LOGFILE=/var/adm/am.log
46:
47: #
48: # Figure out whether domain name is in host name
49: # If the hostname is just the machine name then
50: # pass in the name of the local domain so that the
51: # hostnames in the map are domain stripped correctly.
52: #
53: case `hostname` in
54: *.*) dmn= ;;
55: *) dmn='-d doc.ic.ac.uk'
56: esac
57:
58: #
59: # Zap earlier log file
60: #
61: case "$LOGFILE" in
62: */*)
63: mv "$LOGFILE" "$LOGFILE"-
64: > "$LOGFILE"
65: ;;
66: syslog)
67: : nothing
68: ;;
69: esac
70:
71: cd /usr/local/etc
72: #
73: # -r restart
74: # -d dmn local domain
75: # -w wait wait between unmount attempts
76: # -l log logfile or "syslog"
77: #
78: eval ./amd -r $dmn -w 240 -l "$LOGFILE" \
79: /homes amd.homes -cache:=inc \
80: /home amd.home -cache:=inc \
81: /vol amd.vol -cache:=inc \
82: /n amd.net -cache:=inc
83: \end{verbatim}
84:
85: If the list of automount points and maps is contained in a file or YP map
86: it is easily incorporated onto the command line:
87: \begin{verbatim}
88: ...
89: eval ./amd -r $dmn -w 240 -l "$LOGFILE" `ypcat -k auto.master`
90: \end{verbatim}
91:
92: \Section{User Filesystems}
93: With more than one fileserver, the directories most frequently
94: cross-mounted are those containing user home directories.
95: A common convention used at Imperial College is to mount
96: the user disks under {\tt /home/}{\em machine}.
97: Typically, the {\tt /etc/fstab} file\footnote{{\tt /etc/checklist}
98: on System V} contained a long list of entries
99: such as:
100: \begin{quote}
101: {\em machine}{\tt :/home/}{\em machine}\ \ \tt /home/{\em machine}\ nfs \ldots
102: \end{quote}
103: for each fileserver on the network.
104:
105: There are numerous problems with this system.
106: The mount list can become quite large and some of the machines
107: may be down when a system is booted.
108: When a new fileserver is installed, {\tt /etc/fstab} must be
109: updated on every machine, the mount directory created and
110: the filesystem mounted.
111: In research environments most
112: people use the same few workstations, but it is convenient to go
113: to a colleague's machine and access your own files.
114: When a server goes down, it can cause a process on a client machine to
115: hang. By minimising the mounted filesystems to only include those
116: actively being used, there is less chance that a filesystem will be mounted
117: when a server goes down.
118:
119: The following is a short extract from a map taken from a research fileserver
120: at Imperial College.
121: Note the entry for {\tt localhost} which is used for users such as
122: the operator ({\tt opr}) who have a home directory on most machine as
123: {\tt /home/localhost/opr}.
124: \begin{verbatim}
125: /defaults opts:=rw,intr,grpid,nosuid
126: charm host!=${key};type:=nfs;rhost:=${key};rfs:=/home/${key} \
127: host==${key};type:=ufs;dev:=/dev/xd0g
128: #
129: ...
130:
131: #
132: localhost type:=link;fs:=${host}
133: ...
134: #
135: # dylan has two user disks so have a
136: # top directory in which to mount them.
137: #
138: dylan type:=auto;fs:=${map};pref:=${key}/
139: #
140: dylan/dk2 host!=dylan;type:=nfs;rhost:=dylan;rfs:=/home/${key} \
141: host==dylan;type:=ufs;dev:=/dev/dsk/2s0
142: #
143: dylan/dk5 host!=dylan;type:=nfs;rhost:=dylan;rfs:=/home/${key} \
144: host==dylan;type:=ufs;dev:=/dev/dsk/5s0
145: ...
146: #
147: toytown host!=${key};type:=nfs;rhost:=${key};rfs:=/home/${key} \
148: host==${key};type:=ufs;dev:=/dev/xy1g
149: ...
150: #
151: zebedee host!=${key};type:=nfs;rhost:=${key};rfs:=/home/${key} \
152: host==${key};type:=ufs;dev:=/dev/dsk/1s0
153: #
154: # Just for access...
155: #
156: gould type:=auto;fs:=${map};pref:=${key}/
157: gould/staff host!=gould;type:=nfs;rhost:=gould;rfs:=/home/${key}
158: #
159: gummo host!=${key};type:=nfs;rhost:=${key};rfs:=/home/${key}
160: ...
161: \end{verbatim}
162:
163: This map is shared by most of the machines listed so on those
164: systems any of the user disks is accessible via a consistent name.
165: \Amd\ is started with the following command
166: \begin{quote}
167: \tt amd /home amd.home
168: \end{quote}
169:
170: Note that when mounting a remote filesystem, the {\em automounted}
171: mount point is referenced, so that the filesystem will be mounted if
172: it is not yet (at the time the remote mountd obtains the file handle).
173:
174: \Section{Home Directories}
175: One convention for home directories is to locate them in {\tt /homes} so
176: user {\tt jsp}'s home directory is {\tt /homes/jsp}.
177: With more than a single fileserver it is convenient
178: to spread user files across several machines.
179: All that is required is a mount-map
180: which converts login names to an automounted directory.
181:
182: Such a map might be started by the command:
183: \begin{quote}
184: \tt amd /homes amd.homes
185: \end{quote}
186: where the map {\tt amd.homes} contained the entries:
187: \begin{quote}\raggedright
188: \tt
189: /defaults\ \ \ type:=link\ \ \ \# All the entries are of type:=link \\
190: jsp\ \ \ \ \ \ \ \ \ fs:=/home/charm/jsp\\
191: njw\ \ \ \ \ \ \ \ \ fs:=/home/dylan/dk5/njw\\
192: ...\\
193: phjk\ \ \ \ \ \ \ \ fs:=/home/toytown/ai/phjk\\
194: sjv\ \ \ \ \ \ \ \ \ fs:=/home/ganymede/sjv
195: \end{quote}
196: Whenever a login name is accessed in {\tt /homes} a symbolic link
197: appears pointing to the real location of that user's home directory.
198: In this example, {\tt /homes/jsp} would appear to be a symbolic link
199: pointing to {\tt /home/charm/jsp}.
200: Of course, {\tt /home} would also be an automount point.
201:
202: This system causes an extra level of symbolic links to be used.
203: Although that turns out to be relatively inexpensive, an alternative is
204: to directly mount the required filesystems in the {\tt /homes}
205: map. The required map is simple, but long, and its creation best automated.
206: The entry for {\tt jsp} could be:
207: {\tt\begin{tabbing}
208: jsp\ \ \ \ \ \ \= -sublink:=\$\{key\};rfs:=/home/charm {\verb+\+}\kill \\
209: jsp \> -sublink:=\$\{key\};rfs:=/home/charm {\verb+\+}\\
210: \> host==charm;type:=ufs;dev:=/dev/xd0g {\verb+\+}\\
211: \> host!=charm;type:=nfs;rhost:=charm
212: \end{tabbing}}
213:
214: This map can become quite big if it contains a large number of
215: entries. By combining two other features of \amd\ it can be greatly
216: simplified. First the \UFS\ partitions should be mounted under the
217: control of {\tt /etc/fstab}, taking care that they are mounted in the
218: same place that \amd\ would have automounted them, {\ie\ {\tt /a/{\em host}/home/{\em host}}}.
219: In this case {\tt /etc/fstab} on host {\tt charm} would have a line
220: \begin{verbatim}
221: /dev/xy0g /a/charm/home/charm 4.2 rw,nosuid,grpid 1 5
222: \end{verbatim}
223: The map can then be changed to:
224: \begin{quote}\raggedright
225: \tt
226: /defaults\ \ \ \ type:=nfs;sublink:=\Var{key};opts:=rw,intr,nosuid,grpid\\
227: jsp\ \ \ \ \ \ \ \ \ \ rhost:=charm;rfs:=/home/charm\\
228: njw\ \ \ \ \ \ \ \ \ \ rhost:=dylan;rfs:=/home/dylan/dk5\\
229: ...\\
230: phjk\ \ \ \ \ \ \ \ \ rhost:=toytown;rfs:=/home/toytown;sublink:=ai/\Var{key}\\
231: sjv\ \ \ \ \ \ \ \ \ \ rhost:=ganymede;rfs:=/home/ganymede
232: \end{quote}
233:
234: This map operates as usual on a remote machine (ie \Var{host} $\not=$ \Var{rhost}).
235: On the machine where the filesystem is stored (ie \Var{host} $=$ \Var{rhost}),
236: \amd\ will construct a local filesystem mount point which corresponds to
237: the name of the locally mounted \UFS\ partition. If \amd\ is started
238: with the ``-r'' option then instead of attempting an \NFS\ mount, \amd\ will
239: simply inherit the \UFS\ mount (\see \Ref{ifs}).
240:
241: %\Section{System Filesystem}
242:
243: \Section{Architecture Sharing}
244: %At the moment some of the research machines have sets of software
245: %mounted in {\tt /vol}. This contains subdirectories for \TeX,
246: %system sources, local sources, prolog libraries and so on.
247: Often a filesystem will be shared by machines of different architectures.
248: Separate trees can be maintained for the executable images for each
249: architecture, but it may be more convenient to have a shared tree,
250: with distinct subdirectories.
251:
252: A shared tree might have the following structure on the fileserver (called
253: {\tt fserver} in the example):
254: \begin{quote}\raggedright
255: \tt
256: local/tex \\
257: local/tex/fonts \\
258: local/tex/lib \\
259: local/tex/bin \\
260: local/tex/bin/sun3 \\
261: local/tex/bin/sun4 \\
262: local/tex/bin/hp9000 \\
263: ...
264: \end{quote}
265: In this example, the subdirectories of {\tt local/tex/bin} should be
266: hidden when accessed via the automount point (conventionally {\tt /vol}).
267: A mount-map for {\tt /vol} to achieve this would look like:
268: {\tt\begin{tabbing}
269: tex/fonts\ \ \ \ \ \= \kill \\
270: /defaults \> rfs:=/vol;sublink:=\$\{key\};rhost:=fserver;type:=link\\
271: tex \> type:=auto;fs:=\$\{map\};pref:=\$\{key\}/\\
272: tex/fonts \> host!=fserver;type:=nfs\ {\verb+\+}\\
273: \> host==fserver;fs:=/usr/local \\
274: tex/lib \> host!=fserver;type:=nfs\ {\verb+\+}\\
275: \> host==fserver;fs:=/usr/local \\
276: tex/bin \> -sublink:=\$\{key\}/\$\{arch\} host!=fserver;type:=nfs\ {\verb+\+}\\
277: \> host:=fserver;fs:=/usr/local
278: \end{tabbing}}
279: When {\tt /vol/tex/bin} is referenced, the current machine architecture
280: is automatically appended to the path by the \Var{sublink} variable.
281: This means that users can have {\tt /vol/tex/bin} in their {\tt PATH}
282: without concern for architecture dependencies.
283:
284: \Section{Wildcard names \& Replicated Servers}
285: By using the wildcard facility, \amd\ can {\em overlay} an existing
286: directory with additional entries.
287: The system files are usually mounted under {\tt /usr}. If instead
288: \amd\ is mounted on {\tt /usr}, additional
289: names can be overlayed to augment or replace names in the ``master'' {\tt /usr}.
290: A map to do this would have the form:
291: {\tt\begin{tabbing}
292: local\ \ \ \ \ \= blah \kill \\
293: local \> type:=auto;fs:=local-map\\
294: share \> type:=auto;fs:=share-map\\
295: {}* \> -type:=nfs;rfs:=/export/exec/\$\{arch\};sublink:="\$\{key\}"\ \verb+\+\\
296: \> \ \ \ \ rhost:=fserv1\ \ rhost:=fserv2\ \ rhost:=fserv3 \\
297: \end{tabbing}}
298: Note that the assignment to \Var{sublink} is surrounded by double quotes to
299: prevent the incoming key from causing the map to be misinterpreted.
300: This map has the effect of directing any access to {\tt /usr/local} or {\tt /usr/share}
301: to another automount point.
302: In this example, it is assumed that the {\tt /usr} files are replicated on
303: three fileservers: {\tt fserv1}, {\tt fserv2} and {\tt fserv3}.
304: For any references other than to {\tt local}
305: and {\tt share} one of the servers is used and a symbolic link to
306: {\tt \Var{autodir}/\Var{rhost}/export/exec/\Var{arch}/}{\em whatever}
307: is returned once an appropriate filesystem has been mounted.
308:
309: \Section{{\tt rwho} servers\label{example:rwho}}
310:
311: The {\tt /usr/spool/rwho} directory is a good candidate for automounting.
312: For efficiency reasons it is best to capture the rwho data on a small
313: number of machines and then mount that information onto a large number
314: of clients. The data written into the rwho files is byte order dependent
315: so only servers with the correct byte ordering can be used by a client:
316: {\tt\begin{tabbing}
317: usr/spool/rwho\ \ \ \ \ \= blah \kill \\
318: /defaults \> type:=nfs \\
319: usr/spool/rwho \> -byte==little;rfs:=/usr/spool/rwho \verb+\+\\
320: \>\ \ \ \ rhost:=vaxA\ \ rhost:=vaxB \verb+\+\\
321: \>|| -rfs:=/usr/spool/rwho \verb+\+\\
322: \>\ \ \ \ rhost:=sun4\ \ rhost:=hp300\\
323: \end{tabbing}}
324:
325: \Section{{\tt /vol}}
326: {\tt /vol} is used as a catch-all for volumes which do not have other conventional names.
327:
328: Below is part of the {\tt /vol} map for the domain {\tt doc.ic.ac.uk}.
329: The {\tt r+d} tree is used for new or experimental software that needs to be
330: available everywhere without installing it on all the fileservers. Users wishing to
331: try out the new software then simply include {\tt /vol/r+d/{bin,ucb}} in their path.
332:
333: The main tree resides on one host {\tt gould.doc.ic.ac.uk}, which has different
334: {\tt bin}, {\tt etc}, {\tt lib} and {\tt ucb} sub-directories for each machine
335: architecture. For example, {\tt /vol/r+d/bin} for a Sun-4 would be stored in
336: the sub-directory {\tt bin/sun4} of the filesystem {\tt /usr/r+d}. When it was
337: accessed a symbolic link pointing to {\tt /a/gould/usr/r+d/bin/sun4} would be
338: returned.
339:
340: \begin{verbatim}
341: /defaults type:=nfs;opts:=rw,grpid,nosuid,intr,soft
342: wp -opts:=rw,grpid,nosuid;rhost:=charm \
343: host==charm;type:=link;fs:=/usr/local/wp \
344: host!=charm;type:=nfs;rfs:=/vol/wp
345: ...
346: #
347: src -opts:=rw,grpid,nosuid;rhost:=charm \
348: host==charm;type:=link;fs:=/usr/src \
349: host!=charm;type:=nfs;rfs:=/vol/src
350: #
351: r+d type:=auto;fs:=${map};pref:=r+d/
352: # per architecture bin,etc,lib&ucb...
353: r+d/bin rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}/${arch}
354: r+d/etc rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}/${arch}
355: r+d/include rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}
356: r+d/lib rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}/${arch}
357: r+d/man rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}
358: r+d/src rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}
359: r+d/ucb rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}/${arch}
360: # hades pictures
361: pictures -opts:=rw,grpid,nosuid;rhost:=thpfs \
362: host==thpfs;type:=link;fs:=/nbsd/pictures \
363: host!=thpfs;type:=nfs;rfs:=/nbsd;sublink:=pictures
364: # hades tools
365: hades -opts:=rw,grpid,nosuid;rhost:=thpfs \
366: host==thpfs;type:=link;fs:=/nbsd/hades \
367: host!=thpfs;type:=nfs;rfs:=/nbsd;sublink:=hades
368: # bsd tools for hp.
369: bsd -opts:=rw,grpid,nosuid;arch==hp9000;rhost:=thpfs \
370: host==thpfs;type:=link;fs:=/nbsd/bsd \
371: host!=thpfs;type:=nfs;rfs:=/nbsd;sublink:=bsd
372: \end{verbatim}
373:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.