GithubHelp home page GithubHelp logo

kiwiroy / perl-fuse Goto Github PK

View Code? Open in Web Editor NEW

This project forked from dpavlin/perl-fuse

0.0 2.0 0.0 388 KB

write filesystems in Perl using FUSE

Home Page: http://search.cpan.org/dist/Fuse/

Perl 6 27.90% XS 52.62% Perl 19.47%

perl-fuse's Introduction

Fuse perl bindings
==================

Fuse is combination of Linux kernel module and user space library which
enables you to write user-space filesystems. This module enables you to
write filesystems using perl.

Additional file-systems using Fuse module are released on CPAN using Fuse::
namespace. Currently that includes only Fuse::DBI which allows you to mount
database as file system, but there will be more.

This is a pre-production release.  It seems to work quite well.  In fact, I
can't find any problems with it whatsoever.  If you do, I want to know.

INSTALLATION

To install this module type the standard commands as root:

   perl Makefile.PL
   make
   make test
   make install


DEPENDENCIES

This module requires the FUSE C library and the FUSE kernel module.
See http://fuse.sourceforge.net/

If you intend to use FUSE in threaded mode, you need a version of Perl which
has been compiled with USE_ITHREADS.  Then, you need to use threads and
threads::shared.


COPYRIGHT AND LICENCE

This is contributed to the FUSE project by Mark Glines <[email protected]>,
and is therefore subject to the same license and copyright as FUSE itself.
Please see the AUTHORS and COPYING files from the FUSE distribution for
more information.


EXAMPLES

There are a few example scripts.  You can find them in the examples/
subdirectory.  These are:

* example.pl, a simple "Hello world" type of script

* loopback.pl, a filesystem loopback-device.  like fusexmp from
               the main FUSE dist, it simply recurses file operations
               into the real filesystem.  Unlike fusexmp, it only
               re-shares files under the /tmp/test directory.

* rmount.pl, an NFS-workalike which tunnels through SSH.  It requires
             an account on some ssh server (obviously), with public-key
             authentication enabled.  (if you have to type in a password,
             you don't have this.  man ssh_keygen.).  Copy rmount_remote.pl
             to your home directory on the remote machine, and create a
             subdir somewhere, and then run it like:
             ./rmount.pl host /remote/dir /local/dir

* rmount_remote.pl, a ripoff of loopback.pl meant to be used as a backend
                    for rmount.pl.


BUGS

Currently tests have been attempted and succeeded on:
  * Ubuntu 13.04/amd64
  * Fedora 19/amd64
  * CentOS 6.4/amd64
  * CentOS 5.9/amd64
  * CentOS 5.9/i386
  * OpenSuSE 12.3/amd64
  * Debian 7.1/powerpc
  * Slackware 13.1/amd64
  * NetBSD 6.1.1/amd64
  * FreeBSD 9.1/amd64
  * MacOS X 10.6.8 [OSXFUSE 2.6.1]
  * MacOS X 10.7.5 [OSXFUSE 2.6.1]


NOTES FOR BSD USERS

On NetBSD, there is a potential issue with readdir() only being called
once when using librefuse. However, currently using Perfuse causes other
issues (readlink() drops the last character from the read link path, and
the block count in stat() is incorrect). We will be addressing these
concerns with the appropriate developers in the near future.

If you are using Perfuse on NetBSD, you should do the following (as root):

cat >> /etc/sysctl.conf <<_EOT_
kern.sbmax=2621440
net.inet.tcp.sendbuf_max=2621440
net.inet6.tcp6.sendbuf_max=2621440
_EOT_
sysctl -f /etc/sysctl.conf

Perfuse uses TCP sockets, and needs large send buffers.

On NetBSD and FreeBSD, extended attributes do not work. These are
specifically related to the FUSE implementations on those platforms.

Normally you can not mount FUSE filesystems as non-root users on FreeBSD
and NetBSD. They can allow non-root users to mount FUSE filesystems, but
instead of changing the mode of /dev/fuse or /bin/fusermount, you need
to use sysctl to allow user mounts. For FreeBSD, this involves (as root):

sysctl -w vfs.usermount=1
pw usermod <your username here> -G operator

And on NetBSD (also as root):

sysctl -w vfs.generic.usermount=1
chmod 0660 /dev/putter
usermod -G wheel <your username here>


NOTES FOR OPENBSD IN PARTICULAR

Oh, hello. You're an OpenBSD user. You like your secure, minimalist OS, but
you really want in on that FUSE-y goodness. Well, it still has some known
issues, but yes, FUSE has actually made its way onto OpenBSD.

As of this writing, OpenBSD 5.5 has been released, which includes a
BSD-licensed reimplementation of libfuse, and their own fuse kernel
driver. It is available at better OpenBSD mirrors everywhere.

Keep in mind that if you want thread support (some Fuse filesystems do
require it), the Perl build in OpenBSD 5.5 base does *not* support threads.
Assuming you're not an OpenBSD ninja (or completely insane), I don't
recommend trying to build your own and install it over the system Perl,
because that can have bad repercussions. Use perlbrew if you want a
threaded Perl; you should run:

  perlbrew install perl-<version> -Dusethreads \
    --as perl-<version>_WITH_THREADS

if you're into that sort of thing.

For the tests, I recommend installing devel/p5-Lchown,
devel/p5-Filesys-Statvfs, devel/p5-Unix-Mknod and devel/p5-Test-Pod from
OpenBSD ports. (Or use the 'cpan' command from your Perlbrew-installed
version to install those modules, if you want thread support like I was
talking about above.)

Now, in your perl-fuse distribution, run:

perl Makefile.PL
make

You'll probably need to 'make test' as root. If you want to run your FUSE
filesystem as non-root, run the following (as root):

sysctl kern.usermount=1
chmod 0660 /dev/fuse0

Now, you should be able to run 'make test'. Yes, there are a few test
failures. No, those actually aren't our fault. Here are some things
you should know about the state of FUSE on OpenBSD (the developer,
Sylvestre Gallon, has been made aware of these):

 * There is a bug if a file is created in the fuse filesystem and goes
   away, then you create another file of the same name via FUSE and
   try to do utime(). Not sure if it's just utime() or if other things
   trip it too, but I discovered that via playing around. I *THINK*
   it's a vnode caching problem.
 * There is also a known issue with access() if all parent directories
   of a path haven't been explicitly accessed first.
 * There is a known issue with readdir() when supplying numbered dirents
   to support progressive readdir().
 * You should probably implement all of chown(), chmod(), truncate(), and
   utime() and/or utimens(). The kernel driver will mask out future
   setattr() requests if it gets ENOSYS from ANY of these. Oops.

Anyway, happy FUSEing!

perl-fuse's People

Contributors

demonfoo avatar dpavlin avatar frett avatar isync avatar alpha-60 avatar cyga avatar crucially avatar bastien-roucaries avatar gerph avatar ktdreyer avatar linuxmercedes avatar szmi avatar neilb avatar toots avatar kost avatar

Watchers

Roy Storey avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.