OpenOnDemand
Setting up Open OnDemand
What is it?
Open OnDemand is a portal to run web applications to help add ease of use functionality to any Compute Cluster. It provides the following apps out of the box which I shall go through the configuration of using my trusty virtual TrinityX cluster on my file server.
- Home directory browser with editor
- Active Job Viewer
- Job creator
- Cluster Shell
- Remote Visualisation
File:RemoteDesktop1.png File:RemoteDesktop2.png
Install RPMs on Portal node
yum install centos-release-scl yum install https://yum.osc.edu/ondemand/1.5/ondemand-release-web-1.5-1.el7.noarch.rpm yum install ondemand systemctl start httpd24-httpd
Configure The Portal Node
cp /etc/ood/config/ood_portal.yml /etc/ood/config/ood_portal.yml.orig
cat >> /etc/ood/config/ood_portal.yml << EOF
auth:
- 'AuthType Basic'
- 'AuthName "private"'
- 'AuthBasicProvider ldap'
- 'AuthLDAPURL "ldaps://trinityx:636/ou=People,dc=local,dc=cluster?uid"'
- 'AuthLDAPGroupAttribute memberUid'
- 'AuthLDAPGroupAttributeIsDN off'
- 'RequestHeader unset Authorization'
- 'Require valid-user'
EOF
cat >> /opt/rh/httpd24/root/etc/httpd/conf.modules.d/01-ldap.conf << EOF
# change the following LDAPLibraryDebug line to 1 if you get 500 (internal server) errors after login
LDAPLibraryDebug 0
EOF
/opt/ood/ood-portal-generator/sbin/update_ood_portal
systemctl try-restart httpd24-httpd.service httpd24-htcacheclean.service
mkdir -p /etc/ood/config/clusters.d/
echo > /etc/ood/config/clusters.d/my_cluster.yml << EOF
---
v2:
metadata:
title: "My Cluster"
login:
host: "trinityx.cluster"
job:
adapter: "slurm"
cluster: "cluster"
bin: "/usr/sbin/"
conf: "/etc/slurm/slurm.conf"
bin_overrides:
sbatch: "/usr/bin/sbatch"
squeue: "/usr/bin/squeue"
scontrol: "/usr/bin/scontrol"
scancel: "/usr/bin/scancel"
batch_connect:
basic:
script_wrapper: |
module purge
%s
vnc:
script_wrapper: |
module purge
module add turbovnc websockify
export WEBSOCKIFY_CMD="websockify"
%s
EOF
mkdir /etc/ood/config/apps/bc_desktop -p
cat > /etc/ood/config/apps/bc_desktop/my_cluster.yml << EOF
---
title: "Remote Desktop"
cluster: my_cluster
attributes:
bc_account:
help: "this should be left blank"
desktop:
value: "mate"
bc_vnc_idle:
value: 180
bc_vnc_resolution:
required: true
label: "Desktop Resolution"
value:
node_type: null
form:
- bc_vnc_idle
- desktop
- bc_account
- bc_num_hours
- bc_num_slots
- node_type
- bc_queue
- bc_vnc_resolution
- bc_email_on_started
EOF
/opt/ood/ood-portal-generator/sbin/update_ood_portal
systemctl try-restart httpd24-httpd.service
Configure the compute node image
luna chroot compute yum groupinstall xfce yum install numpy exit luna osimage pack compute
Configure Modules for TurboVNC and websockify
TurboVNC
I cheat and install TurboVNC from the RPM downloaded from the TuboVNC website locally and then copy the /opt/TurboVNC directory into the shared apps folder and then use the following module for the computes
yum install turbovnc-2.2.2.x86_64.rpm
cp /opt/TurboVNC /trinity/shared/apps/ -r
cat /trinity/shared/modules/tr17.10/x86_64/compiler/turbovnc/2.2.2
#%Module
#
# @name: TurboVNC
# @version: 2.2.2
# @packaging: BIOS IT
#
# Customize the output of `module help` command
# ---------------------------------------------
proc ModulesHelp { } {
puts stderr "\tAdds $name to your environment variables"
puts stderr "\t\t\$PATH, \$MANPATH"
}
# Customize the output of `module whatis` command
# -----------------------------------------------
module-whatis "loads the [module-info name] environment"
# Define internal modulefile variables (Tcl script use only)
# ----------------------------------------------------------
set name TurboVNC
set version 2.2.2
set prefix /trinity/shared/apps/$name/$version
# Check if the path exists before modifying environment
# -----------------------------------------------------
if {![file exists $prefix]} {
puts stderr "\t[module-info name] Load Error: $prefix does not exist"
break
exit 1
}
# Update common variables in the environment
# ------------------------------------------
prepend-path PATH $prefix/bin
prepend-path MANPATH $prefix/man
setenv TURBONVNC_DIR $prefix
Websockify
I install this on the controller and set PYTHONPATH and use the --home= option so that it will end up in the shared apps folder The setup.py will try to install numpy on the node and in Centos 7 this breaks, pre-empt by installing from rpm FIRST
yum install numpy
git clone https://github.com/novnc/websockify
cd websockify
mkdir -p /trinity/shared/apps/websockify/0.8.0
PYTHONPATH=/trinity/shared/apps/websockify/0.8.0/lib/python python ./setup.py install --home=/trinity/shared/apps/websockify/0.8.0
cat /trinity/shared/modules/tr17.10/x86_64/libraries/websockify/0.8.0
#%Module
#
# @name: websockify
# @version: 0.8.0
# @packaging: BIOS-IT
#
# Customize the output of `module help` command
# ---------------------------------------------
proc ModulesHelp { } {
puts stderr "\tAdds websockify to your environment variables"
puts stderr "\t\t\$PATH, \$MANPATH"
}
# Customize the output of `module whatis` command
# -----------------------------------------------
module-whatis "loads the [module-info name] environment"
# Define internal modulefile variables (Tcl script use only)
# ----------------------------------------------------------
set name websockify
set version 0.8.0
set prefix /trinity/shared/apps/$name/$version/
# Check if the path exists before modifying environment
# -----------------------------------------------------
if {![file exists $prefix]} {
puts stderr "\t[module-info name] Load Error: $prefix does not exist"
break
exit 1
}
# Update common variables in the environment
# ------------------------------------------
prepend-path PATH $prefix/bin
prepend-path LD_LIBRARY_PATH $prefix/lib
prepend-path LIBRARY_PATH $prefix/lib
prepend-path PYTHONPATH $prefix/lib/python
prepend-path MANPATH $prefix/share/man
setenv WEBSOCKIFY_DIR $prefix