Skip to content

[PRoot] [package list]

PRoot/5.4.0 (PRoot-5.4.0.eb)

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

EasyConfig:

# Developed by Kurt Lust (kurt.lust@uantwerpen.be) for use by the LUMI consortium
#
#DOC This easyconfig is meant to be installed in the central software stack in
#DOC `partition/container` to make it possible to do a container build from EasyBuild
#DOC while still storing the container in `partition/container`. It has minimal build
#DOC dependencies, using only the system gcc and system make, as that is all what is
#DOC available in `partition/container`.
#
easyblock = 'Bundle'

import os as local_os

# The first line below is a dirty trick not very much loved by the EasyBuild developers but
# it helps to make this EasyConfig independent of the LUMI software stack version as there is
# no other reference to that version in the file that we can use since it relies on the
# SYSTEM toolchain.
local_LUMI_version = local_os.environ['LUMI_STACK_CPE_VERSION']

local_PRoot_version =             '5.4.0'         #  https://github.com/proot-me/proot/releases
local_syslibs_talloc_version =       '2.4.3'         # https://www.samba.org/ftp/talloc/

name =    'PRoot'
version = local_PRoot_version

homepage = 'https://proot-me.github.io/'

whatis = [
    'Description: PRoot is a user-space implementation of chroot, mount --bind, and binfmt_misc.'
]

description = """
PRoot is a user-space implementation of chroot, mount --bind, and 
binfmt_misc. This means that users don't need any privileges or setup to do 
things like using an arbitrary directory as the new root filesystem, making 
files accessible somewhere else in the filesystem hierarchy, or executing 
programs built for another CPU architecture transparently through QEMU 
user-mode.

It is provided in this module mainly for use with singularity, and in 
particular, to be able to develop EasyConfig files that use the unprivileged
proot build process to modify an existing container and then create a
matching module to ease the use of the container.
"""

toolchain = SYSTEM

builddependencies = [
    #('buildtools', local_LUMI_version), # Want to build in partition/container where we cannot use buildtools.
]

default_easyblock = 'ConfigureMake'

components = [
    ('talloc', local_syslibs_talloc_version, {
        'easyblock':   'ConfigureMake',
        # https://www.sqlite.org/2022/sqlite-autoconf-3370200.tar.gz
        'sources':       [SOURCELOWER_TAR_GZ],
        'source_urls':   ['https://www.samba.org/ftp/talloc'],
        'checksums':     ['dc46c40b9f46bb34dd97fe41f548b0e8b247b77a918576733c528e83abd854dd'],
        'start_dir':     '%(namelower)s-%(version)s',
        'preconfigopts': 'CC="gcc" CFLAGS="-O2 -march=znver1" ',
        'configopts':    '--disable-python --disable-rpath',
        'installopts':   ' && cd %(builddir)s/talloc-%(version)s/bin/default ' +
                         ' && /usr/bin/ar rcs %(installdir)s/lib/libtalloc.a talloc.c.*.o ' +
                         ' && /bin/rm %(installdir)s/lib/libtalloc.so*',
    }),
    ('PRoot', local_PRoot_version, {
        'easyblock':    'ConfigureMake',
        # Source code https://github.com/proot-me/proot/archive/refs/tags/v5.4.0.zip
        'sources':      [ {
                           'download_filename': 'v%(version)s.zip',
                           'filename':          SOURCELOWER_ZIP,
                           'source_urls':       ['https://github.com/proot-me/proot/archive/refs/tags']
                        } ],
        'checksums':    ['8812f3a6c224bdd6a316f13689377e7543e7e3cebcdef6ec98827abee60fa327'],
        'start_dir':    '%(namelower)s-%(version)s/src',
        'skipsteps':    [ 'configure' ],
        'prebuildopts': 'sed -e "s/.*GIT_.*//" -i GNUmakefile && ' +
                        'PKG_CONFIG_PATH="%(installdir)s/lib/pkgconfig" ',
        'buildopts':    'proot V=1 CC="gcc" CFLAGS="-O2 -march=znver1" VERSION="%(version)s"',
        'installopts':  'V=1 PREFIX="%(installdir)s" ' +
                        '&& mkdir -p %(installdir)s/share/licenses/PRoot && cd .. && cp AUTHORS CHANGELOG.rst COPYING README.rst %(installdir)s/share/licenses/PRoot',
    })
]

# Remove talloc as we don't need it anymore; it is statically linked into proot.
postinstallcmds = [
    '/bin/rm -r %(installdir)s/lib %(installdir)s/include'
]


sanity_check_paths = {
    'files': [ 'bin/proot', 'share/licenses/PRoot/COPYING' ],
    'dirs':  [ ]
}

sanity_check_commands = [
    'proot --version'
]

moduleclass = 'tools'

[PRoot] [package list]