Scripts

The GekkoFS package includes several scripts that automate/simplify common tasks. This section describes such scripts, which can be classified as follows:

Dependency Management Scripts

GekkoFS provides two scripts for managing dependencies which can be found in the PROJECT_ROOT/scripts directory: dl_dep.sh and compile_dep.sh. As their names suggest, the dl_dep.sh script is in charge of downloading any dependencies required by GekkoFS to build or run correctly, while compile_dep.sh is responsible for installing them once downloaded.

Since dependencies may change or need to be configured differently depending on the specifics of the particular GekkoFS build, both scripts rely on configuration profiles which define a set of related software packages which should be downloaded and installed for a specific GekkoFS version and/or configuration. To illustrate this, let’s take a look at the contents of the default profile for GekkoFS version 0.9.2:

$ dl_dep.sh -l default:0.9.2
Configuration profiles for '0.9.2':

* default:0.9.2 (/home/user/gekkofs/source/scripts/profiles/0.9.2/default.specs)

  All dependencies

    lz4: 1.9.3
    capstone: 4.0.2
    json-c: 0.15-20200726
    libfabric: HEAD@v1.13.2
    mercury: v2.1.0
    argobots: 1.1
    margo: v0.9.6
    rocksdb: 6.26.1
    syscall_intercept: 2c8765fa292bc9c28a22624c528580d54658813d
    date: e7e1482087f58913b80a20b04d5c58d9d6d90155

Downloading dependencies

Dependencies defined in a profile can be downloaded using the dl_dep.sh script and the -p option. As shown below, profile names follow the PROFILE_NAME[:VERSION_TAG] naming convention, where PROFILE_NAME serves to uniquely identify a particular configuration (e.g. for a specific supercomputer) followed by an optional VERSION_TAG.

$ ./dl_dep.sh -p default:0.9.2 /home/user/gfks/deps
Destination path is set to  "/tmp/foo"
Profile name: default
Profile version: 0.9.2
------------------------------------
Downloaded 'https://github.com/lz4/lz4/archive/v1.9.3.tar.gz' to 'lz4'
Downloaded 'https://github.com/json-c/json-c/archive/json-c-0.15-20200726.tar.gz' to 'json-c'
Cloned 'https://github.com/pmem/syscall_intercept.git' to 'syscall_intercept' with commit '[2c8765fa292bc9c28a22624c528580d54658813d]' and flags ''
Checking patch include/libsyscall_intercept_hook_point.h...
Checking patch src/intercept.c...
Hunk #2 succeeded at 700 (offset 31 lines).
Hunk #3 succeeded at 730 (offset 31 lines).
Checking patch test/test_clone_thread_preload.c...
Applied patch include/libsyscall_intercept_hook_point.h cleanly.
Applied patch src/intercept.c cleanly.
Applied patch test/test_clone_thread_preload.c cleanly.
Cloned 'https://github.com/HowardHinnant/date.git' to 'date' with commit '[e7e1482087f58913b80a20b04d5c58d9d6d90155]' and flags ''
Downloaded 'https://github.com/pmodels/argobots/archive/v1.1.tar.gz' to 'argobots'
Cloned 'https://github.com/mochi-hpc/mochi-margo' to 'margo' with commit '[v0.9.6]' and flags ''
Downloaded 'https://github.com/aquynh/capstone/archive/4.0.2.tar.gz' to 'capstone'
Downloaded 'https://github.com/facebook/rocksdb/archive/v6.26.1.tar.gz' to 'rocksdb'
Cloned 'https://github.com/ofiwg/libfabric.git' to 'libfabric' with commit '[HEAD]' and flags '--branch=v1.13.2'
Cloned 'https://github.com/mercury-hpc/mercury' to 'mercury' with commit '[v2.1.0]' and flags '--recurse-submodules'
Done

It is also possible to download a specific dependency with the -d option. In this case, dependency names follow the DEPENDENCY_NAME[@PROFILE_NAME[:VERSION_TAG]] naming convention.

$ ./dl_dep.sh -d mercury@default:0.9.2 /home/user/gfks/deps
Destination path is set to  "/tmp/foo"
Profile name: default
Profile version: 0.9.2
------------------------------------
Cloned 'https://github.com/mercury-hpc/mercury' to 'mercury' with commit '[v2.1.0]' and flags '--recurse-submodules'
Done

Warning

Note that PROFILE_NAME and VERSION_TAG can be optional in most script invocations. If PROFILE_NAME is left unspecified, the scripts will assume that the default profile was selected. Similarly, if a VERSION_NAME is not provided, the scripts will assume that the latest version should be used.

Installing dependencies

Once dependencies in a configuration profile have been downloaded to a certain directory (e.g. /home/user/gkfs/deps), the compile_dep.sh script can be used to install them.

$ ./compile_dep.sh -p default:0.9.2 /home/user/gkfs/deps /home/user/gkfs/install -j8
CORES = 8 (default)
Sources download path = /tmp/foo
Installation path = /tmp/bar
Profile name: default
Profile version: 0.9.2
------------------------------------
######## Installing:  lz4 ###############################
...

######## Installing:  capstone ###############################
...

######## Installing:  json-c ###############################
...

######## Installing:  libfabric ###############################
...

######## Installing:  mercury ###############################
...

######## Installing:  argobots ###############################
...

######## Installing:  margo ###############################
...

######## Installing:  rocksdb ###############################
...

######## Installing:  syscall_intercept ###############################
...

######## Installing:  date ###############################
...

Done