---
layout: default
navsection: installguide
title: Install the Crunch dispatcher
...
The dispatcher normally runs on the same host/VM as the API server.
h2. Perl SDK dependencies
Install the Perl SDK on the controller.
* See "Perl SDK":{{site.baseurl}}/sdk/perl/index.html page for details.
h2. Python SDK dependencies
Install the Python SDK and CLI tools on controller and all compute nodes.
* See "Python SDK":{{site.baseurl}}/sdk/python/sdk-python.html page for details.
h2(#slurm). Set up SLURM
On the API server, install SLURM and munge, and generate a munge key.
On Debian-based systems:
~$ sudo /usr/bin/apt-get install slurm-llnl munge
~$ sudo /usr/sbin/create-munge-key
ControlMachine=uuid_prefix.your.domain
SlurmctldPort=6817
SlurmdPort=6818
AuthType=auth/munge
StateSaveLocation=/tmp
SlurmdSpoolDir=/tmp/slurmd
SwitchType=switch/none
MpiDefault=none
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
ProctrackType=proctrack/pgid
CacheGroups=0
ReturnToService=2
TaskPlugin=task/affinity
#
# TIMERS
SlurmctldTimeout=300
SlurmdTimeout=300
InactiveLimit=0
MinJobAge=300
KillWait=30
Waittime=0
#
# SCHEDULING
SchedulerType=sched/backfill
SchedulerPort=7321
SelectType=select/cons_res
SelectTypeParameters=CR_CPU_Memory
FastSchedule=1
#
# LOGGING
SlurmctldDebug=3
#SlurmctldLogFile=
SlurmdDebug=3
#SlurmdLogFile=
JobCompType=jobcomp/none
#JobCompLoc=
JobAcctGatherType=jobacct_gather/none
#
# COMPUTE NODES
NodeName=DEFAULT
PartitionName=DEFAULT MaxTime=INFINITE State=UP
NodeName=compute[0-255]
PartitionName=compute Nodes=compute[0-255] Default=YES Shared=YES
assign_node_hostname: worker1-%
* In @slurm.conf@: NodeName=worker1-[0000-0255]
If your worker hostnames are already assigned by other means, and the full set of names is known in advance, have your worker node bootstrapping script (see "Installing a compute node":install-compute-node.html) send its current hostname, rather than expect Arvados to assign one.
* In @application.yml@: assign_node_hostname: false
* In @slurm.conf@: NodeName=alice,bob,clay,darlene
If your worker hostnames are already assigned by other means, but the full set of names is _not_ known in advance, you can use the @slurm.conf@ and @application.yml@ settings in the previous example, but you must also update @slurm.conf@ (both on the controller and on all worker nodes) and run @sudo scontrol reconfigure@ whenever a new node comes online.
h2. Enable SLURM job dispatch
In your API server's @application.yml@ configuration file, add the line @crunch_job_wrapper: :slurm_immediate@ under the appropriate section. (The second colon is not a typo. It denotes a Ruby symbol.)
h2. Crunch user account
Run @sudo adduser crunch@. The crunch user should have the same UID, GID, and home directory on all compute nodes and on the dispatcher (API server).
h2. Git Repositories
Crunch scripts must be in Git repositories in the directory configured as @git_repositories_dir@/*.git (see the "API server installation":install-api-server.html#git_repositories_dir).
Once you have a repository with commits -- and you have read access to the repository -- you should be able to create a new job:
read -rd $'\000' newjob <Without getting this error: ArgumentError: Specified script_version does not resolve to a commith2. Running jobs * @services/api/script/crunch-dispatch.rb@ must be running. * @crunch-dispatch.rb@ needs @services/crunch/crunch-job@ in its @PATH@. * @crunch-job@ needs the installation path of the Perl SDK in its @PERLLIB@. * @crunch-job@ needs the @ARVADOS_API_HOST@ (and, if necessary in a development environment, @ARVADOS_API_HOST_INSECURE@) environment variable set. Example @/var/service/arvados_crunch_dispatch/run@ script:#!/bin/sh set -e rvmexec="" ## uncomment this line if you use rvm: #rvmexec="/usr/local/rvm/bin/rvm-exec 2.1.1" export PATH="$PATH":/path/to/arvados/services/crunch export ARVADOS_API_HOST={{ site.arvados_api_host }} export CRUNCH_DISPATCH_LOCKFILE=/var/lock/crunch-dispatch # This is the path to docker on your compute nodes. You might need to # change it to "docker", "/opt/bin/docker", etc. export CRUNCH_JOB_DOCKER_BIN=docker.io fuser -TERM -k $CRUNCH_DISPATCH_LOCKFILE || true ## Only if your SSL cert is unverifiable: # export ARVADOS_API_HOST_INSECURE=yes cd /path/to/arvados/services/api export RAILS_ENV=production exec $rvmexec bundle exec ./script/crunch-dispatch.rb 2>&1