Skip to content

[package list]

PRoot

License information

PRoot is licensed under the GNU General Public License version 2.0.

The license information is also available in the COPYING file in the directory $EBROOTPROOT/share/licenses/PRoot after loading the module, or in the COPYING file in the PRoot GitHub repository.

User documentation

The PRoot module provides the proot command to partition/container in the LUMI stacks. This enables the so-called "Unprivileged proot builds" in recent versions of Singularity Community Edition, one of the few ways available on LUMI to extend containers as user namespaces or fakeroot are not available.

The main use case is to be able to develop EasyConfigs that modify an existing container and install the container with matching module file in partition/container.

The proot command is also provided by the systools module, but that module cannot be used as a build dependency in EasyBuild when building for partition/common and cannot easily be made available in that partition without breaking the whole idea of the LUMI software stack and of that partition.

Pre-installed modules (and EasyConfigs)

To access module help and find out for which stacks and partitions the module is installed, use module spider PRoot/<version>.

EasyConfig:

  • PRoot/5.4.0 (EasyConfig: PRoot-5.4.0.eb)

    This easyconfig is meant to be installed in the central software stack in partition/container to make it possible to do a container build from EasyBuild while still storing the container in partition/container. It has minimal build dependencies, using only the system gcc and system make, as that is all what is available in partition/container.

Technical documentation

EasyBuild

There is no support for PRoot in EasyBuild or Spack.

5.4.0 for partition/container

  • This EasyConfig is a LUST development, combining the installation of talloc and PRoot, also installed in syslibs and systools respectively, but to be used in partition/container where we don't have those modules available.

    The idea is to obtain a single executable that only depends on system libraries, using a build process that EasyBuild can also do in partition/container, so with minimal tooling, using only the system gcc and make utility.

  • Done as a Bundle:

    • First a static version of talloc is compiled. This is already tricky as it only installs shared libraries, so these are removed and replaced with a static one generated from the object files.

    • Next we build PRoot, using the just built talloc library. Some trickery is required to create the correct environment for the build process so that it uses the right compilers and compiler flags and can find the talloc package.

    • In postinstallcmds we then remove all remaining pieces of talloc, to end with just a proot binary and information about its license.