---
layout: default
navsection: userguide
navmenu: Tutorials
title: "Writing a Crunch script"
navorder: 13
---
h1. Tutorial: 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.basedoc}}/user/getting_started/ssh-access.html#login, and have a "working environment.":{{site.basedoc}}/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
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'...
$ man gittutorial
or "click here to search Google for git tutorials":http://google.com/#q=git+tutorial
{% include notebox-end.html %}
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
$ mkdir crunch_scripts
$ cd 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. $ chmod +x hash.py
Next, add the file to @git@ staging. This tells @git@ that the file should be included on the next commit.
notextile. $ git add hash.py
Next, commit your changes to git. All staged changes are recorded into the local @git@ repository:
$ 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
$ 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
$ cat >the_job <<EOF
{
"script": "hash.py",
"script_version": "you:master",
"script_parameters":
{
"input": "c1bad4b39ca5a924e481008009d94e32+210"
}
}
EOF
$ arv -h job create --job "$(cat the_job)"
{
...
"uuid":"qr1hi-xxxxx-xxxxxxxxxxxxxxx"
...
}
$ arv -h job get --uuid qr1hi-xxxxx-xxxxxxxxxxxxxxx
{
...
"output":"880b55fb4470b148a447ff38cacdd952+54",
...
}
$ arv keep get 880b55fb4470b148a447ff38cacdd952+54/md5sum.txt
44b8ae3fde7a8a88d2f7ebd237625b4f var-GS000016015-ASM.tsv.bz2