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