Contents |
This article shows how to mount Cloud Files as a directory on an Ubuntu 10.10 Cloud Server using CloudFuse software. This will allow you to access your Cloud Files container data inside a Linux server, just like any other file or folder.
Note: This process will give you easy access to your Cloud Files data, but in no way are we recommending that you use the mounted Cloud Files container as a location for any database/application. Running an application directly from the container would be exceptionally slow.
So, why would one want to mount a Cloud Files container to your Linux Cloud Server? Well, there are plenty of uses for having system-level access to your Cloud Files. For instance, if you have some scripts which create database or website backups, those scripts can create backups automatically into Cloud Files without you needing to use the API or File Manager in the Control Panel.
Note: The following commands are tried and tested on Ubuntu 10.10, but they should be applicable to other versions of Ubuntu or Debian. As long as you install the required packages, you should be able to compile CloudFuse code and use it.
First, download the CloudFuse code from cloudfuse-0.1.tar.gz. This tar.gz file has been uploaded and is maintained on github. It is shared here, and has been tested so that all the following steps will work fine. New code changes in the repository can cause compile-time errors. So, download the code from the above link. Extract the file, and then compile the software.
:~$ tar -xzvf cloudfuse-0.1.tar.gz
Once you have extracted the .tar.gz file, you should have following files under the cloudfuse-0.1 directory.
root@ubuntu-test:~/cloudfuse-0.1# ls -la total 280 drwxr-xr-x 3 root root 4096 Feb 21 21:47 . drwx------ 4 root root 4096 Feb 21 21:47 .. drwxr-xr-x 8 root root 4096 Feb 21 21:47 .git -rw-r--r-- 1 root root 1059 Feb 21 21:47 LICENSE -rw-r--r-- 1 root root 1024 Feb 21 21:47 Makefile.in -rw-r--r-- 1 root root 2332 Feb 21 21:47 README -rw-r--r-- 1 root root 12014 Feb 21 21:47 cloudfsapi.c -rw-r--r-- 1 root root 1043 Feb 21 21:47 cloudfsapi.h -rw-r--r-- 1 root root 11240 Feb 21 21:47 cloudfuse.c -rw-r--r-- 1 root root 4335 Feb 21 21:47 config.h.in -rwxr-xr-x 1 root root 198521 Feb 21 21:47 configure -rw-r--r-- 1 root root 1324 Feb 21 21:47 configure.in -rwxr-xr-x 1 root root 13184 Feb 21 21:47 install-sh root@ubuntu-test:~/cloudfuse-0.1#
Now it is time to compile CloudFuse and install it. You will need the following utilities and their dev packages installed in order to build it: libcurl, libfuse, and libxml2
CloudFuse is built and installed like any other autoconf-configured code. Normally:
root@ubuntu-test:~/cloudfuse-0.1# ./configure root@ubuntu-test:~/cloudfuse-0.1# make root@ubuntu-test:~/cloudfuse-0.1# sudo make install
But, first you need to install the required packages, otherwise the ./configure command will fail and generate errors.
root@ubuntu-test:~/cloudfuse-0.1# apt-get update root@ubuntu-test:~/cloudfuse-0.1# apt-get install gcc root@ubuntu-test:~/cloudfuse-0.1# apt-get install libcurl4-openssl-dev root@ubuntu-test:~/cloudfuse-0.1# apt-get install libxml2 libxml2-dev root@ubuntu-test:~/cloudfuse-0.1# apt-get install libfuse-dev
Now run the following command in the cloudfuse-0.1 source code directory
root@ubuntu-test:~/cloudfuse-0.1# ./configure checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for a BSD-compatible install... /usr/bin/install -c checking for a thread-safe mkdir -p... /bin/mkdir -p checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes checking for XML... yes checking for CURL... yes checking for FUSE... yes ......... ............ configure: creating ./config.status config.status: creating Makefile config.status: creating config.h root@ubuntu-test:~/cloudfuse-0.1# make gcc -g -O2 -I/usr/include/libxml2 -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -o cloudfuse cloudfsapi.c cloudfuse.c -lxml2 -lcurl -pthread -lfuse -lrt -ldl root@ubuntu-test:~/cloudfuse-0.1# make install /usr/bin/install -c cloudfuse /usr/local/bin/cloudfuse root@ubuntu-test:~/cloudfuse-0.1#
If everything went fine, you should now have CloudFuse installed properly. Confirm this by running the which command. It should show the location of the CloudFuse binary file.
root@ubuntu-test:~/cloudfuse-0.1# which cloudfuse /usr/local/bin/cloudfuse root@ubuntu-test:~/cloudfuse-0.1#
Now let’s use CloudFuse to mount our Cloud Files.
You'll have to create a configuration file for CloudFuse in your home directory and put your Rackspace Cloud Files username and API key in it, as shown below:
$HOME/.cloudfuse
username=[username]
api_key=[api key]
authurl=[auth URL]
US Cloud Files account: https://auth.api.rackspacecloud.com/v1.0
UK Cloud Files account: https://lon.auth.api.rackspacecloud.com/v1.0
The following entries are optional. You can define these values in the .cloudfuse file.
use_snet=[True to use snet for connections]
cache_timeout=[seconds for directory caching, default 600]
After creating the above configuration file, run the cloudfuse command as follows. The syntax should be as simple as:
cloudfuse [mount point]
So, you should be able to mount Cloud Files like this
root@ubuntu-test:/# mkdir cloudfiles root@ubuntu-test:/# cloudfuse /cloudfiles
If you run the # ls -la command inside the /cloudfiles directory you should see your Cloud Files containers.
If you are not logged in as the user root on the system, then your username will need to be part of the "fuse" group. This can be accomplished with the following command:
sudo usermod -a -G fuse [username]
If you are unable to see any containers inside the mountpoint, then one or more of the above steps didn't work properly. You will need to repeat the process, and verify that all of the above steps were followed precisely.

Comments
XML Error
./configure output
checking for XML... configure: error: 'Unable to find libxml2. Please make sure library and header files are installed.'
apt-get install libxml2 output
Reading package lists... Done
Building dependency tree
Reading state information... Done
libxml2 is already the newest version.
Re: XML Error
setting times Function not implemented and fuse group
Hi there,
I just tried out this tutorial on Ubuntu 10.10 image. It's very well written. Thanks! I followed all instructions and getting the follow two erros:
first. after I successfully executed 'cloudfuse cloudfiles'. I can add files to the directory but when I create a file, copy, or move, I get this error message:
for example:
# touch test
touch: setting times of `test': Function not implemented
This is an issue for me because some program I use won't save file in the mounted directory. I don't seem to find the right answer for it. I wonder if anyone here knows.
Thanks in advance for the help!
Li
PS: I also don't have the user group 'fuse' created by following above direction. I have some issues with "sudo usermod -a -G fuse [username]" but I can live with that. I want to mention it in case they are connected.
Re: file creation
'fuse' module must be added to kernel
Working on Ubuntu 10.04 LTS, I followed the tutorial and got the following error at the end:
fuse: device not found, try 'modprobe fuse' first
The solution was to do this:
mkdir -p /mnt/cloudfiles # <===or wherever you want to put your mount point
modprobe fuse
cloudfuse /mnt/cloudfiles
Argh, it mangled my post
Re: Modprobe
Containers are only scanned at mount time
On Ubuntu Natty, fuse group doesn't get created
Found a howto that worked.
Found a howto that worked.
http://tumblr.dderek.com/post/526900310/using-cloudfuse-to-mount-the-rac...
Re: Natty
Modprobe fuse
Rackspace "snet" (private interface)
Thanks for the help Jon. I
Unable to determine username and API key
I was able to follow the installation instructions and everything appears to have worked correctly; no errors. However, when I attempt to run cloudfuse, I get the error "Unable to determine username and API key." I tried specifying my username and API key via command line as well as including the information in /root/.cloudfuse, but I still get the same error. I have cloudfuse installed on two other machines and they work without issue. The only difference I can see between the two is that the new machine is running Centos 6; the others, Centos 5.5.
Any assistance would be greatly appreciated.
Thank you.
"A CLEAR PRECEDURE"
Excuse me for saying this, but this tutorial is quite mucky! I have precisely tested the following procedure starting will a plain Ubuntu 10.04LTS instance. Just fill in your values in place of the "<*****>" sections:
sudo su
cd /home/
wget http://c16281.r81.cf2.rackcdn.com/cloudfuse-0.1.tar.gz
tar -xzvf cloudfuse-0.1.tar.gz
cd cloudfuse-0.1
apt-get update
apt-get upgrade
NOTE: Repeating "apt-get update" is sometimes advisable after upgrading.
apt-get update
apt-get install gcc
apt-get install libcurl4-openssl-dev
apt-get install libxml2 libxml2-dev
apt-get install libfuse-dev
./configure
make
make install
which cloudfuse
NOTE: The output should be:
/usr/local/bin/cloudfuse
root@ubuntu-test:~/cloudfuse-0.1#
cd /root
nano .cloudfuse
ADD THE FOLLOWING LINES (see "Your Account / API Access" in the Cloud Control Panel for and values):
username=
api_key=
authurl=https://auth.api.rackspacecloud.com/v1.0
cd /home/
mkdir cloudfiles
cloudfuse /home//cloudfiles
NOTE: Do the following if needed.
sudo usermod -a -G fuse
NOTE FINAL: Everyone should know the value of test servers. Linux is a "River of No Return" for many commands and operations. No system planned for production should have anything done on it without first thoroughly testing it on an identical test server.
"A CLEAR PROCEDURE - 2"
I attempted to set this up on a highly configured server, and the "cloudfuse /home//cloudfiles" command did not work.
I repeated the entire procedure, and when arriving at that step, I used the following instead. This worked:
cd /home/
cloudfuse cloudfiles
I don't know why ???
Add new comment