redbo / cloudfuse

Filesystem (fuse) implemented on Mosso's Cloud Files
http://redbo.github.com/cloudfuse/
MIT License
391 stars 114 forks source link

Cloudfuse is a FUSE application which provides access to Rackspace's Cloud Files (or any installation of Swift).

Cloud Files is a remote storage system which is similar in principle to Amazon S3. It provides a simple RESTful interface to storing and retrieving objects.

http://www.rackspace.com/cloud/files/

Swift, the software behind Cloud Files, has been open-sourced as part of the OpenStack project.

http://swift.openstack.org/

BUILDING:

You'll need libcurl, fuse, libssl, and libxml2 (and probably their dev
packages) installed to build it.  From a base Debian or Ubuntu install,
this should get you to a point you can build and run it:
    apt-get install build-essential libcurl4-openssl-dev libxml2-dev \
         libssl-dev libfuse-dev libjson-c-dev

For CentOS or similar,
    yum install gcc make fuse-devel curl-devel libxml2-devel openssl-devel

Cloudfuse is built and installed like any other autoconf configured code.
Normally,
    ./configure
    make
    sudo make install

But I'm no autoconf wizard, and there may be dragons lurking there.

USE:

You'll need to install fuse to use this application. It may have already
been installed as a dependency if you followed the "BUILDING" instructions
above.

On Debian:
   apt-get install fuse

On CentOS or similar:
   yum install fuse

The following settings can be defined in the file ~/.cloudfuse:
    username=[Account username for authentication, required]
    api_key=[API key for authentication with Rackspace]
    tenant=[Tenant name for authentication with Openstack]
    password=[Authentication password with Openstack]
    authurl=[Authentication url, defaults to Rackspace's cloud]
    region=[Regional endpoint to use]
    use_snet=[True to use Rackspace ServiceNet for connections]
    cache_timeout=[Seconds for directory caching, default 600]
    verify_ssl=[False to disable SSL cert verification]

For authenticating with Rackspace's cloud, at minimum "username" and
"api_key" must be set.

For authenticating with Keystone, "username", "password", "tenant", and
"authurl" should probably be defined.

These settings can also be specified as mount options on the command line:
    cloudfuse -o username=redbo,api_key=713aa... mountpoint/

Or as mount options in /etc/fstab:
    cloudfuse /mnt/cloudfiles fuse username=redbo,api_key=713aa...,user 0 0

It also inherits a number of command-line arguments and mount options from
the Fuse framework.  The "-h" argument should provide a summary.

EXAMPLE:

A typical ~/.cloudfuse configuration file for use with Rackspace:
    username=demo
    api_key=643afce8b5187d40ba15e4827384fc5b

    # if no region is selected, it will use your default region.
    #   region=DFW

    # if connecting within a Rackspace datacenter, ServiceNet can be
    # used to avoid bandwidth charges.
    #   use_snet=true

A typical ~/.cloudfuse configuration file for use with OpenStack,
noting that "tenant" should be the tenant name, rather than the ID:
    username=demo
    tenant=demo
    password=supersecret
    authurl=http://10.10.0.1:5000/v2.0

DEBUGGING: Cloudfuse may demonstrate the following symptoms:

BUGS/SHORTCOMINGS:

* rename() doesn't work on directories (and probably never will).
* When reading and writing files, it buffers them in a local temp file.
* It keeps an in-memory cache of the directory structure, so it may not be
  usable for large file systems.  Also, files added by other applications
  will not show up until the cache expires.
* The root directory can only contain directories, as these are mapped to
  containers in cloudfiles.
* Directory entries are created as empty files with the content-type
  "application/directory".
* Cloud Files limits container and object listings to 10,000 items.
  cloudfuse won't list more than that many files in a single directory.

AWESOME CONTRIBUTORS:

* Tim Dysinger                                 https://github.com/dysinger
* Chris Wedgwood                               https://github.com/cwedgwood
* Nick Craig-Wood                              https://github.com/ncw
* Dillon Amburgey                              https://github.com/dillona
* Manfred Touron                               https://github.com/moul
* David Brownlee                               https://github.com/abs0
* Mike Lundy                                   https://github.com/novas0x2a
* justinb                                      https://github.com/justinsb

Thanks, and I hope you find it useful.

Michael Barton mike@weirdlooking.com