PyarrFS

Overview


PyarrFS is a FUSE based file system to access the content of RAR archives as if they were just normal files and directories. PyarrFS owes technically to FUSE and rarfile, while the idea originates out of YarrFS - a similar file system I came up with a few years ago. It works with both compressed and uncompressed rar files, though due to a bunch of stupid reasons we need not go into detail on here the support for compressed files is much worse than that for uncompressed ones.


A typical PyarrFS user exposing her satisfaction with said file system! (image courtesy of cafepress.com)

Some history


I had the need for reading files out of uncompressed rar-files and looking at what was available at the time I was not very impressed. AVFS could be used to mount a complete directory structure somewhere and access it transparently as if the rar-files were just normal directories. It did however have one big drawback - it used unrar secretly in the background to extract the files to a temporary directory and merely link that in under the fake FUSE directory structure. It was slow. Another contender was rarfs which could read uncompressed files on the fly, however, it only allowed you to mount one rar file at a time. And so not being satisfied with what was available, I raised the idea to a colleague of mine (a programmer), to implement something like rarfs but with FUSE bindings to allow a complete file system or a subdirectory of it be read transparently. He came to realize the benefits of such a program and so the coding began. Not many hours passed until a working binary was compiled and everyone lived happily ever after... right?
Well, there were bugs and although some were fixed over the years some still still remain to this day. The project is pretty much dead and as my C skills are not what they ought to be the only solution for me was to rewrite in another language. I had the idea of rewriting the whole thing for quite some time but had never gotten around to it until a late night in Barcelona when I was trying to use a service which in turn uses YarrFS. It crashed, I got pissed and so on the flight home I started sketching out the idea. I happen to like Python and looking at the Python FUSE bindings this didn't look very complicated at all. Now, what of the RAR support? Should I try to link with the yarr lib or even rewrite it in python? Of course not, Googles "I'm feeling lucky" directed me to rarfile, a library for python to read RAR files. It even had support for compressed files through some hacks via the unrar binary. I was in heaven (well, at 10000 feet if we need be technical)!

A few hours later and the first working version was complete. Enjoy.

.. or so I thought. Moments after having released the initial version I realised it wasn't really functional at all since a call to seek() would mess things up. Sorry for the lack of update, but I guess noone came around to download it that early on anyway. Now, with a hacked version of rarfile, I present the much more finished products. It's actually working!

This disables the CRC checking, as that is not compatible with seeking and then of course, seek support, though most of that is done in rarfile.

Comments, suggestions and patches are always welcome :)

License?


Yes, the X11/MIT license, ie it's pretty permissive. We do of course appreciate any feedback and/or patches :)
Mail me kristian at spritelink dot net

Getting it


I am not aware of any distributions that currently include PyarrFS in their standard distribution and thus, there is no standard distribution package manager than can help you.

Debian and derivates such as Ubuntu has a program called pypi-install (part of the python-stdeb package) that will download a package from pypi, turn it into a debian package and install it. Please use it to install PyarrFS and rarfile;
pypi-install rarfile
pypi-install pyarrfs

If you are on some other platform, you can use easy_install;
easy_install rarfile
easy_install pyarrfs

or via github, see our github page

Comments