summaryrefslogtreecommitdiff
path: root/user
diff options
context:
space:
mode:
Diffstat (limited to 'user')
-rw-r--r--user/scolobb.mdwn82
1 files changed, 59 insertions, 23 deletions
diff --git a/user/scolobb.mdwn b/user/scolobb.mdwn
index b481f235..cddb1c73 100644
--- a/user/scolobb.mdwn
+++ b/user/scolobb.mdwn
@@ -16,10 +16,10 @@ Mail: <mailto:unlimitedscolobb@gmail.com>
# Google Summer of Code: 2009 Project
-**Unionmount**: The goal of this project is to make it possible to
-mount a translator on a node in such a way that the contents of the
-node be merged with the (virtual) filesystem published by the
-translator.
+**Unionmount**: The goal of this project is to make it possible to set
+translators in unionmount mode, which means that the filesystem
+published by the mounted translator will get merged with the directory
+tree of the node the translator is mounted onto.
For documentation, see [[hurd/translator/unionmount]].
@@ -29,27 +29,64 @@ For documentation, see [[hurd/translator/unionmount]].
### DONE
-* Make unionfs build.
-
-* Change the command line parsing in unionfs to comply with the
- requirements of unionmount.
-
-* Start the mountee.
+* **Make `unionfs` build.** For reasons unknown to me, `unionfs`
+ Makefile was configured to search for include files from under
+ `$(prefix)/include`, while `$(prefix)` was never defined. Setting
+ `$(prefix)` to `/usr` solved the problem.
+
+* **Change the command line parsing in `unionfs` to comply with the
+ requirements of `unionmount`.** Although the core functionality of
+ `unionmount` heavily relies on `unionfs`, the command line interface
+ of these two programs is completely different: `unionfs` operates on
+ directories, the list of which is explicitly specified, while
+ `unionmount` *always* merges the underlying filesystem and the
+ filesystem published by the mountee. Therefore, options like
+ `--add`, `--remove`, `--underlying` (specific to `unionfs`) make
+ little sense in `unionmount` context. These options have been
+ removed. Also, `unionmount` must be able to pass some switches to
+ the mountee, which means that it should stop parsing the command
+ line arguments immediately after having encountered the path to the
+ mountee (very similar to how `settrans` works). This functionality
+ has also been implemented.
+
+* **Make `unionmount` capable of starting the mountee.** The idea
+ behind implementation of this goal is that `unionmount` should
+ provide a proxy node on which to set the mountee. The main issue
+ about this goal was the fact that the mountee *cannot* be started
+ during the initialization of `unionmount`, because in this phase
+ `unionmount` is not capable of responding to RPCs, while many
+ translators try to `io_stat` their underlying node or do other
+ interesting things on startup. The solution to this problem is,
+ obviously, *lazy* startup, i.e. the mountee is started at the first
+ attempt to access (via `dir_lookup` or `dir_readdir`) the merged
+ filesystem published by `unionmount`.
+
+* **Include the filesystem published by the mountee in the list of
+ merged filesystems.** `unionfs` operates on a list of ports to the
+ underlying filesystems, therefore, to finish the unionmount
+ functionality, I had to include the port to the mountee in this
+ list.
### TODO
-* Include the filesystem published by the mountee in the list of
- merged filesystems.
-
-* Use a different (better?) implementation idea.
-
-* Write documentation.
-
-* Push the unionmount branch (*master-scolobb-unionmount*) to the
- unionfs repository.
-
-* Derive an independent repository based on the
- *master-scolobb-unionmount* branch.
+* **Use a different (better?) implementation idea.** It has been
+ pointed out several times that `unionmount` could be implemented not
+ by forking off `unionfs`, but by keeping the merging functionality
+ in a stand-alone module (which could then be used by `unionfs` as
+ well). Different implementation ideas with their own specific
+ advantages may also arise in the future.
+
+* **Write documentation.** The basic unionmount functionality being
+ finished, it has to be documented properly, lest it should lag
+ behind and remain unfinished eventually.
+
+* **Decide as to location of unionmount.** Presently, `unionmount` is
+ a (local) branch in `unionfs` git repository. The first step of
+ publishing it is planned to be pushing it to the Savannah `unionfs`
+ repository. Some agree that there should also be a second step
+ consisting in splitting `unionmount` in a separate git repository,
+ since the destinations of `unionfs` and `unionmount` are *similar*,
+ and not identical.
---
@@ -170,4 +207,3 @@ The code is at <http://github.com/scolobb/nsmux/tree/master>.
####0: Sun Apr 27:
> Followed the code of *dmesgd* (<http://www.bddebian.com/junk/dmesgd/>) kindly offered by **bddebian** and rewrote it from scratch as a tutorial.
-