xref: /plan9/sys/src/cmd/unix/9pfreebsd/README (revision 144145943e440fe30c4e4512a0856f5e3d5ca4be)
1*14414594SDavid du Colombier
2*14414594SDavid du ColombierThis package implements Plan 9's IL and 9fs client for FreeBSD 3.2.
3*14414594SDavid du Colombier
4*14414594SDavid du Colombier> Getting the software
5*14414594SDavid du Colombier
6*14414594SDavid du Colombier  9pfreebsd.tgz
7*14414594SDavid du Colombier
8*14414594SDavid du Colombier> Installation
9*14414594SDavid du Colombier
10*14414594SDavid du Colombier  0. unpack:
11*14414594SDavid du Colombier	mkdir ~/9pfreebsd
12*14414594SDavid du Colombier	cd ~/9pfreebsd
13*14414594SDavid du Colombier	zcat 9pfreebsd.tgz | tar -xf -
14*14414594SDavid du Colombier
15*14414594SDavid du Colombier     this creates the file freebsd-3.2.il-kernel.patch and the
16*14414594SDavid du Colombier     directory mount_9fs.
17*14414594SDavid du Colombier
18*14414594SDavid du Colombier  1. get a fresh copy of the kernel. for example:
19*14414594SDavid du Colombier	cp -r /usr/src/sys ~/9pfreebsd/freebsd-3.2
20*14414594SDavid du Colombier
21*14414594SDavid du Colombier  2. apply the patch:
22*14414594SDavid du Colombier	cd ~/9pfreebsd/freebsd-3.2
23*14414594SDavid du Colombier	patch -p0 < ../freebsd-3.2.il-kernel.patch
24*14414594SDavid du Colombier
25*14414594SDavid du Colombier  3. build a new kernel:
26*14414594SDavid du Colombier	cd ~/9pfreebsd/freebsd-3.2/i386/conf
27*14414594SDavid du Colombier	config IL
28*14414594SDavid du Colombier	cd ../../compile/IL; make depend; make
29*14414594SDavid du Colombier
30*14414594SDavid du Colombier  4. boot the new kernel:
31*14414594SDavid du Colombier	cp -p /kernel /kernel.good
32*14414594SDavid du Colombier	cp ~/9pfreebsd/freebsd-3.2/compile/IL/kernel /kernel
33*14414594SDavid du Colombier	reboot
34*14414594SDavid du Colombier
35*14414594SDavid du Colombier  5. build mount_9fs:
36*14414594SDavid du Colombier	cd ~/9pfreebsd; make
37*14414594SDavid du Colombier
38*14414594SDavid du Colombier> Using IL
39*14414594SDavid du Colombier
40*14414594SDavid du Colombier  1. connect via IL:
41*14414594SDavid du Colombier
42*14414594SDavid du Colombier	  if( (s = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_IL)) < 0 ) {
43*14414594SDavid du Colombier	    perror("socket");
44*14414594SDavid du Colombier	    exit(1);
45*14414594SDavid du Colombier	  }
46*14414594SDavid du Colombier
47*14414594SDavid du Colombier	  bzero(&sin, sizeof(sin));
48*14414594SDavid du Colombier	  sin.sin_family = AF_INET;
49*14414594SDavid du Colombier	  sin.sin_addr.s_addr = dest_addr;
50*14414594SDavid du Colombier	  sin.sin_port = htons(dest_port);
51*14414594SDavid du Colombier	  if( connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0 ) {
52*14414594SDavid du Colombier	    perror("connect");
53*14414594SDavid du Colombier	    exit(1);
54*14414594SDavid du Colombier	  }
55*14414594SDavid du Colombier
56*14414594SDavid du Colombier  2. listen via IL:
57*14414594SDavid du Colombier
58*14414594SDavid du Colombier	  if( (s = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_IL)) < 0 ) {
59*14414594SDavid du Colombier	    perror("socket");
60*14414594SDavid du Colombier	    exit(1);
61*14414594SDavid du Colombier	  }
62*14414594SDavid du Colombier
63*14414594SDavid du Colombier	  bzero(&sin, sizeof(sin));
64*14414594SDavid du Colombier	  sin.sin_family = AF_INET;
65*14414594SDavid du Colombier	  sin.sin_addr.s_addr = INADDR_ANY;
66*14414594SDavid du Colombier	  sin.sin_port = htons(port_number);
67*14414594SDavid du Colombier
68*14414594SDavid du Colombier	  if( bind(s, (struct sockaddr *)&sin, sizeof(sin)) < 0 ) {
69*14414594SDavid du Colombier	    perror("bind");
70*14414594SDavid du Colombier	    exit(1);
71*14414594SDavid du Colombier	  }
72*14414594SDavid du Colombier
73*14414594SDavid du Colombier	  if( listen(s, 5) < 0 ) {
74*14414594SDavid du Colombier	    perror("listen");
75*14414594SDavid du Colombier	    exit(1);
76*14414594SDavid du Colombier	  }
77*14414594SDavid du Colombier
78*14414594SDavid du Colombier	  len = sizeof(sin);
79*14414594SDavid du Colombier	  if ( (c = accept(s, (struct sockaddr *)& sin, &len)) < 0 ) {
80*14414594SDavid du Colombier	    perror("accept");
81*14414594SDavid du Colombier	    exit(1);
82*14414594SDavid du Colombier	  }
83*14414594SDavid du Colombier
84*14414594SDavid du Colombier
85*14414594SDavid du Colombier> Using 9fs
86*14414594SDavid du Colombier
87*14414594SDavid du Colombier  1. limitations:
88*14414594SDavid du Colombier
89*14414594SDavid du Colombier     The current implementation is mostly tested with a single user on
90*14414594SDavid du Colombier     the client. No one else can access the mounted file system except
91*14414594SDavid du Colombier     the authenticator. But two users can mount the same file system
92*14414594SDavid du Colombier     on the client with different nodes. This is not yet tested much.
93*14414594SDavid du Colombier
94*14414594SDavid du Colombier  2. mapping plan9 usernames to UNIX uids
95*14414594SDavid du Colombier
96*14414594SDavid du Colombier     Mount_9fs requires a translation between plan9 usernames and UNIX
97*14414594SDavid du Colombier     uids. /etc/9uid.conf contains the map. The format is:
98*14414594SDavid du Colombier
99*14414594SDavid du Colombier		plan9_username	unix_uid
100*14414594SDavid du Colombier
101*14414594SDavid du Colombier     Not all plan9 users have to have an UNIX account on the
102*14414594SDavid du Colombier     client. Just give them a unique uid which can be non-existent in
103*14414594SDavid du Colombier     /etc/passwd.
104*14414594SDavid du Colombier
105*14414594SDavid du Colombier  3. mounting 9fs:
106*14414594SDavid du Colombier
107*14414594SDavid du Colombier     To mount by a regular user, the root has to set vfs.usermount to 1
108*14414594SDavid du Colombier     first (sysctl -w vfs.usermount=1). Then follow the steps below.
109*14414594SDavid du Colombier
110*14414594SDavid du Colombier     To mount by root:
111*14414594SDavid du Colombier
112*14414594SDavid du Colombier	mount_9fs -u 9user@9auth_server 9fileserver:path node
113*14414594SDavid du Colombier
114*14414594SDavid du Colombier     This mounts "path" on 9fileserver on local "node" on behalf of
115*14414594SDavid du Colombier     "9user". Plan9 authentication server "9auth_server" is
116*14414594SDavid du Colombier     contacted to obtain a ticket.
117*14414594SDavid du Colombier
118*14414594SDavid du Colombier     mount_9fs will prompt for "9username"'s plan9 password.
119*14414594SDavid du Colombier
120*14414594SDavid du Colombier     umount works as usual.
121*14414594SDavid du Colombier
122*14414594SDavid du Colombier     Only the caller of mount_9fs has access to the mounted file system.
123*14414594SDavid du Colombier
124*14414594SDavid du Colombier  4. WARNING:
125*14414594SDavid du Colombier
126*14414594SDavid du Colombier     The password is stored in kernel memory and can be read via kmem.
127*14414594SDavid du Colombier
128*14414594SDavid du Colombier> Bugs and Fixes:
129*14414594SDavid du Colombier
130*14414594SDavid du Colombier  You are welcome to contact dong@research.bell-labs.com for bug
131*14414594SDavid du Colombier  reports and fixes.
132*14414594SDavid du Colombier
133*14414594SDavid du Colombier
134*14414594SDavid du Colombier
135