POrtable Dodgy Filesystems in Userland (hacK) version 2

(alias podfuk)

'Old' Podfuk

Once upon a time, there was project called podfuk. It used nfs, and nfs sucks. On one sunny night, its author had nothing better to do, and he started creating fake cache manager for coda. It worked in two days, and it worked pretty good. At least, ugly nfs was gone.

What is it?

Podfuk wants to replace userfs. Reasons for podfuk are about the same as for userfs (filesystems in userland are easier to debug, and you can have completely new filesystems (tar) that would bloat kernel too much). Podfuk has advantages over userfs: it does not require kernel patch (coda is present in 2.2.X kernels) and it avoids C++.

Why such name?

If your read uppercase letters in title, you'll get meaningful Czech word 'podfuk', which means something like 'fiddle'.

What is done?

Perhaps you'll like some demo?

pavel@Elf:/$ cd "/tmp/unarj241a.tar.gz#utar/unarj241a"/
pavel@Elf:/tmp/unarj241a.tar.gz#utar/unarj241a$ ls
Makefile       os2unarj.mak   tccunarj.mak   unarj.doc
Makefile.orig  patch241a      technote.doc   unarj.exe
decode.c       qclunarj.mak   unarj.c        unarj.h
environ.c      readme.doc     unarj.def      unarj.h.orig
pavel@Elf:/tmp/unarj241a.tar.gz#utar/unarj241a$ cd /tmp
pavel@Elf:/tmp$ head mc.diff.gz#ugz
--- /dev/null   Sun Jun  2 15:30:20 1996
+++ mmc/vfs/shared.c    Mon Mar 30 23:41:55 1998
@@ -0,0 +1,267 @@
+/*
...

It looks nice, doesn't it?

How it could be done?

OK, you want Linux to behave as above. What options do you have?

How is it done?

Midnight commander now contains nice library called libvfs.so, which can be used in other programs (LGPL). Nothing is easier than creating venus-like beast, which use mc_stat calls instead of stat etc. Then you mount coda filesystem on /overlay, and your virtual files are immediately available. (You'll need mc-4.5.30 when it is available, older versions do not build libvfs.so - due to file callback.h missing - download it here.)

This is usable, but not really convient to use: If you stay in /overlay all the time, it is slow; if you don't, you have to switch manually. To avoid this inconvience, hack to Linux 2.2.X kernel was created, which does necessary magic. [All accesses to non-existent file with '#' in name are redirected into /overlay file-system.] Corrected diff against 2.2.X is available here, patch against 2.3.99-pre3 is here (it does not work against -pre5 :-().

Note that this hack is not required and if you are happy with manually-prepending /overlay every time you want to access virtual file, no kernel hack is required.

Versions 0.[12]

These are old versions using nfs.

Version 2.9

Podfuk code is 500 lines currently. Not bad, is it? (Well, I'm not including midnight commander, which you are going to need ;-). Download it. It should even include read/write support. Wow. You'll probably need to compile your own midnight; do not pass any options to configure and be sure to use latest development version.

Version 3.0+

I've moved code to sourceforge, so you can browse cvs etc. It is called uservfs, now. If you want to see latest source, you should checkout CVS. If you are confused, checkout CVS, also, because it contains README and Makefile is no longer merged with C file.

Portability

Podfuk was successfully ported to Solaris. I guess that means that it could work on other systems supporting coda as well.

Corel

Corel is doing their own development. They have nice tools like monitor, and nicely installable .deb package. Look here.


SourceForge Logo

Pavel Machek
pavel@atrey.karlin.mff.cuni.cz