--- layout: default navsection: userguide navmenu: Tutorials title: "Writing a Crunch script" ... h1. Writing a Crunch script In this tutorial, we will write the "hash" script demonstrated in the first tutorial. *This tutorial assumes that you are "logged into an Arvados VM instance":{{site.baseurl}}/user/getting_started/ssh-access.html#login, and have a "working environment.":{{site.baseurl}}/user/getting_started/check-environment.html* This tutorial uses *@you@* to denote your username. Replace *@you@* with your user name in all the following examples. h2. Setting up Git As discussed in the previous tutorial, all Crunch scripts are managed through the @git@ revision control system. First, you should do some basic configuration for git (you only need to do this the first time):
~$ git config --global user.name "Your Name"
~$ git config --global user.email you@example.com
On the Arvados Workbench, navigate to _Compute %(rarr)→% Code repositories._ You should see two repositories, one named "arvados" (under the *name* column) and a second with your user name. Next to *name* is the column *push_url*. Copy the *push_url* cell associated with your repository. This should look like git@git.{{ site.arvados_api_host }}:you.git. Next, on the Arvados virtual machine, clone your git repository:
~$ git clone git@git.{{ site.arvados_api_host }}:you.git
Cloning into 'you'...
This will create an git checkout in the directory called *@you@*. {% include 'notebox_begin' %} For more information about using @git@, try notextile.
$ man gittutorial
or "click here to search Google for git tutorials":http://google.com/#q=git+tutorial {% include 'notebox_end' %} h2. Creating a Crunch script Start by entering the *@you@* directory created by @git clone@. Next create a subdirectory called @crunch_scripts@ and change to that directory:
~$ cd you
~/you$ mkdir crunch_scripts
~/you$ cd crunch_scripts
Next, using @nano@ or your favorite Unix text editor, create a new file called @hash.py@ in the @crunch_scripts@ directory. notextile.
~/you/crunch_scripts$ nano hash.py
Add the following code to compute the md5 hash of each file in a collection:
{% include 'tutorial_hash_script_py' %}
Make the file executable: notextile.
~/you/crunch_scripts$ chmod +x hash.py
{% include 'notebox_begin' %} The below steps describe how to execute the script after committing changes to git. To test the script locally, please see the "debugging a crunch script":tutorial-job-debug.html page. {% include 'notebox_end' %} Next, add the file to @git@ staging. This tells @git@ that the file should be included on the next commit. notextile.
~/you/crunch_scripts$ git add hash.py
Next, commit your changes to git. All staged changes are recorded into the local @git@ repository:
~/you/crunch_scripts$ git commit -m"my first script"
[master (root-commit) 27fd88b] my first script
 1 file changed, 33 insertions(+)
 create mode 100755 crunch_scripts/hash.py
Finally, upload your changes to the Arvados server:
~/you/crunch_scripts$ git push origin master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 682 bytes, done.
Total 4 (delta 0), reused 0 (delta 0)
To git@git.qr1hi.arvadosapi.com:you.git
 * [new branch]      master -> master
You should now be able to run your script using Crunch, similar to how we did it in the "first tutorial.":tutorial-job1.html The field @"script_version"@ should be @you:master@ to tell Crunch to run the script at the head of the "master" git branch, which you just uploaded.
~/you/crunch_scripts$ cat >~/the_job <<EOF
{
 "script": "hash.py",
 "script_version": "you:master",
 "script_parameters":
 {
  "input": "c1bad4b39ca5a924e481008009d94e32+210"
 }
}
EOF
~/you/crunch_scripts$ arv job create --job "$(cat ~/the_job)"
{
 ...
 "uuid":"qr1hi-xxxxx-xxxxxxxxxxxxxxx"
 ...
}
~/you/crunch_scripts$ arv job get --uuid qr1hi-xxxxx-xxxxxxxxxxxxxxx
{
 ...
 "output":"880b55fb4470b148a447ff38cacdd952+54",
 ...
}
~/you/crunch_scripts$ arv keep get 880b55fb4470b148a447ff38cacdd952+54/md5sum.txt
44b8ae3fde7a8a88d2f7ebd237625b4f var-GS000016015-ASM.tsv.bz2
Next, "debugging a crunch script.":tutorial-job-debug.html