Skip to content
Snippets Groups Projects
Commit dba083e5 authored by Nicolas Richart's avatar Nicolas Richart
Browse files

Cleaning files

parent 7eb2a987
Branches
No related tags found
No related merge requests found
# syntax=docker/dockerfile:experimental
FROM slaclab/x11-desktop:20231115.0
ENV DEBIAN_FRONTEND noninteractive
COPY mozilla.pin /etc/apt/preferences.d/mozilla
RUN curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc | gpg --dearmor -o /usr/share/keyrings/mongodb-6.0-keyring.gpg \
&& echo "deb [ arch=amd64,arch64 signed-by=/usr/share/keyrings/mongodb-6.0-keyring.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-6.0.list \
&& apt-get update \
&& wget -q https://packages.mozilla.org/apt/repo-signing-key.gpg -O /usr/share/keyrings/packages.mozilla.org.asc \
&& echo "deb [ arch=amd64 signed-by=/usr/share/keyrings/packages.mozilla.org.asc ] https://packages.mozilla.org/apt mozilla main" > /etc/apt/sources.list.d/mozilla.list \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
firefox \
zip unzip \
python3 python3-dev python3-setuptools python3-pip \
libtiff5 \
ed jq \
sudo \
less \
netbase iputils-ping net-tools \
nodejs \
mongodb-mongosh mongodb-database-tools \
&& apt-get remove chromium \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& ln -s /usr/lib/x86_64-linux-gnu/libtiff.so.5 /usr/lib/x86_64-linux-gnu/libtiff.so.3
ENV CRYOSPARC_ROOT_DIR /app
RUN mkdir -p ${CRYOSPARC_ROOT_DIR}
WORKDIR ${CRYOSPARC_ROOT_DIR}
ARG CRYOSPARC_VERSION
ENV CRYOSPARC_VERSION=${CRYOSPARC_VERSION}
ARG CRYOSPARC_PATCH
ENV CRYOSPARC_PATCH=${CRYOSPARC_PATCH}
RUN echo "USER=`id -u -n`"
# install master
ENV CRYOSPARC_MASTER_DIR ${CRYOSPARC_ROOT_DIR}/cryosparc_master
RUN --mount=type=secret,id=cryosparc_license_id \
curl -L https://get.cryosparc.com/download/master-v${CRYOSPARC_VERSION}/$(cat /run/secrets/cryosparc_license_id) | tar -xz \
&& cd ${CRYOSPARC_MASTER_DIR} \
&& sed -i '/^# Other$/ a echo \"CRYOSPARC_FORCE_USER=true\" >> config.sh' ${CRYOSPARC_MASTER_DIR}/install.sh \
&& bash ./install.sh --license "$(cat /run/secrets/cryosparc_license_id)" --allowroot --yes \
&& sed -i 's/^export CRYOSPARC_LICENSE_ID=.*$/export CRYOSPARC_LICENSE_ID=TBD/g' ${CRYOSPARC_MASTER_DIR}/config.sh
# update patches
RUN if [ "" != "${CRYOSPARC_PATCH}" ]; then wget https://get.cryosparc.com/patch_get/v${CRYOSPARC_VERSION}+${CRYOSPARC_PATCH}/master -O ${CRYOSPARC_ROOT_DIR}/cryosparc_master_patch.tar.gz \
&& tar -vxzf ${CRYOSPARC_ROOT_DIR}/cryosparc_master_patch.tar.gz --overwrite --strip-components=1 --directory=${CRYOSPARC_MASTER_DIR} \
&& rm -f ${CRYOSPARC_ROOT_DIR}/cryosparc_master_patch.tar.gz; fi
# patches
RUN sed -i 's: disk_has_space=.*: disk_has_space="true":g' ${CRYOSPARC_MASTER_DIR}/bin/cryosparcm
# install worker
ENV CRYOSPARC_WORKER_DIR ${CRYOSPARC_ROOT_DIR}/cryosparc_worker
RUN --mount=type=secret,id=cryosparc_license_id \
curl -L https://get.cryosparc.com/download/worker-v${CRYOSPARC_VERSION}/$(cat /run/secrets/cryosparc_license_id) | tar -xz \
&& cd ${CRYOSPARC_WORKER_DIR} \
&& bash ./install.sh --license "$(cat /run/secrets/cryosparc_license_id)" --yes \
&& sed -i 's/^export CRYOSPARC_LICENSE_ID=.*$/export CRYOSPARC_LICENSE_ID=TBD/g' ${CRYOSPARC_WORKER_DIR}/config.sh
# update patches
RUN if [ ! -z "${CRYOSPARC_PATCH}" ]; then wget https://get.cryosparc.com/patch_get/v${CRYOSPARC_VERSION}+${CRYOSPARC_PATCH}/worker -O ${CRYOSPARC_ROOT_DIR}/cryosparc_worker_patch.tar.gz \
&& tar -vxzf ${CRYOSPARC_ROOT_DIR}/cryosparc_worker_patch.tar.gz --overwrite --strip-components=1 --directory=${CRYOSPARC_WORKER_DIR} \
&& rm -f ${CRYOSPARC_ROOT_DIR}/cryosparc_worker_patch.tar.gz; fi
# compile libtiff
RUN ${CRYOSPARC_MASTER_DIR}/deps/anaconda/envs/cryosparc_master_env/bin/python3 ${CRYOSPARC_MASTER_DIR}/cryosparc_compute/blobio/tiff.py \
&& ${CRYOSPARC_WORKER_DIR}/deps/anaconda/envs/cryosparc_worker_env/bin/python3 ${CRYOSPARC_WORKER_DIR}/cryosparc_compute/blobio/tiff.py
####
## install motioncor
####
ARG MOTIONCOR2_VERSION=1.4.5
ENV MOTIONCOR2_VERSION=${MOTIONCOR2_VERSION}
ENV CUDA_TOOLKIT_VERSION="Cuda100-10-22-2021"
RUN cd /usr/local/bin \
&& curl -L 'https://drive.google.com/uc?export=download&id=1-Ub5lBBmel8U8U0uibORiH6wfxp9I1kn' > MotionCor2_${MOTIONCOR2_VERSION}.zip \
&& unzip MotionCor2_${MOTIONCOR2_VERSION}.zip \
&& rm -f MotionCor2_${MOTIONCOR2_VERSION}.zip \
&& ln -sf MotionCor2_${MOTIONCOR2_VERSION}-${CUDA_TOOLKIT_VERSION} MotionCor2
###
# install topaz
###
ARG TOPAZ_VERSION=0.2.5
ENV TOPAZ_VERSION=${TOPAZ_VERSION}
ENV TOPAZ_CUDA_TOOLKIT_VERSION=12.2.0
RUN /app/cryosparc_worker/deps/anaconda/bin/conda install topaz=${TOPAZ_VERSION} cuda-libraries-dev cuda-nvcc cuda-nvtx cuda-cupti -c nvidia/label/cuda-${TOPAZ_CUDA_TOOLKIT_VERSION} -c tbepler -c pytorch
###
#
### finish off
COPY entrypoint.bash /entrypoint.bash
COPY cryosparc.sh /cryosparc.sh
COPY cryosparc-server.sh ${CRYOSPARC_MASTER_DIR}/bin/cryosparc-server.sh
# autostart stuff
COPY cryosparc.desktop /cryosparc.desktop
RUN rm -f /etc/xdg/autostart/xscreensaver.desktop /etc/xdg/autostart/blueman.desktop /etc/xdg/autostart/mate-screensaver.desktop /etc/xdg/autostart/print-applet.desktop /etc/xdg/autostart/xfce4-power-manager.desktop /etc/xdg/autostart/mate-power-manager.desktop
EXPOSE 39000
EXPOSE 39001
EXPOSE 39002
EXPOSE 39003
EXPOSE 39004
EXPOSE 39006
ENTRYPOINT /entrypoint.bash
#From: docker://slaclab/cryosparc-docker:2.13.2-0
From: docker://slaclab/cryosparc-docker:4.0.3-0
#!/bin/bash -xe
# ensure we have a cryosparc directory under home
export CRYOSPARC_DATADIR=${HOME}/cryosparc
echo "Creating cryosparc datadir ${CRYOSPARC_DATADIR}..."
mkdir -p ${CRYOSPARC_DATADIR}
mkdir -p ${CRYOSPARC_DATADIR}/run
mkdir -p ${CRYOSPARC_DATADIR}/cryosparc_database
export PATH=${CRYOSPARC_MASTER_DIR}/bin:${CRYOSPARC_WORKER_DIR}/bin:${CRYOSPARC_MASTER_DIR}/deps/anaconda/bin/:$PATH
export CRYOSPARC_MASTER_HOSTNAME=${CRYOSPARC_MASTER_HOSTNAME:-$(hostname -s)}
echo "setting CRYOSPARC_MASTER_HOSTNAME=${CRYOSPARC_MASTER_HOSTNAME}"
###
# master initiation
###
CRYOSPARC_LICENSE_ID=${CRYOSPARC_LICENSE_ID:-$1}
if [ "${CRYOSPARC_LICENSE_ID}" == "" ]; then
echo "CRYOSPARC_LICENSE_ID required to continue..."
exit 127
fi
CRYOSPARC_BASE_PORT=${CRYOSPARC_BASE_PORT:-"39000"}
echo "Starting cryosparc master..."
cd ${CRYOSPARC_MASTER_DIR}
# modify configuration
printf "%s\n" "1,\$s/^export CRYOSPARC_MASTER_HOSTNAME=.*$/export CRYOSPARC_MASTER_HOSTNAME=${CRYOSPARC_MASTER_HOSTNAME}/g" wq | ed -s ${CRYOSPARC_MASTER_DIR}/config.sh
printf "%s\n" "1,\$s/^export CRYOSPARC_LICENSE_ID=.*$/export CRYOSPARC_LICENSE_ID=${CRYOSPARC_LICENSE_ID}/g" wq | ed -s ${CRYOSPARC_MASTER_DIR}/config.sh
printf "%s\n" "1,\$s|^export CRYOSPARC_DB_PATH=.*$|export CRYOSPARC_DB_PATH=${CRYOSPARC_DATADIR}/cryosparc_database|g" wq | ed -s ${CRYOSPARC_MASTER_DIR}/config.sh
printf "%s\n" "1,\$s/^export CRYOSPARC_BASE_PORT=.*$/export CRYOSPARC_BASE_PORT=${CRYOSPARC_BASE_PORT}/g" wq | ed -s ${CRYOSPARC_MASTER_DIR}/config.sh
echo '====='
cat ${CRYOSPARC_MASTER_DIR}/config.sh
echo '====='
# envs
THIS_USER=$(whoami)
THIS_USER_SUFFIX=${USER_SUFFIX:-'@slac.stanford.edu'}
echo "Starting cryoSPARC in ${CRYOSPARC_MASTER_DIR} as ${THIS_USER}${THIS_USER_SUFFIX} with..."
SOCK_FILE=$(cryosparcm env | grep CRYOSPARC_SUPERVISOR_SOCK_FILE | sed 's/^.*CRYOSPARC_SUPERVISOR_SOCK_FILE=//' | sed 's/"//g')
rm -f "${SOCK_FILE}" || true
cryosparcm restart
# always set the password to license
cryosparcm createuser --email ${THIS_USER}${THIS_USER_SUFFIX} --password "${CRYOSPARC_LICENSE_ID}" --name "User"
cryosparcm resetpassword --email ${THIS_USER}${THIS_USER_SUFFIX} --password "${CRYOSPARC_LICENSE_ID}"
# need to restart to get login prompt
cryosparcm restart
# remove all existing lanes and register standard lanes
echo "Registering job lanes..."
/app/cryosparc_master/bin/cryosparcm cli 'get_scheduler_targets()' | python -c "import sys, ast, json; print( json.dumps(ast.literal_eval(sys.stdin.readline())) )" | jq '.[].name' | sed 's:"::g' | xargs -n1 -I \{\} /app/cryosparc_master/bin/cryosparcm cli 'remove_scheduler_target_node("'{}'")'
# add slurm lanes
for i in `ls -1 /app/slurm/`; do
cd /app/slurm/$i
/app/cryosparc_master/bin/cryosparcm cluster connect
done
cd ${CRYOSPARC_MASTER_DIR}
echo "Success starting cryosparc master!"
###
# worker initiation
###
echo "Starting cryosparc worker for ${CRYOSPARC_MASTER_HOSTNAME}..."
export TMPDIR=${TMPDIR:-"/tmp/${THIS_USER}"}/cryosparc/
mkdir -p ${TMPDIR}
cd ${CRYOSPARC_WORKER_DIR}
# assume same config file
#printf "%s\n" "1,\$s/^export CRYOSPARC_LICENSE_ID=.*$/export CRYOSPARC_LICENSE_ID=${CRYOSPARC_LICENSE_ID}/g" wq | ed -s ${CRYOSPARC_WORKER_DIR}/config.sh
#printf "%s\n" "1,\$s/^export CRYOSPARC_MASTER_HOSTNAME=.*$/export CRYOSPARC_MASTER_HOSTNAME=${CRYOSPARC_MASTER_HOSTNAME}/g" wq | ed -s ${CRYOSPARC_WORKER_DIR}/config.sh
# start worker
#/app/cryosparc_worker/bin/cryosparcw connect --worker localhost --master cryosparc-api-$(whoami) --ssdpath $TMPDIR/
#TODO: delete existing workers first...?
/app/cryosparc_worker/bin/cryosparcw connect --worker ${CRYOSPARC_MASTER_HOSTNAME} --master ${CRYOSPARC_MASTER_HOSTNAME} --ssdpath $TMPDIR/
###
# monitor forever
###
echo "Success starting cryosparc worker!"
# should probably catch kill to terminate the instance
while :
do
echo 'heartbeat...'
sleep 300
done
[Desktop Entry]
Type=Application
Exec=sh ./cryosparc_launcher.sh
Hidden=false
X-GNOME-Autostart-enabled=true
Name=CryoSPARC Web App
[Desktop Entry]
Type=Application
Exec=sh /tmp/cryosparc_launcher.sh
Hidden=false
X-GNOME-Autostart-enabled=true
Name=CryoSPARC Launcher
namespace=cryosparc-prod
nodeSelectors="storage/cryoem=true group/cryoem=true accelerator=nvidia"
cryosparc_image=slaclab/cryosparc-live
cryosparc_version=2.9.1-0
apiVersion: apps/v1
kind: Deployment
metadata:
name: cryosparc-${USER}
labels:
app: cryosparc-${USER}
spec:
selector:
matchLabels:
app: cryosparc-${USER}
template:
metadata:
labels:
app: cryosparc-${USER}
spec:
nodeSelector:
$(list=(${nodeSelectors// / }); for k in "${!list[@]}"; do kv=(${list[k]//\=/ }); echo " ${kv[0]}: ${kv[1]}"; done)
containers:
- image: ${cryosparc_image}:${cryosparc_version}
name: cryosparc
env:
- name: CRYOSPARC_LICENSE_ID
value: ${CRYOSPARC_LICENSE_ID}
- name: JUPYTERHUB_USER
value: ${USER}
- name: EXTERNAL_UID
value: ${EXTERNAL_UID}
- name: EXTERNAL_GROUPS
value: ${EXTERNAL_GROUPS}
- name: HOMEDIRS
value: /gpfs/slac/cryo/fs1/u/
ports:
- containerPort: 39000
- containerPort: 39001
- containerPort: 39002
- containerPort: 39003
- containerPort: 39004
- containerPort: 39005
- containerPort: 39006
volumeMounts:
- name: gpfs-home
mountPath: /gpfs/slac/cryo/fs1/u/
- name: gpfs-exp
mountPath: /gpfs/slac/cryo/fs1/exp/
- name: gpfs-g
mountPath: /gpfs/slac/cryo/fs1/g/
- name: scratch
mountPath: /scratch/
- name: tmp
mountPath: /tmp/
volumes:
- name: gpfs
persistentVolumeClaim:
claimName: ${namespace}--gpfs-home
- name: gpfs
persistentVolumeClaim:
claimName: ${namespace}--gpfs-exp
- name: gpfs
persistentVolumeClaim:
claimName: ${namespace}--gpfs-g
- name: scratch
persistentVolumeClaim:
claimName: ${namespace}--scratch
- name: tmp
persistentVolumeClaim:
claimName: ${namespace}--tmp
---
apiVersion: v1
kind: Service
metadata:
name: cryosparc-${USER}
labels:
name: cryosparc-${USER}
spec:
type: ClusterIP
ports:
- name: http
port: 39000
protocol: TCP
selector:
name: cryosparc-${USER}
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cryosparc-${USER}
annotations:
nginx.ingress.kubernetes.io/proxy-connect-timeout: "30s"
nginx.ingress.kubernetes.io/proxy-read-timeout: "20s"
nginx.ingress.kubernetes.io/client-max-body-size: "50m"
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
spec:
tls:
- hosts:
- cryosparc.slac.stanford.edu
secretName: tls-certificate
rules:
- host: cryosparc.slac.stanford.edu
http:
paths:
- path: /${USER}
backend:
serviceName: cryosparc-${USER}
servicePort: 39000
#!/bin/bash
# set -x
CONFIG_FILE="ENVIRONMENT"
if [ -n "${1}" ]; then
CONFIG_FILE="${1}"
fi
# import key value pairs
source ./${CONFIG_FILE}
# stolen from https://starkandwayne.com/blog/bashing-your-yaml/
function gen_template() {
rm -f final.yaml temp.yaml
( echo "cat <<EOF >final.yaml";
cat $1;
echo "EOF";
) >temp.yaml
. temp.yaml
cat final.yaml
rm -f final.yaml temp.yaml
}
gen_template "${2}"
#!/bin/sh
source ./PROD
kubectl create namespace ${namespace}
./gen_template.sh PROD storage.yaml | kubectl -n ${namespace} create -f -
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: ${namespace}--gpfs-home
labels:
type: local
spec:
storageClassName: ${namespace}--gpfs-home
capacity:
storage: 10000Gi
accessModes:
- ReadWriteMany
hostPath:
path: /gpfs/slac/cryo/fs1/u/
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: gpfs-home
spec:
storageClassName: ${namespace}--gpfs-home
accessModes:
- "ReadWriteMany"
resources:
requests:
storage: 100Gi
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: ${namespace}--gpfs-exp
labels:
type: local
spec:
storageClassName: ${namespace}--gpfs-exp
capacity:
storage: 10000Gi
accessModes:
- ReadWriteMany
hostPath:
path: /gpfs/slac/cryo/fs1/exp/
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: gpfs-exp
spec:
storageClassName: ${namespace}--gpfs-exp
accessModes:
- "ReadWriteMany"
resources:
requests:
storage: 100Gi
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: ${namespace}--gpfs-g
labels:
type: local
spec:
storageClassName: ${namespace}--gpfs-g
capacity:
storage: 10000Gi
accessModes:
- ReadWriteMany
hostPath:
path: /gpfs/slac/cryo/fs1/g/
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: gpfs-g
spec:
storageClassName: ${namespace}--gpfs-g
accessModes:
- "ReadWriteMany"
resources:
requests:
storage: 100Gi
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: ${namespace}--scratch
labels:
type: local
spec:
storageClassName: ${namespace}--scratch
capacity:
storage: 10000Gi
accessModes:
- ReadWriteMany
hostPath:
path: /scratch/
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: scratch
spec:
storageClassName: ${namespace}--scratch
accessModes:
- "ReadWriteMany"
resources:
requests:
storage: 100Gi
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: ${namespace}--tmp
labels:
type: local
spec:
storageClassName: ${namespace}--tmp
capacity:
storage: 10000Gi
accessModes:
- ReadWriteMany
hostPath:
path: /tmp/
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: tmp
spec:
storageClassName: ${namespace}--tmp
accessModes:
- "ReadWriteMany"
resources:
requests:
storage: 100Gi
Package: *
Pin: origin packages.mozilla.org
Pin-Priority: 1000
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment