diff --git a/cryosparc_install.sh b/cryosparc_install.sh new file mode 100755 index 0000000..302541d --- /dev/null +++ b/cryosparc_install.sh @@ -0,0 +1,148 @@ +#!/bin/bash +set -euo pipefail + +# Script made from the page +# https://docs.ycrc.yale.edu/clusters-at-yale/guides/cryosparc/ + +license_id= +install_path="$HOME"/cryosparc +cryosparc_passwd=Password123 + +# set up some more paths +db_path=${install_path}/database +worker_path=${install_path}/cryosparc2_worker + +# Usage +usage () { + echo "Usage:" + echo " -l license_id : License ID" + echo " -p install path : prefix for installation [${install_path}] " + echo " -v : be verbose" + echo " -h : print this notice" + echo "" +} + +VERBOSE=false +# Parse options +while getopts ":l:p:vh" opt; do + case $opt in + l) + license_id="${OPTARG}" + ;; + p) + install_path="${OPTARG}" + ;; + v) + VERBOSE=true + ;; + h) + usage + OPTIND=1 + exit 0 + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + usage + OPTIND=1 + exit 1 + ;; + :) + echo "Option -$OPTARG requires an argument." >&2 + usage + OPTIND=1 + exit 1 + ;; + esac +done +# Reset OPTIND to allow the next invocation to work +OPTIND=1 + +message() { + if $VERBOSE + then + echo "${1}" + fi +} + +if [ "x${license_id}" == "x" ]; then + echo "[Error] No license id was provided" >&2 + usage + exit 2 +fi + +message "[Info] Preparing the install path and dowloading cryosparc_master and cryosparc_worker" + +# go get the installers +mkdir -p $install_path +cd $install_path +# Download master +curl -sL -C - -\# https://get.cryosparc.com/download/master-latest/$license_id -o cryosparc2_master.tar.gz +# Download worker +curl -sL -C - -\# https://get.cryosparc.com/download/worker-latest/$license_id -o cryosparc2_worker.tar.gz + + +message "[Info] Expanding tarballs" + +tar -xf cryosparc2_master.tar.gz +tar -xf cryosparc2_worker.tar.gz + + +module load gcc cuda python + +message "[Info] Installing master" + +cd ${install_path}/cryosparc_master +./install.sh --license $license_id --hostname $(hostname) --dbpath $db_path --yes +set +u +source ~/.bashrc +set -u + + +message "[Info] Installing worker" + +cd ${install_path}/cryosparc_worker +./install.sh --license $license_id --cudapath $CUDA_HOME --yes +set +u +source ~/.bashrc +set -u + + +message "[Info] Creating worker configs" + +cryosparc_master_path=${install_path}/cryosparc_master +if [ $(grep -c "export PATH" ${cryosparc_master_path}/config.sh) -eq 0 ]; then + echo "export PATH=${cryosparc_master_path}/bin:\$PATH" >> ${cryosparc_master_path}/config.sh +fi + +if [ $(grep -q "export CRYOSPARC_HOSTNAME_CHECK" ${cryosparc_master_path}/config.sh) -eq 0 ]; then + echo "export CRYOSPARC_HOSTNAME_CHECK=${master_host}" >> ${cryosparc_master_path}/config.sh +fi + + +mkdir -p ${install_path}/site_configs && cd ${install_path}/site_configs +cat << EOF > cluster_info.json +{ + "name" : "farnam", + "worker_bin_path" : "${install_path}/cryosparc2_worker/bin/cryosparcw", + "cache_path" : "/tmp/{{ cryosparc_username }}/cryosparc_cache", + "send_cmd_tpl" : "{{ command }}", + "qsub_cmd_tpl" : "sbatch {{ script_path_abs }}", + "qstat_cmd_tpl" : "squeue -j {{ cluster_job_id }}", + "qdel_cmd_tpl" : "scancel {{ cluster_job_id }}", + "qinfo_cmd_tpl" : "sinfo" +} +EOF + +cat << EOF > cluster_script.sh +#!/bin/bash -l +#SBATCH --job-name cryosparc_{{ project_uid }}_{{ job_uid }} +#SBATCH -c {{ num_cpu }} +#SBATCH --gres:gpu={{ num_gpu }} +#SBATCH --mem={{ (ram_gb*1024)|int }} +#SBATCH -o {{ job_dir_abs }} +#SBATCH -e {{ job_dir_abs }} + +module load gcc cuda python +ln -sf \${TMPDIR} /tmp/${USER}/cryosparc2_cache +{{ run_cmd }} +EOF diff --git a/cryosparcm.sh b/cryosparcm.sh new file mode 100755 index 0000000..b160b6b --- /dev/null +++ b/cryosparcm.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash +set -euo pipefail + +install_path="$HOME"/cryosparc + +# Usage +usage () { + echo "$0 -p -P command" + echo "Usage:" + echo " command : command to pass to cryosparcm (start|stop)" + echo " -p install path : prefix for installation [${install_path}] " + echo " -P base_port : base port [${cryosparcm_port}] " + echo " -v : be verbose" + echo " -h : print this notice" + echo "" +} + +set +u +if [ "x$1" = "x" ]; then + usage + exit 1 +fi +set -u + +# Parse options +while getopts ":P:p:h" opt; do + case $opt in + p) + install_path="${OPTARG}" + ;; + P) + cryosparcm_port="${OPTARG}" + ;; + h) + usage + OPTIND=1 + exit 0 + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + usage + OPTIND=1 + exit 1 + ;; + :) + echo "Option -$OPTARG requires an argument." >&2 + usage + OPTIND=1 + exit 1 + ;; + esac +done + +shift $((OPTIND-1)) +OPTIND=1 + +command=$1 +shift + +module load gcc cuda python + +export PATH=/home/richart/cryosparc/cryosparc_master/bin:$PATH +cryosparcm_path="$(which cryosparcm 2> /dev/null)" + +base_dir=$(dirname "$(dirname "${cryosparcm_path}")") +master_host=$(hostname) + +cp $base_dir/config.sh $base_dir/config.sh.bak +sed -i -e 's/export CRYOSPARC_MASTER_HOSTNAME.*$/export CRYOSPARC_MASTER_HOSTNAME=\"'"$master_host"'\"/g' $base_dir/config.sh +sed -i -e 's/export CRYOSPARC_HOSTNAME_CHECK.*$/export CRYOSPARC_HOSTNAME_CHECK=\"'"$master_host"'\"/g' $base_dir/config.sh + +set +u +if [ "x${cryosparcm_port}" != "x" ]; then + sed -i -e 's/export CRYOSPARC_BASE_PORT.*$/export CRYOSPARC_BASE_PORT='$cryosparcm_port'/g' $base_dir/config.sh +fi +set -u + +source $base_dir/config.sh + + +${cryosparcm_path} $command $* | sed -e 's/'$(hostname --fqdn)'/'${master_host}'.epfl.ch/' +if [[ $command =~ '.*start' ]]; then + ${cryosparcm_path} status +fi