The union mount sounds good, if it will work. Can you give me more details on the status of the vfs in that regard? Specifically, how does it handle duplicates and writing? Which filesystem/plugin provides the file? And which one is written to when a new file is created? What happens when you overwrite a file on a read-only filesystem when it shares a directory with a writeable filesystem? What about overwriting a file on a different filesystem than the one that it would create new files in?

On Wed, Dec 27, 2017 at 10:05 AM, Norman Feske <norman.feske@...1...> wrote:
Hi Ben,

On 27.12.2017 05:26, Nobody III wrote:
> While working on my own "Sculpt" scenario, I saw that the fs_rom server
> still doesn't allow using multiple directories as sources. Being able to
> separate the executables, libraries, and config files would be very
> helpful for organizing the filesystem and providing shared libraries to
> programs without exposing the configuration files as well. Is there a
> way to do this with the components currently available, or should fs_rom
> (or some other component) be modified to enable ROM file separation?

fs_rom can deal with subdirectories. It just takes the last part of the
label as path, which may contain "/" characters. So if your file system
has subdirectories like '/rom' and '/config', you may request the ROM
module 'pdfview' from the '/rom' directory by opening a ROM session with
the label "/rom/pdfview". The second piece of the puzzle is the use of
init's label rewriting mechanism in routing rules. Let's say we have a
subsystem 'PDF-viewer', which is an init instance that hosts one
'pdfview' among other components as child components. The start node of
such a subsystem may look like this:

  <start name="PDF-viewer">
    <binary name="init"/>
    <resource .../>
    <route>
      <service name="ROM" label="config>
        <child name="fs_rom" label="config/pdf_viewer.config"/>
      </service>
      <service name="ROM" label="pdfview">
        <child name="fs_rom" label="rom/pdfview"/>
      </service>
      ...
    </route>
  </start>

The imporant part of the example above are the 'label' attributes in the
routing-target nodes. When specified, init replaces the child-provided
label by the one specified as attribute value.

As another possible alternative, you may connect the 'fs_rom' not
directly to you file-system server but put a VFS server in between. In
the <vfs> of this VFS server, you can mount several other <fs> nodes at
the root of the <vfs> with each <fs> pointing to the real file system
but with a different 'root' attributes. This way, the VFS server will
present a "union mount" of the corresponding directories.

Does one of the two options sounds viable for you?

Cheers
Norman

--
Dr.-Ing. Norman Feske
Genode Labs

https://www.genode-labs.com · https://genode.org

Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden
Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
genode-main mailing list
genode-main@...172...net
https://lists.sourceforge.net/lists/listinfo/genode-main