This is a project to provide quality tested working OpenOndemand app examples that do not use Singularity/Apptainer docker containers unlike the default OSC examples or the Stanford Sherlock configs this is forked from. It is useful for:
- Small Scale educational clusters - To learn to set up OpenOndemand, it is easiest to start by using app launchers that rely on software installed on the server and accessible via bash scripts, not docker containers.
- Clusters that have software installed by admins and not users - If it is practical for all cluster users to request software be installed to the cluster instead of being self service, Singularity/Apptainer is not as necessary.
- Kubernetes backend of OpenOndemand - Obviously if you are using Kubernetes, you don't want to use Singularity/Apptainer.
- Trying to figure out how to set up an app on your OOD singularity cluster without other team's singularity customizations getting in the way - Even OOD cluster admins that do use singularity often might find it difficult to adapt existing singularity based OOD app configs to their specific setup.
Singularity/Apptainer significantly increases the complexity of OOD apps, and requires external docker container images to be built which many organizations making the examples have not open sourced, and their actual uses of Singularity/Apptainer very significantly.
It is a good idea to consider scaling up to Singularity/Apptainer to handle application distribution as the amount of users requesting software grows, but most small clusters for home server, small lab, or educational uses where they can easily ask an admin to install software do not need to resort to using Singularity/Apptainer.
Singularity/Apptainer allows docker containers to be used to store software for use via bash scripts rootlessly, such as on SLURM clusters. This way, users do not have to beg cluster admins to install necessary system software that they want, which can be a hassle in a large organization. In comparison to docker, Docker daemon requires root access, and while Podman can run rootlessly it relies heavily on SELinux. Lastly, it can be challenging for kubernetes to integrate properly with GPUs and other exotic hardware.
While singularity/apptainer is great technology, the proliferation of Singularity/apptainer only OOD apps make it very difficult for cluster admins to figure out how to create OOD apps without it.
In addition, if an organization already has developers in the habit of creating docker containers, they likely already use kubernetes instead of singularity/apptainer, which OpenOndemand also supports. In such cases,
Stanford Sherlock's OpenOndemand apps were one of the few open source repos that did not use Singularity/apptainer. It has a small but diverse set of Python and R and Matlab applications that serve as great examples of many frequen strategies to proxy the apps and do so securely.
Obviously, as Stanford's configs are for university use only, and not intended to provide an example or provide apps they don't use, I have adapted the apps to be more generic in this github organization and created a few more based on them.
The design of these OOD Apps, inherited from Stanford Sherlock, aims to be simple but scalable and extendable.
The minimum necessary definitions to get the apps working is provided, you just need to create the Lmod modules it references (or rename them to your existing ones).
nc_common is used as a single source of form and attribute configs that are imported by every OOD App with a name prefixed nc_ .
This naming scheme allows you to create alternative common repos based on this with a different name such as aws_common that all aws_ prefixed apps, or k8s_common that all k8s_ prefixed apps, but still know at a glance which _common repo the app uses.
nc_desktop is an example of a customized fork of bc_desktop that applies nc_common default form and attributes to it. It is kept up to date where we can for each new OpenOndemand version.
While openondemand supports customizing form.yml and submit.yml, it does not support customizing templates/* easily, and the amount of changes are to the point that its better to fork the app.
We also customized it by adding some useful features, such as a checkbox to auto launch xfce4-terminal app, which might be useful as an example for auto launching other apps.
To use nc_desktop, simply install the app like normal, then disable bc_desktop by setting chmod 700 on it to only allow root to read it.
Like Stanford's original apps, we use Lmod in these OOD apps instead of TCL.
Note that most specific apps require an Lmod module to be set up, check the app's readme for info.
An lmod module holding default system variables for your current cluster. Whatever you put in here is up to you, it just makes an example of a default Lmod module.
An lmod module holding default graphical x11 system variables for your current cluster. Whatever you put in here is up to you, it just makes an example of a default Lmod module.