1 |
#@+leo-ver=4 |
2 |
#@+node:@file README |
3 |
#@@language |
4 |
|
5 |
Refer to the INSTALL file for build/install instructions |
6 |
|
7 |
General Information |
8 |
=================== |
9 |
|
10 |
This is a Python[1] interface to FUSE[2]. |
11 |
|
12 |
FUSE (Filesystem in USErspace) is a simple interface for userspace |
13 |
programs to export a virtual filesystem to the linux kernel. FUSE |
14 |
also aims to provide a secure method for non privileged users to |
15 |
create and mount their own filesystem implementations. |
16 |
|
17 |
When run from the commandline, "fuse.py" simply reexports the root |
18 |
filesystem within the mount point as example/fusexmp does in the main |
19 |
FUSE distribution. It also offers a class, fuse.Fuse, which can be |
20 |
subclassed to create a filesystem. fuse.Xmp is the example filesystem |
21 |
implementation. |
22 |
|
23 |
In your subclass of fuse, add attributes with the expected names |
24 |
("getattr", "readlink", etc) and call signatures (refer to fuse.Xmp) |
25 |
then call main(). Make it runnable as a #! script, and mount with |
26 |
fusermount <mount point> <script name> |
27 |
for some reason, |
28 |
fusermount <mount point> python <script name> |
29 |
does not seem to work. (why?) |
30 |
|
31 |
Update |
32 |
====== |
33 |
|
34 |
Updated 13-Dec-2003 by David McNab <david@rebirthing.co.nz> |
35 |
|
36 |
- changed Makefile to use Pyton distutils |
37 |
- added setup.py for distutils |
38 |
|
39 |
- added 'code.leo' file for convenience of those who use the Leo |
40 |
code editor (leo.sf.net) |
41 |
|
42 |
- added support for 'statfs' and 'fsync' methods (refer xmp.py) |
43 |
|
44 |
Updated Dec 2003 by David McNab <david@rebirthing.co.nz>: |
45 |
|
46 |
- added support for 'release' events (ie when file gets closed) |
47 |
- added __init__ to base class, which picks off parameters and |
48 |
stores them as instance attributes: |
49 |
- self.mountpoint - the mountpoint as given in the mount command |
50 |
- self.optlist - unnamed options (eg 'rw', 'exec' etc) |
51 |
- self.optdict - named options (eg, '-o arg1=val1,arg2=val2...' from mount cmd) |
52 |
- fixed incompatibility issues with recent pythons (original was broken |
53 |
under python2.3) |
54 |
|
55 |
Limitations |
56 |
=========== |
57 |
|
58 |
This is minimally tested, though I think I have exercised each function. |
59 |
There's no documentation, docstrings, or tests. |
60 |
|
61 |
Python's lstat() does not return some fields which must be filled in |
62 |
(st_blksize, st_blocks, st_ino), and _fusemodule assumes that the return |
63 |
value from the lstat() method is identical to Python's lstat(). This |
64 |
limitation should be lifted, and some standard order chosen for these |
65 |
three values. For now, though, default values are chosen and du returns a |
66 |
number similar to the "real" one. |
67 |
|
68 |
The Python Global Interpreter Lock is not handled, so using |
69 |
fuse.MULTITHREAD will not work. Modifying the PROLOGUE and EPILOGUE |
70 |
functions may take care of this. For now, just run without |
71 |
fuse.MULTITHREAD in flags. |
72 |
|
73 |
Author |
74 |
====== |
75 |
|
76 |
I'm Jeff Epler <jepler@unpythonic.dhs.org>. I've been dabbling in |
77 |
Python for nearly 7 years now, and interested (despite the lack of a |
78 |
real practical use) in userspace filesystems ever since I couldn't get |
79 |
userfs to compile way back in '93 or so. FUSE is cool, but i'm still |
80 |
not sure what it's good for in practical terms. |
81 |
|
82 |
I don't know how high a level of interest I'll maintain in this project, |
83 |
so if you want to do something with it feel free to do so. Like FUSE, |
84 |
this software is distributed under the terms of the GNU General Public |
85 |
License, Version 2. Future versions, if any, will be available at [3]. |
86 |
|
87 |
|
88 |
[1] http://www.python.org |
89 |
[2] http://sourceforge.net/projects/avf/ |
90 |
[3] http://unpythonic.dhs.org/~jepler/fuse/ |
91 |
#@-node:@file README |
92 |
#@-leo |