9912: Support YAML config files. Change default config file paths to /etc/arvados...
[arvados.git] / doc / install / install-compute-node.html.textile.liquid
1 ---
2 layout: default
3 navsection: installguide
4 title: Install a compute node
5 ...
6
7 h2. Install dependencies
8
9 First, "add the appropriate package repository for your distribution":{{ site.baseurl }}/install/install-manual-prerequisites.html#repos.
10
11 {% include 'note_python_sc' %}
12
13 On CentOS 6 and RHEL 6:
14
15 <notextile>
16 <pre><code>~$ <span class="userinput">sudo yum install perl python27-python-virtualenv fuse python27-python-arvados-python-client python27-python-arvados-fuse crunchrunner crunchstat arvados-docker-cleaner iptables ca-certificates</span>
17 </code></pre>
18 </notextile>
19
20 On other Red Hat-based systems:
21
22 <notextile>
23 <pre><code>~$ <span class="userinput">echo 'exclude=python2-llfuse' | sudo tee -a /etc/yum.conf</span>
24 ~$ <span class="userinput">sudo yum install perl python-virtualenv fuse python-arvados-python-client python-arvados-fuse crunchrunner crunchstat arvados-docker-cleaner iptables ca-certificates</span>
25 </code></pre>
26 </notextile>
27
28 On Debian-based systems:
29
30 <notextile>
31 <pre><code>~$ <span class="userinput">sudo apt-get install perl python-virtualenv fuse python-arvados-python-client python-arvados-fuse crunchrunner crunchstat arvados-docker-cleaner iptables ca-certificates</span>
32 </code></pre>
33 </notextile>
34
35 {% include 'install_compute_docker' %}
36
37 h2. Set up SLURM
38
39 Install SLURM following "the same process you used to install the Crunch dispatcher":install-crunch-dispatch.html#slurm.
40
41 h2. Copy configuration files from the dispatcher (API server)
42
43 The @slurm.conf@ and @/etc/munge/munge.key@ files need to be identical across the dispatcher and all compute nodes. Copy the files you created in the "Install the Crunch dispatcher":install-crunch-dispatch.html step to this compute node.
44
45 {% include 'install_compute_fuse' %}
46
47 {% include 'install_docker_cleaner' %}
48
49 h2. Add a Crunch user account
50
51 Create a Crunch user account, and add it to the @fuse@ and @docker@ groups so it can use those tools:
52
53 <notextile>
54 <pre><code>~$ <span class="userinput">sudo useradd --groups fuse,docker crunch</span>
55 </code></pre>
56 </notextile>
57
58 The crunch user should have the same UID, GID, and home directory across all compute nodes and the dispatcher (API server).
59
60 h2. Tell the API server about this compute node
61
62 Load your API superuser token on the compute node:
63
64 <notextile>
65 <pre><code>
66 ~$ <span class="userinput">HISTIGNORE=$HISTIGNORE:'export ARVADOS_API_TOKEN=*'</span>
67 ~$ <span class="userinput">export ARVADOS_API_TOKEN=@your-superuser-token@</span>
68 ~$ <span class="userinput">export ARVADOS_API_HOST=@uuid_prefix.your.domain@</span>
69 ~$ <span class="userinput">unset ARVADOS_API_HOST_INSECURE</span>
70 </code>
71 </pre>
72 </notextile>
73
74 Then execute this script to create a compute node object, and set up a cron job to have the compute node ping the API server every five minutes:
75
76 <notextile>
77 <pre><code>
78 #!/bin/bash
79 set -e
80 if ! test -f /root/node.json ; then
81     python - &lt;&lt;EOF
82 import arvados, json, socket
83 fqdn = socket.getfqdn()
84 hostname, _, domain = fqdn.partition('.')
85 node = arvados.api('v1').nodes().create(body={'hostname': hostname, 'domain': domain}).execute()
86 with open('/root/node.json', 'w') as node_file:
87     json.dump(node, node_file, indent=2)
88 EOF
89
90     # Make sure /dev/fuse permissions are correct (the device appears after fuse is loaded)
91     chmod 1660 /dev/fuse && chgrp fuse /dev/fuse
92 fi
93
94 UUID=`grep \"uuid\" /root/node.json  |cut -f4 -d\"`
95 PING_SECRET=`grep \"ping_secret\" /root/node.json  |cut -f4 -d\"`
96
97 if ! test -f /etc/cron.d/node_ping ; then
98     echo "*/5 * * * * root /usr/bin/curl -k -d ping_secret=$PING_SECRET https://$ARVADOS_API_HOST/arvados/v1/nodes/$UUID/ping" > /etc/cron.d/node_ping
99 fi
100
101 /usr/bin/curl -k -d ping_secret=$PING_SECRET https://$ARVADOS_API_HOST/arvados/v1/nodes/$UUID/ping?ping_secret=$PING_SECRET
102 </code>
103 </pre>
104 </notextile>
105
106 And remove your token from the environment:
107
108 <notextile>
109 <pre><code>
110 ~$ <span class="userinput">unset ARVADOS_API_TOKEN</span>
111 ~$ <span class="userinput">unset ARVADOS_API_HOST</span>
112 </code>
113 </pre>
114 </notextile>