Skip to main content

Module glue

Module glue 

Source
Expand description

Mount points for bindings, created where the guest would list them.

A binding answers every lookup of its guest path, but a directory listing comes from the kernel, which only sees what is on disk under the guest path’s parent. A file bound into a directory of the rootfs, such as an NVIDIA vendor file in /usr/share/glvnd/egl_vendor.d, is then found by name and missing from the listing that libglvnd, the Vulkan loader and the OpenCL ICD loader take their drivers from. bubblewrap and the kernel’s mounts create the mount point; PRoot creates an empty placeholder and removes it on exit. This does the same, with PRoot’s PROOT_DONT_POLLUTE_ROOTFS to opt out.

A placeholder is only created through real directories: a symlink along the way stops the walk, so nothing is written outside the directory a component lexically names. A component under a read-only binding is never created, as bubblewrap cannot create one there either.

Each placeholder carries the user.proot-next.placeholder extended attribute. One left behind by a supervisor that was killed is found by it on the next launch and removed with that launch’s own, while a file the rootfs shipped is never mistaken for one. On a filesystem without user attributes an orphan stays until removed by hand, as with PRoot.

Structs§

Placeholder
One mount point created by create, removed again by remove.

Constants§

DONT_POLLUTE_VAR
Environment variable that turns placeholder creation off, as in PRoot.
MARK 🔒
Extended attribute marking a placeholder.

Functions§

create
Creates the missing mount points of every binding of a view.
create_for 🔒
mark 🔒
marked 🔒
remove
Removes placeholders created by create, newest first.
underlying 🔒
The host path guest names in the view without binding and the bindings under it, and whether that path is under a read-only binding.