OpenBSD-4.6/usr.sbin/afs/src/milko/README
Milko ($arla: README,v 1.29 2001/04/28 12:54:41 lha Exp $)
=====
Note:
milko is still highly experimental, and is neither stable nor
full-featured.
* Parts
fs - FileServer
vldb - Volume Location DataBase-server
pts - ProTection-Server
appl/sked - maintaining volumes the hard way
lib/dpart - partition parsing and handling
lib/mdir - directory handling (unused ?)
lib/svol -
lib/vld - volume,voldb<->afs interfrace.
This would also be the place where to
add caching of ``vnodes'', manybe fbuf's too.
contains the simple (stupid) volume
and ro-volume.
lib/voldb - file and directory vnode db.
There is today one backend of voldb: vdb_flat
vdb_flat is a flat-db to store inodes. Not very
smart, but should be efficent enough.
lib/vstatus - the volume-node
* Installation
1. Create a /vicepa in whatever way
2. CellServDB and ThisCell
Add your cell to $PREFIX/etc/CellServDB and make it the default
cell by adding to to $PREFIX/etc/ThisCell.
3. If you have Kerberos (you really should have, because it is not
tested without).
This text assumes kth-krb.
[If you want support for another kerberos, modify/add apropriate text]
Get a srvtab for afs@YOUR.REALM, or if you want to use a "subcell"
use afs.your.subcell@YOUR.REALM, where your.subcell is the instance.
I you don't already have one, ksrvutil will create a principal
afs@YOUR.REALM for you. Put the srvtab i $PREFIX/etc/srvtab
(really $sysconfdir). Note the empty string '' when you input the
Kerberos instance below.
datan:~$ /usr/athena/sbin/ksrvutil -p lha.admin -f /usr/arla/etc/srvtab get
Name [rcmd]: afs
Instance [datan]: ''
Realm [MY.REALM]:
Is this correct? (y,n) [y]:
Add more keys (y,n) [n]:
Password for lha.admin@MY.REALM:
Added afs@MY.REALM
Old keyfile in /usr/arla/etc/srvtab.old.
Verify that you got you principal right
datan:~$ ksrvutil -f /usr/arla/etc/srvtab list
Version Principal
2 afs@MY.REALM
Add your "afs admin instance" to the $PREFIX/etc/superuserlist
file. This can be whatever you like, but has been in most cases
.admin (or .root depending on local religion).
Get your "afs admin instance".
datan:~$ kauth lha.root
lha.root@MY.REALM's Password:
Verify that you get an afs token
datan:~$ afslog -c my.cell
datan:~$ klist -v
Ticket file: /tmp/tkt0
Principal: lha@MY.REALM
Issued Expires Principal (kvno)
May 25 03:07:02 May 25 13:07:02 krbtgt.MY.REALM@MY.REALM (1)
May 25 03:06:49 May 25 13:06:49 afs@MY.REALM (2)
Note that the ``afs'' key also can be named ``afs.my.cell''.
Its imperative that the key versions (kvno) match up.
4. Start vldb-server.
It will NOT create a databasefile (vl_database) if missing.
The first time you have to run the vldbserver with -create
as an argument.
datan:~/obj/arla/milko/vldb# gdb -q vldbserver
(gdb) r
Starting program: /home/lha/obj/milko/vldb/vldbserver
Milko vldbserver 0.26 started
The vldbserver can be used with -noauth for testing purposes.
5. Add root.afs to vldb
You have to use arla's vos.
datan:~$ vos createentry -id root.afs -host myhost \
-fsserver myhost -part /vicepa -rw 3
If you use afs.my.cell@MY.REALM (not afs@MY.REALM), you
have to add ``-cell my.cell'' to the above command line.
6. Create volume root.afs on disk
datan:~obj/milko/appl/sked# ./sked volcreate /vicepa 3 root.afs
volume 3 created successfully
7. Start ptserver
datan:~obj/milko/fs# gdb -q ptserver
(gdb) r
Starting program: /home/lha/obj/milko/pts/ptserver
If you need to initialize the pts database, use ptserver -create.
8. Start fileserver
datan:~obj/milko/fs# gdb -q fileserver
(gdb) r
Starting program: /home/lha/obj/milko/fs/fileserver
fileserver booting
fileserver started, serving data
Handy args which can be given to fileserver (check with
fileserver --help):
--noauth (for testing)
--log=file (instead of logging to syslog)
--debug=all|errors|warnings|voldb|vld|salvage|fs
--cell=cellname
9. bosserver
After running make install you can use $PREFIX/libexec/bosserver
to start both the vlserver, ptserver and fileserver.
10. run-tests
Run run-tests in tests/, WORKDIR=/afs ./run-tests -milko -all
11. Now what ?
Find bugs, and report them to <arla-drinkers@stacken.kth.se>.
* Profiling
If you want profiling information, add -pg (gcc) to CFLAGS, LDFLAGS and
recompile.
When you feel you're done, send the fileserver a USR1 and look for the
gprof.out in /vicepa.
* Advice
Documentation how things works is included in the sourcecode.
There should be a notice in the top (after the copyright blub)
that will give you a general idea what the module (should) do.
Each function should be documented in the comment above the function,
where each argument is described. Any simple/complex/no-trivial
locking event should be documented.
If you see any assert()s in the top of the function (just after
the local variables) they are PART OF the documentation. See
example [1] below. This makes it easier to find interface
changes and other brainlossage.
If you find something that is undocumented, write documentation!
If you find documentation that is invalid, rewrite!
I'm told the documentation in c-code isn't enough. Guess there
should be a greater plan.
[1]
Here is an example that the function foo() requires that bar
is set. It isn't written in the comment field, instead
its checked runtime.
int
foo (int *bar)
{
int baz;
assert (bar);
return 0;
}