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 byremove.
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
guestnames in the view withoutbindingand the bindings under it, and whether that path is under a read-only binding.